var pollSubmitUrl = null;
var cookie_name = null;

var cssClassSubmitMessage = null;
var cssClassResultContentContainer = null;
var cssClassVotesCount = null;
var cssClassResultItemContainer = null;
var cssClassBarContainer = null;
var cssClassBarTitle = null;
var cssClassAnswerContainer = null;
var cssClassAnswerList = null;

//initial setup
function InitPoll(datastring, url, c_name) {
    var PollObject = datastring;
    pollSubmitUrl = url;
    cookie_name = c_name;
    var pollId = 0;
 
    cssClassSubmitMessage = PollObject.CssClasses["CssClassSubmitMessage"];
    cssClassResultContentContainer = PollObject.CssClasses["CssClassResultContentContainer"];
    cssClassVotesCount = PollObject.CssClasses["CssClassVotesCount"];
    cssClassResultItemContainer = PollObject.CssClasses["CssClassResultItemContainer"];
    cssClassBarContainer = PollObject.CssClasses["CssClassBarContainer"];
    cssClassBarTitle = PollObject.CssClasses["CssClassBarTitle"];
    cssClassAnswerContainer = PollObject.CssClasses["CssClassAnswerContainer"];
    cssClassAnswerList = PollObject.CssClasses["CssClassAnswerList"];

    if (cssClassBarContainer == '')
        cssClassBarContainer = "bar-container-grey";
    //initial setup
    if (PollObject != null) {
        pollId = PollObject.PollId;

        if (PollObject.Alignment != "Block") {
            jQuery("#poll_container_" + pollId + "").attr("style", "float:" + PollObject.Alignment);
        }
        else {
            jQuery("#poll_container_" + pollId + "").attr("style", "clear:both;display:block;margin-left:auto;margin-right:auto");
        }
        
        jQuery("#answer_container_" + pollId + "").attr('class', 'answer-list');
        jQuery("#answer_list_" + pollId + "").attr('class', 'answer-container');

        jQuery("#return_to_poll_" + pollId + "").hide();
        jQuery("input[id=vote_button_" + pollId + "]").attr('disabled', 'disabled');

        //clear selections
        jQuery("input[id=answer_choice_" + pollId + "]").each(function() {

            jQuery(this).attr('disabled', 'disabled');
            jQuery(this).removeAttr('disabled');
            jQuery(this).attr("checked", false);
        });
        
        //if poll has ended show results mode - overrides suppress results	
        var endDate = PollObject.PollEndDate.match(/[0-9]/g).join('');
        var poll_end_date = new Date(eval(endDate));
        var compare_date = new Date();
        compare_date.setDate(compare_date.getDate() - 1)

        if (poll_end_date <= compare_date) {
            jQuery("#answer_container_" + pollId + "").empty();

            loadResults(PollObject, pollId);
            return;
        }

        //check for cookie and enable/disable poll choices or show results
        if (jQuery.cookie(cookie_name) != null) {
            var cookie_value = jQuery.cookie(cookie_name);

            if (cookie_value.indexOf(PollObject.PollId) >= 0) {

                if (PollObject.SuppressResults == true) {
                    //show answer choices but disable them
                    jQuery("input[id=answer_choice_" + pollId + "]").attr('disabled', 'disabled');
                    jQuery("input[id=vote_button_" + pollId + "]").attr('disabled', 'disabled');
                }
                else {
                    //show answers
                    jQuery("#answer_container_" + pollId + "").empty();
                    loadResults(PollObject, pollId);
                }
            }
        }
        
        //remove the initial loading indicator css
        if (cssClassAnswerContainer == null) {
            jQuery("#answer_container_" + pollId + "").attr('class', '');
        }
        else {
            jQuery("#answer_container_" + pollId + "").attr('class', cssClassAnswerContainer);
        }

        if (cssClassAnswerList == null) {
            jQuery("#answer_list_" + pollId + "").attr('class', '');
        }
        else {
            jQuery("#answer_list_" + pollId + "").attr('class', cssClassAnswerList);
        }


        //attach events
        jQuery("a[id=link_results_" + pollId + "]").bind('click', function(event) {

            //show results
            event.preventDefault();
            jQuery("#answer_container_" + pollId + "").hide();
            loadResults(PollObject,pollId);
            jQuery("#return_to_poll_" + pollId + "").show();
        });

        jQuery("a[id=link_return_" + pollId + "]").bind('click', function(event) {

            //show questions
            event.preventDefault();
            jQuery("#results_" + pollId + "").empty();
            jQuery("#total_votes_" + pollId + "").empty();
            jQuery("#return_to_poll_" + pollId + "").hide();
            jQuery("#answer_container_" + pollId + "").show();
        });

        //enable the submit button when an answer is chosen
        jQuery("input[id=answer_choice_" + pollId + "]").each(function() {
            jQuery(this).bind('click', function() {
                jQuery("#vote_button_" + pollId + "").removeAttr('disabled');
            });
        });
        
        //event for vote button
        jQuery("#vote_button_" + pollId + "").bind('click', function() {

            var answerids = "";

            jQuery("input[id=answer_choice_" + pollId + "]:checked").each(function() {
                answerids += jQuery(this).val() + ",";
            });

            if (answerids.length < 1) {
                alert("Please choose an answer");
                return;
            }

            jQuery.ajax({
                type: "GET",
                url: pollSubmitUrl,
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                data: { did: PollObject.DomainObjectId, pid: PollObject.PollId, aid: answerids },
                success: function(data) {

                    var cookie_value = "";

                    //setcookie
                    if (jQuery.cookie(cookie_name) != null) {
                        cookie_value = jQuery.cookie(cookie_name);
                    }

                    cookie_value += PollObject.PollId + ",";
                    jQuery.cookie(cookie_name, cookie_value, { path: '/', expires: 1 });

                    if (PollObject.SuppressResults == false) {
                        jQuery("#answer_container_" + pollId + "").empty();
                        loadResults(data, PollObject.PollId);
                        if (cssClassSubmitMessage == '') {
                            jQuery("<div>Thank you for voting.</div>").insertAfter("#graph_" + pollId + "");
                        }
                        else {
                            jQuery("<div class=\"" + cssClassSubmitMessage + "\">Thank you for voting.</div>").insertAfter("#graph_" + pollId + "");
                        }
                    }
                    else {
                        jQuery("#vote_container_" + pollId + "").each(function() {
                            jQuery("input", this).attr('disabled', 'disabled');
                        });

                        if (cssClassSubmitMessage == '') {
                            jQuery("<div>Thank you for voting.</div>").insertBefore("#vote_button_" + pollId + "");
                        }
                        else {
                            jQuery("<div class=\"" + cssClassSubmitMessage + "\">Thank you for voting.</div>").insertBefore("#vote_button_" + pollId + "");
                        }
                    }
                },
                error: function(data) {
                    alert("Your vote could not be saved at this time. Please try again later.");
                }
            });
        });
    }
}


