HTTP = new Object();

HTTP._factories = [
  function() { return new XMLHttpRequest(); },
  function() { return new ActiveXObject("Microsoft.XMLHTTP"); },
  function() { return new ActiveXObject("Msxml2.XMLHTTP"); }
];
HTTP._factory = null;

HTTP.newRequest = function () {
  if (HTTP._factory != null) return HTTP._factory();
  for (var i = 0; i < HTTP._factories.length; i++) {
    try {
      var factory = HTTP._factories[i];
      var request = factory();
      if (request != null) {
        HTTP._factory = factory;
        return request;
      }
    } catch (e) {
      continue;
    }
  }
  HTTP._factory = function () {
    throw new Error("XMLHttpRequest not supported");
  }
  HTTP._factory();
}

function pollError(err) {
  var err;
  document.getElementById('poll_err').innerHTML = err;
  return false;
}


function pollSubmit(f) {
  for (var i = 1; i < f.elements.length; i++) {
    if (f.elements[i].checked) {
      var s = f.elements[i];
      break;
    }
  }
  if (s == undefined) return pollError('Por favor escolha uma op&ccedil;&atilde;o');

  var regexp = /%20/g;
  var params = "action=vote"+
               "&pol_id=" + encodeURIComponent(f.pol_id.value).replace(regexp, "+") +
               "&ans_id=" + encodeURIComponent(s.value).replace(regexp, "+");
  pollRequest(params);
  return false;
}

function pollRequest(params) {
  document.getElementById('poll_err').innerHTML = '';
  var params;

  request  = HTTP.newRequest();
  request.onreadystatechange = pollResult;
  request.open('POST', '/2010', true);
  request.setRequestHeader("Content-Type",
                           "application/x-www-form-urlencoded")
  request.setRequestHeader("Content-length", params.length);
  request.setRequestHeader("Connection", "close");
  request.send(params);
}

function pollResult() {
  if(request.readyState == 4) {
    if(request.status == 200 || request.status == 0) { // online && offline
      var msg = eval( "(" + request.responseText + ")" );
      if (msg.result != true) 
        return pollError(msg.error);
      poll_oldhtml = document.getElementById('poll_answers').innerHTML;
      document.getElementById('poll_answers').innerHTML = msg.html;
    }
  }
}

function pollShowResults(pol_id) {
  var pol_id;
  var regexp = /%20/g;
  var params = "action=showpoll"+
               "&pol_id=" + encodeURIComponent(pol_id).replace(regexp, "+");
  pollRequest(params);
  return false;
}

function pollGoback() {
  document.getElementById('poll_answers').innerHTML = poll_oldhtml;
  return false;
}

function topUp(toi_id) {
  var regexp = /%20/g;
  var params = "action=movetop"+
               "&direction=up"+
               "&toi_id=" + encodeURIComponent(toi_id).replace(regexp, "+");
  topRequest(params);
  
  return false;
}

function topDown(toi_id) {
  var regexp = /%20/g;
  var params = "action=movetop"+
               "&direction=down"+
               "&toi_id=" + encodeURIComponent(toi_id).replace(regexp, "+");
  topRequest(params);
  
  return false;
}

function topRequest(params) {
  var params;

  request  = HTTP.newRequest();
  request.onreadystatechange = topResult;
  request.open('POST', '/2010', true);
  request.setRequestHeader("Content-Type",
                           "application/x-www-form-urlencoded")
  request.setRequestHeader("Content-length", params.length);
  request.setRequestHeader("Connection", "close");
  request.send(params);
}

function topResult() {
  if(request.readyState == 4) {
    if(request.status == 200 || request.status == 0) { // online && offline
      var msg = eval("(" + request.responseText + ")");

      if (msg.result != true) {
        document.getElementById('top_err').innerHTML = msg.error;
        return false; 
      }
      document.getElementById('top_err').innerHTML     = '';
      document.getElementById('top_votes').innerHTML   = msg.votes;
      document.getElementById('top_persons').innerHTML = msg.persons;
      document.getElementById('top_items').innerHTML   = msg.html;

      // reload neto
      w_counter.count();

      // reload mrec
      var mrec = document.getElementById('mreciframe');
      mrec.contentWindow.location.reload(true);
    }
  }
}

