﻿function poll(pPreFix, pType, pPollId)
{
    var xpPollObj = new Object();
    
    function getJSON(pXML)
    {    
        eval(pXML);
        xpPollObj.json = json;
    }
    
    function getJSONDummy(pXML)
    {
        ;
    }
    
    function handler() 
    {
         if(xpPollObj.client.readyState == 4 && xpPollObj.client.status == 200) 
         {
            if(xpPollObj.doOperation == "display")
            {
                if(xpPollObj.client.getResponseHeader("PollData") != null)
                {
                    getJSON(xpPollObj.client.getResponseHeader("PollData"));
                    buildHTML();
                    onBack();
                }
            }
            else if(xpPollObj.doOperation == "voteme")
            {
                if(xpPollObj.client.getResponseHeader("PollData") != null)
                {
                    getJSONDummy(xpPollObj.client.getResponseHeader("PollData"));
                    updatePanel2();
                    onResults();
                }
            }
         }
    }
     
    function getData(doOperation, pQueryString)
    {
        xpPollObj.client = new XMLHttpRequest();
        xpPollObj.client.onreadystatechange = handler;
        var url = "/news/xpPoll.aspx?" + pQueryString;
        xpPollObj.doOperation = doOperation;
        xpPollObj.client.open("GET", url);
        xpPollObj.client.send(null);
    }
    
    function onInsert()
    {
        var pVoteid = null;
        var pVoteValue = null;
        var pPollid = null;
        
        var i;
        var j = 0;        
        while(j < xpPollObj.json.polls.poll.length)
        {
            i = 1;            
            while(i <= xpPollObj.json.polls.poll[j].options.count)
            {
                if(xpPollObj["poll" + j + "option" + i].checked == true)
                {
                    pVoteid = xpPollObj.json.polls.poll[j].options["option" + i].voteid;
                    pVoteValue = xpPollObj.json.polls.poll[j].options["option" + i].option;
                    pPollid = xpPollObj.json.polls.poll[j].id;
                    break;
                }
                i = i + 1;
            }
            if(pVoteid != null && pVoteValue != null && pPollid != null)
            {          
                getData("voteme", "do=voteme&pollid="+pPollid+"&voteid="+pVoteid+"&votevalue="+pVoteValue);
            }
            j = j + 1;
        }        
    }
    
    function onResults()
    {
        xpPollObj.elPanel1.style.display = "none";
        xpPollObj.elPanel2.style.display = "block";
    }
    
    function onBack()
    {
        xpPollObj.elPanel1.style.display = "block";
        xpPollObj.elPanel2.style.display = "none";
    }
    
    function updatePanel2()
    {
        //alert("To be implemented");
        //update panel 2
    }
    
    function addResult(pcounter)
    {
        var b = document.createElement("div");
        xpPollObj.elPanel2.appendChild(b);
        b.id = xpPollObj.preFix + "divOptions";
        
        var totDiv = document.createElement("div");
        b.appendChild(totDiv);
        totDiv.className = "optionsResults";
        totDiv.innerHTML = "Total votes: " + xpPollObj.json.polls.poll[pcounter].totalcount;
        
        var i = 1;
        while(i <= xpPollObj.json.polls.poll[pcounter].options.count)
        {
            var percent = parseInt((xpPollObj.json.polls.poll[pcounter].options["option"+i].count / xpPollObj.json.polls.poll[pcounter].totalcount) * 100) + "%";
            
            var elBDiv = document.createElement("div");
            b.appendChild(elBDiv);
            elBDiv.className = "pollResultsDiv";
            
            var elOSpan = document.createElement("span");
            elBDiv.appendChild(elOSpan);
            elOSpan.className = "optionsResults";
            elOSpan.innerHTML = xpPollObj.json.polls.poll[pcounter].options["option"+i].option;
            
            var elDiv = document.createElement("div");
            elBDiv.appendChild(elDiv);
            elDiv.className = "graph_out";
            
            var elCSpan = document.createElement("span");
            elDiv.appendChild(elCSpan);
            elCSpan.innerHTML = xpPollObj.json.polls.poll[pcounter].options["option"+i].count + " (" + percent + ")";
            elCSpan.style.width = percent;
            elCSpan.className = "graph_in optionsResultsStat";
            
            i = i + 1;
        }
    }
    
    function addOptions(pcounter)
    {
        var c = document.createElement("div");
        xpPollObj.elPanel1.appendChild(c);
        c.id = xpPollObj.preFix + "divOptions1" + pcounter;
        
        var i = 1;
        while(i <= xpPollObj.json.polls.poll[pcounter].options.count)
        {
            var index = "poll" + pcounter + "option" + i;
            
            var a = document.createElement("div");
            c.appendChild(a);
            a.className = "pollOptions";

            try
            {
                xpPollObj[index] = document.createElement("<input type=\"radio\" name=\"" + xpPollObj.preFix + "optionGroup" + pcounter + "\" />");
            }
            catch(err)
            {
                xpPollObj[index] = document.createElement("input");
                xpPollObj[index].name = xpPollObj.preFix + "optionGroup" + pcounter;
                xpPollObj[index].type = "radio";                
            }
            
            xpPollObj[index].id = xpPollObj.preFix + "divOption" + i + pcounter;
            xpPollObj[index].value = "\"" + xpPollObj.json.polls.poll[pcounter].options["option" + i].voteid + "\"";
            a.appendChild(xpPollObj[index]);
            
            var b = document.createElement("span");
            a.appendChild(b);
            b.innerHTML = xpPollObj.json.polls.poll[pcounter].options["option" + i].option;
            
            i = i + 1;
        }
    }

    function addLinks1()
    {
        xpPollObj.elDivLinks1 = document.createElement("div");
        xpPollObj.elPanel1.appendChild(xpPollObj.elDivLinks1);
        xpPollObj.elDivLinks1.id = xpPollObj.preFix + "divLinks";
        xpPollObj.elDivLinks1.className = "buttonwrapper";

        xpPollObj.elInsertLink = document.createElement("a");
        xpPollObj.elDivLinks1.appendChild(xpPollObj.elInsertLink);
        xpPollObj.elInsertLink.className = "ovalbutton"; 
        xpPollObj.elInsertLink.href = "javascript:void(0);";
        xpPollObj.elInsertLink.alt = "Vote";
        xpPollObj.elInsertLink.title = "Vote";
        xpPollObj.elInsertLink.onclick = onInsert;
           
        var elInsertLinkText = document.createElement("span");
        xpPollObj.elInsertLink.appendChild(elInsertLinkText);
        elInsertLinkText.innerHTML = "Vote";
        
        xpPollObj.elResultsLink = document.createElement("a");
        xpPollObj.elDivLinks1.appendChild(xpPollObj.elResultsLink);
        xpPollObj.elResultsLink.className = "ovalbutton";        
        xpPollObj.elResultsLink.href = "javascript:void(0);";
        xpPollObj.elResultsLink.alt = "View Results";
        xpPollObj.elResultsLink.title = "View Results";
        xpPollObj.elResultsLink.onclick = onResults;
        
        var elResultsLinkText = document.createElement("span");
        xpPollObj.elResultsLink.appendChild(elResultsLinkText);
        elResultsLinkText.innerHTML = "View Results";
    }
    
    function addLinks2()
    {
        xpPollObj.elDivLinks2 = document.createElement("div");
        xpPollObj.elPanel2.appendChild(xpPollObj.elDivLinks2);
        xpPollObj.elDivLinks2.id = xpPollObj.preFix + "divLinks";
        xpPollObj.elDivLinks2.className = "buttonwrapper";
        
        xpPollObj.elBackLink = document.createElement("a");
        xpPollObj.elDivLinks2.appendChild(xpPollObj.elBackLink);
        xpPollObj.elBackLink.className = "ovalbutton"; 
        xpPollObj.elBackLink.href = "javascript:void(0);";
        xpPollObj.elBackLink.alt = "Vote";
        xpPollObj.elBackLink.title = "Vote";
        xpPollObj.elBackLink.onclick = onBack;
           
        var elBackLinkText = document.createElement("span");
        xpPollObj.elBackLink.appendChild(elBackLinkText);
        elBackLinkText.innerHTML = "Back";
    }
    
    function addQuestion1(pcounter)
    {
        var a = document.createElement("div");
        xpPollObj.elPanel1.appendChild(a);
        a.id = xpPollObj.preFix + "divQuestion1" + pcounter;
        a.innerHTML = xpPollObj.json.polls.poll[pcounter].question;
        a.className = "pollQuestion";
    }
    
    function addQuestion2(pcounter)
    {   
        var a = document.createElement("div");
        xpPollObj.elPanel2.appendChild(a);
        a.id = xpPollObj.preFix + "divQuestion2" + pcounter;
        a.innerHTML = xpPollObj.json.polls.poll[pcounter].question;
        a.className = "pollQuestion";
    }
    
    function addPanels1()
    {
        var i = 0;
        while(i < xpPollObj.json.polls.poll.length)
        {
            addQuestion1(i);
            addOptions(i);
            i = i + 1;
        }
        addLinks1();
    }
    
    function addPanels2()
    {
        var i = 0;
        while(i < xpPollObj.json.polls.poll.length)
        {
            addQuestion2(i);
            addResult(i);
            i = i + 1;
        }
        addLinks2();
    }
    
    function addPanels()
    {
        xpPollObj.elPanel1 = document.createElement("div");
        xpPollObj.elPollContainer.appendChild(xpPollObj.elPanel1);
        xpPollObj.elPanel1.id = xpPollObj.preFix + "divPanel1";
        
        xpPollObj.elPanel2 = document.createElement("div");
        xpPollObj.elPollContainer.appendChild(xpPollObj.elPanel2);
        xpPollObj.elPanel2.id = xpPollObj.preFix + "divPanel2";
    }
    
    function addPollImage()
    {
        var pDiv = document.createElement("div");
        xpPollObj.elPollContainer.appendChild(pDiv);
        //pDiv.className = "pollImage";
        pDiv.className = "pollHead";
        pDiv.innerHTML = "DIGITAL POLL";
        
        
        /*var pImg = document.createElement("img");
        pDiv.appendChild(pImg);
        pImg.src = "/news/images/xpp/digitalpoll.gif";
        pImg.alt = "";
        pImg.title = "";*/
    }
        
    function buildHTML()
    {
        addPollImage();
        addPanels();
        addPanels1();
        addPanels2();
    }
    
    xpPollObj.preFix = pPreFix + "_" ;
    
    document.write("<div id=\"" + xpPollObj.preFix + "_pollContainer" + "\"></div>");
    xpPollObj.elPollContainer = document.getElementById(xpPollObj.preFix + "_pollContainer");    
    if(null == xpPollObj.elPollContainer)
    {
        alert("Sorry, Poll cannot be initialised.");
        return;    
    }
    
    xpPollObj.elPollContainer.className = "elPollContainer";

    var qs = (pType == 1)? ((pPollId > 0)? "&type=1&pollid=" + pPollId : "") : ((pType == 2)? "&type=2&pollid=" + pPollId : "");
    
    getData("display", "do=display" + qs);
} // end of Poll