/*
 * Vytvořil Tobiáš Potoček
 * tobiaspotocek@gmail.com
 * http://www.it-24.cz
 * 
 * POLL.JS - generovani ankety, ajaxove scriptiky
 *
 * compatibility: 2.x
 */

var animation=false; 
var pollXmlHttp;
var poll_id=0;  //id aktualni ankety
var konst=1.2;  //o kolikrat je vetsi sloupec nez 100%
var polldata;       //prijata polldata ze serveru
var box;        //anketovy div
var moznosti;   //obsahuje moznosti
var celkem;     //celkovy pocet hlasu

nactiAnketu(poll_id,0);

function loading() {
    var gif = document.getElementById('poll-loading').style;
    if (gif.visibility=='visible') {
        gif.visibility='hidden';
    }
    else {
        gif.visibility='visible';
    }
}

function promaz(element) {
    var ind = element.childNodes.length;
    for (var i=ind-1; i>=0; i--)  {
        element.removeChild(element.childNodes[i]);
    }
}

function show(element) {
    document.getElementById(element).style.display='block';
}

function hide(element) {
    document.getElementById(element).style.display='none';
}

function nactiAnketu(id,no) {
    loading();
    makePollXMLHttpRequest();
    pollXmlHttp.onreadystatechange = zpracujAnketu;
    pollXmlHttp.open("GET", "get.php?f=poll&id="+id+"&no="+no, true);
    pollXmlHttp.send(null);
}

function zpracujAnketu() {
    if (pollXmlHttp.readyState == 4) {
        if (pollXmlHttp.status == 200) {
            if (!pollXmlHttp.responseXML || pollXmlHttp.responseText==0) {
                poll_id=0;
                zadnaAnketa();
                loading();                
            }
            else {
                polldata = pollXmlHttp.responseXML;
                muzehlasovat = polldata.getElementsByTagName("muzehlasovat")[0].firstChild.nodeValue;
                poll_id = polldata.getElementsByTagName("id")[0].firstChild.nodeValue;
                if (muzehlasovat==1) {
                    ukazFormular();
                }
                else {
                    ukazVysledky(); 
                }
                loading();
            } 	 
        }
    }
}

function ukazFormular() {
    hide('no-polls');
    hide('poll-results');
    show('poll-vote');
    vykresliFormular();
}

function ukazVysledky() {
    hide('no-polls');
    hide('poll-vote');
    hide('poll-show-results');
    show('poll-results');
    vykresliVysledky();
}

function zadnaAnketa() {
    hide('poll-vote');
    hide('poll-results');
    hide('poll-show-results');
    show('no-polls');
}

function vykresliVysledky() {
    var anketa=Array();
    box = document.getElementById('poll-results');
    promaz(box);
    anketa=zakladniUdaje();
    celkem = anketa["celkem"];
    vypisOtazku(anketa["otazka"], box); 
    moznosti=polldata.getElementsByTagName("moznost");
    if (animation) {
        setTimeout("vykresliSloupec(0)", 500);
    }
    else vykresliSloupec(0);
}

function vykresliSloupec(m) {
    var sirka=0;
    var moznost=moznosti[m];
    var moznost_id=moznost.getElementsByTagName("moznost_id")[0].firstChild.nodeValue;
    var moznost_text=moznost.getElementsByTagName("moznost_text")[0].firstChild.nodeValue;
    var moznost_hlasu=moznost.getElementsByTagName("pocet_hlasu")[0].firstChild.nodeValue;
    var sloupec;
    var vnitrek;
    var s=0; //delka sloupce
    var v=0; //pocatecni rychlost & pocet cyklu
    
    if (celkem==0) sirka = 100 / moznosti.length; 
    else sirka = moznost_hlasu / (celkem / 100);
    sirka = Math.round(sirka);

    box.appendChild(document.createTextNode(moznost_text+" ("+moznost_hlasu+")"));

    sloupec=document.createElement("div");
    sloupec.setAttribute("id","sloupec"+moznost_id);
    sloupec.setAttribute("class","pollbar");
    sloupec.className="pollbar";
    
    vnitrek=document.createElement("div");
    vnitrek.appendChild(document.createTextNode(sirka+"%"));

    sloupec.appendChild(vnitrek);
    box.appendChild(sloupec);
            
    s=sirka*konst;
    v=2*s;
    v=Math.sqrt(v);
    rychlost=Math.round(v)+1;;
    var x=0;
    var zvetsi=0;

    if (animation) {
        for (var i=v; i>0; i--) {
            zvetsi=zvetsi+i;
            setTimeout('document.getElementById("sloupec'+moznost_id+'").style.width='+zvetsi, x*50);   
            x++;
        }
        m++;
        if (m<moznosti.length) {
            setTimeout("vykresliSloupec("+m+")", v*50);
        }
    }
    else {
        document.getElementById("sloupec"+moznost_id).style.width=s;
        m++;
        if (m<moznosti.length) {
            vykresliSloupec(m);
        }
    }
}

