function NewsPollVoteSubmit(seqNumber, pollId, allowed, cookie) {
  var form = document["newspollvote" + seqNumber];
  var voteCount = cookie.split("-")[0];
  var oldVoteCount = voteCount;
  var req = "pollvote.php?pollId=" + pollId + "&cookie=" + cookie;
  for (i=0; i<form.poll.length; i++) {
    if (form.poll[i].checked == true) {
      voteCount++;
      req += "&poll=" + form.poll[i].value;
    }
  }
  if (voteCount > allowed) {
    var message = "Please vote for no more than 3.";
    if (oldVoteCount != 0) {
      message += "  You previously voted for " + oldVoteCount;
    }
    alert(message);
    return;
  }
  if (voteCount == 0) {
    alert("Please vote for at least one.");
    return;
  }

  bObj = new JSONscriptRequest(req); // create a new request object
  bObj.buildScriptTag(); // build a dynamic script tag
  bObj.addScriptTag(); // add the script to the page -- transfers control to Callback
}

function NewsPollVoteCallback(cookie, accepted) {
  var pollId, list; // so it will be visible outside the loop
  for (var i=0; i<voteSeqNumbersUsed.length; i++) {
    var seqNumber = voteSeqNumbersUsed[i];
    var span = document.getElementById("vote" + seqNumber);
//    if (span == null) {
//      continue;
//    }
    if (accepted) {
      SetCookie("newspollvote", cookie);
      var form = document["newspollvote" + seqNumber];
      question = form.question.value;
      list = form.list.value;
      pollId = form.pollId.value;
      allowed = form.allowed.value;
      code = NewsPollVote(question, list, seqNumber, pollId, allowed);
    } else {
      code = "Someone else is currently voting.  Please reload the page and try again.";
    }
    span.innerHTML = code;
  }
  if (accepted) { // update the results
//    NewsPollResultsSubmit(pollId, list); // doesn't work, so reload the page to get updated results
    document.location.replace(document.location);
  }
}

var voteSeqNumbersUsed = new Array(0);

function NewsPollVote(question, list, seqNumber, pollId, allowed) {

  // create a list of sequence numbers used

  var found = false;
  for (i=0; i<voteSeqNumbersUsed.length; i++) {
    if (voteSeqNumbersUsed[i] == seqNumber) {
      found = true;
      break;
    }
  }
  if (!found) {
    voteSeqNumbersUsed[voteSeqNumbersUsed.length] = seqNumber;
  }

  // process the cookie

  var cookie = GetCookie("newspollvote");
  if (cookie == "") {
    SetCookie("newspollvote", "0-" +new Date().getTime());
    cookie = GetCookie("newspollvote");
  }
  var voteCount = cookie.split("-")[0];
  var voted = (voteCount == 3);

  if (voted) {
    code = "You have cast your " + allowed + " votes";
    return code;
  }

  // create the form

  var instruction = (allowed == 1) ? "  Cast 1 vote" : "  Cast up to " + allowed + " votes";
  var code = "";
  code += "<span id='vote" + seqNumber + "'>";
  code += "<center><br>";
  code += "<b>Question:</b><br>" + question + "<br>" + instruction + "<br><br>";
  code += "<form name='newspollvote" + seqNumber + "'>";
  code += "<input type='hidden' name='question' value='" + question + "'>";
  code += "<input type='hidden' name='list' value='" + list + "'>";
  code += "<input type='hidden' name='pollId' value='" + pollId + "'>";
  code += "<input type='hidden' name='allowed' value='" + allowed + "'>";
  code += "<table>";
  listArray = list.split("\t");
  for (var i=0; i<listArray.length; i++) {
    code += "<tr><td><input type='checkbox' name='poll' value='" + listArray[i] + "'></td><td>" + listArray[i] + "</td></tr>";
  }
  code += "</table>";
  code += 
    "<br><br><input type='button' value='Vote' " +
    "onclick='NewsPollVoteSubmit(\"" + seqNumber + "\",\"" + pollId + "\",\"" + allowed + "\",\"" + cookie  + "\");'>";
  code += "&nbsp;&nbsp;";
  code += "</form>";
  code += "</center>";
  code += "</span>";
  return code;
}

// ======================================================================= //

function NewsPollResultsSubmit(pollId, list) {
  var req = "pollresults.php?pollId=" + pollId + "&list=" + escape(list);
  bObj = new JSONscriptRequest(req); // create a new request object
  bObj.buildScriptTag(); // build a dynamic script tag
  bObj.addScriptTag(); // add the script to the page -- transfers control to Callback
}

var resultsSeqNumbersUsed = new Array(0);

function NewsPollResultsCallback(tally) {
  for (var i=0; i<resultsSeqNumbersUsed.length; i++) {
    var seqNumber = resultsSeqNumbersUsed[i];
    var span = document.getElementById("results" + seqNumber);
    var code = tally;
    span.innerHTML = "<br>" + code;
  }
}

function NewsPollResults(list, seqNumber, pollId) {

  // create a list of sequence numbers used

  var found = false;
  for (i=0; i<resultsSeqNumbersUsed.length; i++) {
    if (resultsSeqNumbersUsed[i] == seqNumber) {
      found = true;
      break;
    }
  }
  if (!found) {
    resultsSeqNumbersUsed[resultsSeqNumbersUsed.length] = seqNumber;
  }

  // process the cookie

  var cookie = GetCookie("passport");
  if (cookie == "") { // user  has not yet registered
    code = "";
    code += "<center>";
    code += "<form name='newslogin" + seqNumber + "' action='login.php' method='post' onsubmit='return LoginCheck(document.newslogin" + seqNumber + ");'>";
    code += "  <input type='hidden' name='returnMessage' value='Return to Previous Page'>";
    code += Login("newslogin" + seqNumber);
    code += "</form>";
    code += "</center>";
    return code;
  } else { // user has registered
    var code = "";
    code += "<form name='newscomment' action='login.php' method='post' " +
                  "onsubmit='return LoginCheck(document.newslogin" + seqNumber + ");'>";
    code += "<span id='results" + seqNumber + "'>";
    code += "Searching<br>";
    code += "</span>";
    setTimeout("NewsPollResultsSubmit('" + pollId + "','" + list + "')", 1000);
    return code;
  }

}