function loadResults(data,pollId) {

    var PollObject = data;
    var total_votes = data.TotalVotes;
    var percent = 0;
    var votes = data.Votes; ;
    var results_html = null;
    var votes_count = 0;
    var votes_html = "";

    if (cssClassResultContentContainer == '') {
        results_html = "<div id='graph_" + pollId + "'>\n";
    }
    else {
        results_html = "<div id='graph_" + pollId + "' class=\"" + cssClassResultContentContainer + "\">\n";
    }
    
    if (PollObject.SortResults == true) {
        votes = sortAssociativeArray(votes);
    }

    for (key in votes) {
        if (PollObject.ShowVotes == true) {
            if (cssClassVotesCount = '') {
              votes_html = "<span>"
            }
            else {
              votes_html = "<span class\"" + cssClassVotesCount + "\">"
          }
            
            votes_html += "(" + votes[key] + " votes)</span>";
        }
        if (parseInt(total_votes) > 0) {
            percent = Math.round((parseInt(votes[key]) / parseInt(total_votes)) * 100);
        }
        else {
            percent = 0;
        }

        if (cssClassResultItemContainer == '') {
            results_html += "<div>";
        }
        else {
            results_html += "<div class=\"" + cssClassResultItemContainer + "\">";
        }

        if (cssClassBarTitle == '') {
            results_html += "<div>";
        }
        else {
            results_html += "<div class=\"" + cssClassBarTitle + "\">";
        }

        results_html += key + "</div>";

        results_html += "<div id='bar_container_" + pollId + "' class=\"" + cssClassBarContainer + "\">";

        results_html += "<div id='bar_" + pollId + "" + votes[key] + "' style='width:0%;' >&nbsp;</div><span>" + percent + "%</span>" + votes_html + "</div></div>\n";
    }

    if (PollObject.ShowVotes == true) {
        jQuery("#total_votes_" + pollId + "").html("Total Votes: " + total_votes + "");
    }
    jQuery("div#results_" + pollId + "").append(results_html).fadeIn("slow", function() {
        animateResults(pollId, cssClassBarContainer);
    });
}

function animateResults(pollId, cssClassBarContainer) {
    jQuery("div." + cssClassBarContainer + " > div").each(function() {
        var percentage = jQuery(this).next().html();
        if (parseInt(percentage) == 0) {
            percentage = "1";
        }

        jQuery(this).css({ width: "0%" }).animate(
		 {
		     width: percentage
		 }, 2000);
    });
}

