﻿/// <reference path="../API/Agility.js" />

Agility.RegisterNamespace("VIVA.Polls");

(function(Polls) {

    var pollID = 0;
    var pnlPollID = "";

    Polls.OnInit = function(pnlpollID, argPollID, ResultsOnly) {

        pnlPollID = pnlpollID;
        pollID = argPollID;

        FixBalls();

        var cookie = GetVIVAPollCookie();
        if (cookie != null || ResultsOnly) {
            if (cookie.indexOf(',' + pollID + ',') > -1 || ResultsOnly) {
                unbindPolls();
                getPollResults();
            }
            else {
                // Shows submit if the poll was answered & show results
                $("#" + pnlPollID + " input[type=button]").show();
            }
        }

        // Bind select
        $("#" + pnlPollID + " div.Answer").each(function() {
            $(this).bind("click", selectPollAnswer);
        });

        //Bind submit
        $("#" + pnlPollID + " input").bind("click", submitAnswer);
    };

    function FixBalls() {
        $("#" + pnlPollID + " div.Ball").each(function() {
            var ball = $(this);
            ball.css('top', Math.floor((ball.parent().parent().height() - 24) / 2));
            ball.show();
        });
    };

    function unbindPolls() {
        var answers = $("#" + pnlPollID + " div.Answer");
        answers.unbind('click');
        answers.attr('onclick', '');
        // unBind submit
        var submit = $("#" + pnlPollID + " input");
        submit.unbind("click");
        submit.hide();
    };

    var selectedAnswer = 0;

    function selectPollAnswer() {
        var answer = $(this);

        selectedAnswer = answer.attr("answerid");
        $("div.Answer", answer.parent()).removeClass("SelectedAnswer");
        answer.addClass("SelectedAnswer");
    };

    function submitAnswer() {
        if (selectedAnswer > 0) {
            $.ajax({
                type: "POST",
                url: Agility.ResolveUrl("~/WebServices/AjaxServices.asmx") + '/SubmitPoll',
                data: "{'PollID':" + pollID + ",'AnswerID':" + selectedAnswer + ",'UserID':null}",
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                success: function(result) {
                    if (result.d != undefined && result.d != null) {
                        SetVIVAPollCookie(pollID);
                        showPollResults(result.d);
                        unbindPolls();
                    }
                },
                complete: function(XMLHttpRequest, textStatus) {
                    //alert(XMLHttpRequest.status + ' ' + textStatus);
                    //alert(XMLHttpRequest.responseText);
                }
            });
        }
        else {
            alert('You must select an answer first.');
        }
    };

    function getPollResults() {
        $.ajax({
            type: "POST",
            url: Agility.ResolveUrl("~/WebServices/AjaxServices.asmx") + '/PollResults',
            data: "{'PollID':" + pollID + "}",
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function(result) {
                if (result.d != undefined && result.d != null) {
                    showPollResults(result.d);
                }
            },
            complete: function(XMLHttpRequest, textStatus) {
                //alert(XMLHttpRequest.status + ' ' + textStatus);
                //alert(XMLHttpRequest.responseText);
            }
        });
    };

    function searchAnswerResult(answerID, results) {
        for (var i = 0; i < results.length; i++) {
            if (results[i].Key == answerID) return results[i].Value;
        }
        return 0;
    };

    function showPollResults(results) {
        var total = 0;
        for (var i = 0; i < results.length; i++) {
            total += results[i].Value;
        }

        var pollDiv = $('#' + pnlPollID);
        pollDiv.find("div.Polls div.Answer").each(function() {
            var key = $(this);
            var answer = key.find(".PollResult");
            var percent = answer.find(".Center");
            var value = searchAnswerResult(key.attr("answerid"), results);

            if (value == 0) {
                answer.find("div").css("background-image", "none");
            }
            else {
                percent.width(((key.width() - 85) * value / total) + 'px');
                var text = answer.find(".Right");
                text.html('&nbsp;&nbsp;' + Math.ceil(value / total * 100) + '%');
            }
            answer.show();
        });

        FixBalls();

        // Remove hand cursor
        $('div.Answer', pollDiv).each(function() {
            $(this).removeClass('Hand');
        });
    };

})(VIVA.Polls);
