﻿/// <reference path="../API/Agility.js" />

Agility.RegisterNamespace("BNN.Polls");

(function(Polls) {

    var pollID = 0;
    var pnlPollID = "";
    var Question = "";
    var Answers = [];

    Polls.OnInit = function(pnlpollID, argPollID, ResultsOnly, question, answers) {

        pnlPollID = pnlpollID;
        pollID = argPollID;
        Question = question;
        Answers = answers;

        var cookie = getPollCookie();
        if (((cookie != null) && (cookie.length > 0)) || ResultsOnly) {

            BNN.Polls.ShowResults();
        }
        else {
            // Shows submit if the poll was answered & show results
            $("#PollVoteContainer").show();
        }

        //Bind submit
        $("#btnPollVote").bind("click", submitAnswer);
    };

    function submitAnswer() {

        var selectedRadioButton = $(".Polls input:checked");
        var selectedAnswer = 0;

        if (selectedRadioButton.length > 0) {

            selectedAnswer = selectedRadioButton.val();
        }

        if (selectedAnswer > 0) {
            $.ajax({
                type: "POST",
                url: AjaxWebserviceUrlNoCache + '/SubmitPoll',
                data: "{'pollId':" + pollID + ",'answerId':" + selectedAnswer + "}",
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                success: function(result) {
                    if (result.d != undefined && result.d != null) {
                        setPollCookie(selectedAnswer);
                        BNN.Polls.ShowResults();
                    }
                },
                complete: function(XMLHttpRequest, textStatus) {
                    //alert(XMLHttpRequest.status + ' ' + textStatus);
                    //alert(XMLHttpRequest.responseText);
                }
            });
        }
        else {
            alert('You must select an answer first.');
        }
    };

    Polls.ShowResults = function() {
        $.ajax({
            type: "POST",
            url: AjaxWebserviceUrlMinCache + '/GetPollResults',
            data: "{'pollId':" + pollID + "}",
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function(result) {
                if (result.d != undefined && result.d != null) {

					// Create dictionary for answer totals with answerID as key
					var answerTotals = {};
					for (var i = 0; i < Answers.length; i++) {
						var key = Answers[i].AnswerID.toString();
						answerTotals[key] = 0;
					}
					
                    var total = 0;
                    for (var i = 0; i < result.d.length; i++) {
						// Ensure only valid answerIDs are included in total
						var key = result.d[i].AnswerID.toString();
						if (typeof answerTotals[key] == "undefined") continue;
                        total += result.d[i].AnswerCount;
                    }

                    var html = "";
					var runningPercentage = 0;

                    for (var i = 0; i < Answers.length; i++) {
						var key = Answers[i].AnswerID.toString();
                        for (var j = 0; j < result.d.length; j++) {
                            if (Answers[i].AnswerID == result.d[j].AnswerID) {
                                answerTotals[key] += result.d[j].AnswerCount;
                            }
                        }
                        var percentage = formatTwoDecimalPlaces((answerTotals[key] / total) * 100);
						
						// Ensure the total equals 100%
						if (i == Answers.length - 1) {
							percentage = formatTwoDecimalPlaces(100 - runningPercentage);
						}
						
						runningPercentage += percentage;
						
                        var width = (160 / 100) * percentage;
                        html += "<div class=\"PollResult\"><div class=\"Answer\">" + Answers[i].Answer + ":</div><div class=\"Bar\"><img src=\"/Images/Backgrounds/PollResult.png\" height=\"13px\" width=\"" + width + "px\" /></div><div class=\"Percentage\">" + percentage + "%</div></div><div class=\"Clear\"></div>";
                    }

                    $("#PollResultsContainer").html(html);

                    $("#PollVoteContainer").hide();
                    $("#PollResultsLink").hide();

                    $("#PollResultsContainer").show();
                    $("#PollResultsLabel").show();

                    var cookie = getPollCookie();
                    if ((cookie == null) || (cookie.length == 0)) {
                        $("#PollVoteLink").show();
                    }
                }
            },
            complete: function(XMLHttpRequest, textStatus) {
                //alert(XMLHttpRequest.status + ' ' + textStatus);
                //alert(XMLHttpRequest.responseText);
            }
        });
    };

    Polls.ShowVote = function() {

        $("#PollResultsContainer").html("");

        $("#PollVoteContainer").show();
        $("#PollResultsLink").show();

        $("#PollResultsContainer").hide();
        $("#PollResultsLabel").hide();
        $("#PollVoteLink").hide();
    }

    function getPollCookie() {

        return BNN.Cookie.Get("BNN_PollCookie_" + pollID);
    }

    function setPollCookie(answerID) {

        var currentDate = new Date();
        var minutes = ((23 - currentDate.getHours()) * 60) + (60 - currentDate.getMinutes());

        BNN.Cookie.Set("BNN_PollCookie_" + pollID, answerID, minutes);
    }

    function formatTwoDecimalPlaces(number) {
        return Math.round(number * 100) / 100;
    }

})(BNN.Polls);

