var Campaign = new Object();
Campaign.data = {};

Campaign.pullFormData = function() {
  var formDataId = Campaign.fetchAndDeleteCookie('form_data_id')
  if (!formDataId) { return; }
  new Ajax.Request('/action_campaign/external/form_data/' + formDataId, {
    onSuccess: function(transport) {
      var responseText = transport.responseText
      var json = eval('(' + responseText + ')')
      if (json) {
        var form_values = eval('(' + unescape(json.form_values) + ')')
        if (form_values) {
          Campaign.processFormData(form_values)
        }
        var form_errors = eval('(' + unescape(json.form_errors) + ')')
        if (form_errors) {
          Campaign.processFormErrors(form_errors)
        }
      }
    }
  });
}

Campaign.fetchAndDeleteCookie = function(name) {
  var cookie = Cookie.get(name)
  if (cookie) {
    cookie = cookie.replace(/\+/g,'%20')
    Cookie.erase(name)
    return cookie
  }
}

Campaign.extractJSON = function(name) {
  var cookie = Campaign.fetchAndDeleteCookie(name)
  if (cookie) {
    var unescaped = unescape(cookie)
    if (unescaped) {
      var json = JSON.parse(unescaped)
      return json
    }
  }
}

Campaign.processPolls = function() {
  var pageId = Campaign.fetchAndDeleteCookie('poll_results_page_id')
  if (!pageId) { return; }
  var url = '/action_campaign/poll/results/' + pageId
  console.log('Fetching poll results using url: ' + url)
  new Ajax.Updater('campaign-poll-results', url, { method: 'get' });
}

Campaign.processFormErrors = function(data) {
  if (!data) { return }
  
  // process respondent answer errors
  var answers = data.answers
  if (answers) {
    for (var idx=0; idx < answers.length; idx++) {
      var answer = answers[idx]
      var question_id = answer.question_id
      if (answer.errors.length > 0) {
        var error_message = answer.errors[0].message
        
        console.log('Validation error for question ' + question_id + ': ' + error_message)
        
        var div = $('errors_data_q_' + question_id)
        div.innerHTML = error_message
        div.addClassName('field_error')
        
        var inputs = [$('data_q_' + question_id), $('data_[q_' + question_id + '][' + answer.choice_id + ']')]
        while (inputs.length > 0) {
          var input = inputs.pop();
          if (input) { input.addClassName('input_error') }
        }
        
      }
    }
  }
}

Campaign.processFormData = function(data) {
  if (!data) { return }
  
  // process respondent answer errors
  var answers = data.answers
  if (answers) {
    for (var idx=0; idx < answers.length; idx++) {
      var answer = answers[idx]
      var question_id = answer.question_id
      var question_type = answer.question_type
      
      switch (question_type) {
        
        case 'text_field':
          var input = $('data_q_' + question_id)
          var text = answer.answer_text
          input.value = text
        break;
        
        case 'text_area':
          var input = $('data_q_' + question_id)
          var text = answer.answer_textarea
          input.value = text
        break;
        
        case 'select_list':
          var input = $('data_q_' + question_id)
          var choice_id = answer.choice_id
          input.value = choice_id
        break;
        
        case 'checkbox_group':
          var choice_id = answer.choice_id;
          var input = $('data[q_' + question_id + '][' + choice_id +']')
          if (input) { input.checked = true; }
        break;
        
        case 'radio_group':
          var choice_id = answer.choice_id;
          var input = $('data[q_' + question_id + '][' + choice_id +']');
          if (input) { input.checked = true; }
        break;
        
        default:
          console.error('Unsupported form data return type: ' + question_type)
      }
      
    }
  }
}