function loadSurvey(slug, elementId) {
  $(document).ready(function() {
    var url = "/crowdsourcing/" + slug + "/api/can_enter/";
    $.getJSON(url, function(canEnter, status) {
      loadSurveyForm(slug, elementId, !canEnter);
    });
  });
}

var thanksMessage = "Thanks for responding!";

function loadSurveyForm(slug, elementId, alreadyEntered) {
  var url = "/crowdsourcing/" + slug + "/api/questions/";
   
  $.getJSON(url, function(data, status) {
    var wrapper = initializeWrapper(elementId);
    var beforeWrapper = function(text, element) {
      if (text) {
        wrapper.before(element.html(text));
      }
    };
    beforeWrapper(data.title, $("<h3/>"));
    beforeWrapper(data.tease, $("<p/>").addClass("subtitle"));
    beforeWrapper(data.description, $("<p/>").addClass("description"));
    var form = $("<form/>").addClass("vote").appendTo(wrapper);
    
    $tease = $('#' + elementId).parent().parent();
    if ($tease.attr('class') == 'tease') {
    	$tease.children().eq(0).hide(); // Hide Tease Paragraph
    }
    
    var questionCount = 0;
    for (questionCmsId in data.questions) {
      questionCount++;
    }
    for (questionCmsId in data.questions) {
      var question = data.questions[questionCmsId]
      var questionName = data.id + "_" + questionCmsId + "-answer";
      var questionId = "id_" + questionName;
      var answerId = function(i) {
        return questionId + "_" + i;
      };
      var div = $("<div/>").attr("id", "inner_" + slug).appendTo(form);
      $("<h2/>").html(question.question).appendTo(div);
     
     if (alreadyEntered) {
        div.text(thanksMessage);
      } else if (1 == questionCount) {
        var answerInput = $("<input type='hidden' />");
        answerInput.attr("name", questionName).appendTo(div);
        var ul = $("<ul class='voteList' />").appendTo(div);
        for (var i = 0; i < question.answers.length; i++) {
          var answer = question.answers[i];
          var li = $("<li/>").appendTo(ul);
          var css = {cursor: "pointer"};
          $("<a/>").css(css).html(answer).appendTo(li).click(function(evt) {
            answerInput.attr("value", $(this).html());
            postSurvey(slug, form, elementId);
            evt.preventDefault();
          }).mouseover(function(){
		      //RollOver State
		      $(this).addClass('surveyRoll');
		      $(this).parent().addClass('surveyRoll');
		  }).mouseout(function(){
		      //RollOut
			  $(this).removeClass('surveyRoll');
			  $(this).parent().removeClass('surveyRoll');
		  });
        }
      } else {
        var ul = $("<ul/>").appendTo(form);
        for (var i = 0; i < question.answers.length; i++) {
          var answer = question.answers[i];
          var li = $("<li/>").appendTo(ul);
          var label = $("<label/>").attr("for", answerId(i)).appendTo(li);
          var input = $("<input type='radio' />").attr("id", answerId(i));
          input.attr("name", questionName).attr("value", answer);
          input.appendTo(label);
          label.append(document.createTextNode(" " + answer));
        }
        var div = $("<div/>").addClass("message");
        div.attr("id", questionId + "_message").appendTo(form);
      }
    }
    if (questionCount > 1) {
      $("<button/>").attr("type", "button").text("Submit").click(function() {
        postSurvey(slug, form, elementId);
      }).appendTo(form);
    }
    appendSeeResults(form, slug);
  });
}

function appendSeeResults(appendTo, slug) {
  var a = $("<a/>").text("Survey Results");
  a.attr("href", "/crowdsourcing/" + slug + "/results/");
  $("<p/>").addClass("results").appendTo(appendTo).append(a);
}

function loadSurveyResults(slug, elementId) {
  var url = "/crowdsourcing/" + slug + "/api/questions/";
  $.getJSON(url, function(data, status) {
    var wrapper = initializeWrapper(elementId);
    $("<h1/>").html(data.title).appendTo(wrapper);
    $("<p/>").html(data.description).appendTo(wrapper);
    YAHOO.widget.Chart.SWFURL = 
        "http://yui.yahooapis.com/2.8.0r4/build/charts/assets/charts.swf";
    var chartDataMap = [];
    for (question in data.questions) {
      var next = {response: question, count: data.questions[question]};
      chartDataMap.push(next);
    }
    var chartData = new YAHOO.util.DataSource(chartDataMap);
    chartData.responseType = YAHOO.util.DataSource.TYPE_JSARRAY;
    chartData.responseSchema = { fields: [ "response", "count" ] };

    var chart1 = new YAHOO.widget.PieChart("chart1", chartData, {
        dataField: "count",
        categoryField: "response",
        style: {
          padding: 20,
          legend: {
            display: "right",
            padding: 10,
            spacing: 5,
            font: {
              family: "Arial",
              size: 13
            }
          }
        }, expressInstall: "assets/expressinstall.swf"
      });
  });
}

function initializeWrapper(elementId) {
  var wrapper = $("#" + elementId);
  wrapper.empty().addClass("clearfix").addClass("survey_wrapper");
  wrapper.wrap('<div class="poll" />');
  return wrapper;
}

function postSurvey(slug, form, elementId) {
  var data = {};
  form.find("input").each(function(i) {
    var input = $(this);
    if (!data[input.attr("name")]) {
      data[input.attr("name")] = null;
    }
    if (input.attr("type") == "radio") {
      if (input.attr("checked")) {
        data[input.attr("name")] = input.attr("value");
      }
    } else {
      data[input.attr("name")] = input.attr("value");
    }
  });
  var valid = true;
  for (key in data) {
    valid = valid && null !== data[key];
    form.find("#" + key + "_message").text(null === data[key] ? "Required" : "");
  }
  if (valid) {
    $.post("/crowdsourcing/" + slug + "/", data, function(resultData, status) {
      $("#inner_" + slug).html(thanksMessage);
    });
  }
}