function vykresliFormular() {
    var anketa=Array();
    box = document.getElementById('poll-vote');
    var otazka, tlacitko, center;
    promaz(box);
    anketa=zakladniUdaje(polldata);
    vypisOtazku(anketa["otazka"], box);
    moznosti=polldata.getElementsByTagName("moznost");

    form = document.createElement("form");
    form.setAttribute("id","pollform");
    form.setAttribute("name","pollform");
    form.setAttribute("method","get");
    form.setAttribute("onsubmit","return false");

    box.appendChild(form);
    box = document.getElementById("pollform");

    for (var i=0; i<moznosti.length; i++) {
        moznost=moznosti[i];
        if (i==0) selected=true; else selected=false;
        vypisMoznost(moznost.getElementsByTagName("moznost_id")[0].firstChild.nodeValue,
                     moznost.getElementsByTagName("moznost_text")[0].firstChild.nodeValue,
                     selected
                     );
    }
    box.innerHTML=box.innerHTML+'<center><input type="button" class="button" value="Hlasuj!" onclick="hlasuj();" /></center>';
    show("poll-show-results");
}


function vypisMoznost(m_id, text, checked) {
    if (checked) {
        box.innerHTML=box.innerHTML+"<input type='radio' class='radio' name='hlas' value='"+m_id+"' checked='checked'>"+text+"<br /><br />";
    }
    else {
        box.innerHTML=box.innerHTML+"<input type='radio' class='radio' name='hlas' value='"+m_id+"'>"+text+"<br /><br />";
    }
}

function zakladniUdaje() {
    var anketa=Array();
    anketa["id"]=polldata.getElementsByTagName("id")[0].firstChild.nodeValue;
    anketa["otazka"]=polldata.getElementsByTagName("otazka")[0].firstChild.nodeValue;
    anketa["celkem"]=polldata.getElementsByTagName("celkem")[0].firstChild.nodeValue;
    anketa["pocet_moznosti"]=polldata.getElementsByTagName("pocet_moznosti")[0].firstChild.nodeValue;
    anketa["muzehlasovat"]=polldata.getElementsByTagName("muzehlasovat")[0].firstChild.nodeValue;
    return anketa;
}

function vypisOtazku(text, box) {
    otazka=document.createElement("b");
    otazka.appendChild(document.createTextNode(text));
    box.appendChild(otazka);
    box.appendChild(document.createElement("br"));
    box.appendChild(document.createElement("br"));
}

function hlasuj() {
    loading();
    for (var i=0; i<moznosti.length; i++) {
        if (self.document.forms.pollform.hlas[i].checked) {
            makePollXMLHttpRequest();
            pollXmlHttp.onreadystatechange = zpracujHlasovani;
            pollXmlHttp.open("GET","get.php?f=poll-hlasuj&id="+poll_id+"&hlas="+self.document.forms.pollform.hlas[i].value, true);
            pollXmlHttp.send(null); 
            break;
        }
    }
}

function zpracujHlasovani() {
    if (pollXmlHttp.readyState == 4) {
        if (pollXmlHttp.status == 200) {
            if (pollXmlHttp.responseText!="ok") {
                alert("Hlasování selhalo!\n"+pollXmlHttp.responseText);
                loading();                
            }
            else {
                loading();
                animation=true;
                setTimeout("nactiAnketu("+poll_id+",0)", 100);
            } 	 
        }
    }
}

function dalsiAnketa() {
    animation=true;
    nactiAnketu(0, poll_id);
}

function makePollXMLHttpRequest() {
    if (window.ActiveXObject) {
        pollXmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
    }
    else if (window.XMLHttpRequest) {
        pollXmlHttp = new XMLHttpRequest();
    }
}


