
var request;
var queryString;   //will hold the POSTed data
var myForm;
var tryCount = 0;

function sendDataAsync(inF)
{
  myForm = inF;
  if(checkRequiredFields(inF))
  {
    if(inF.bakecookie.checked == true)
    {
        rememberMe(inF);
    }
    showPending();
    setQueryString(  );
    var url="/mt-fcgi/mt/mt-comments.cgi";
    httpRequest("POST",url,true);
  }
}

function setQueryString(  )
{
  queryString="";
  var frm = document.comments_form;
  var numberElements =  frm.elements.length;
  for(var i = 0; i < numberElements; i++)
  {
    if(i < numberElements-1)
    {
      queryString += frm.elements[i].name+"="+ encodeURIComponent(frm.elements[i].value)+"&";
    }
    else
    {
      queryString += frm.elements[i].name+"="+ encodeURIComponent(frm.elements[i].value);
    }
  }
}

//event handler for XMLHttpRequest
function handleResponse(  )
{
  if(request.readyState == 4)
  {
    var reqstatus = -1;
    try
    {
      reqstatus = request.status;
    }
    catch(ex)
    {
      handleError(reqstatus);
      return;
    }
    if(reqstatus == 200)
    {
      var divform = document.getElementById("commentFormDiv");
      divform.style.display='none';
      var respText = request.responseText;
      var div = document.getElementById("msgDisplay");
      if(respText == "")
      {
        respText = "<div id=\"commentack\"><h3>Thank you for commenting.  </h3><p>It may take a few minutes before your comment will appear on the blog.</p></div>";
      }
      div.innerHTML= respText;
    }
    else
    {
      handleError(reqstatus);
    }
  }//end outer if
}

function handleError(hstat)
{
  tryCount++;
  if(tryCount > 20)
  {
    alert("A problem occurred while processing your request.  Please try again.   Error Code: " + hstat);
  }
  else
  {
    sendDataAsync(myForm);
  }
}

/* Initialize a request object that is already constructed.
 Parameters:
   reqType: The HTTP request type, such as GET or POST.
   url: The URL of the server program.
   isAsynch: Whether to send the request asynchronously or not. */
function initReq(reqType,url,isAsynch)
{
  /* Specify the function that will handle the HTTP response */
  request.onreadystatechange=handleResponse;
  request.open(reqType,url,isAsynch);
  /* Set the Content-Type header for a POST request */
  request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
  request.send(queryString);
}

/* Wrapper function for constructing a request object.
 Parameters:
  reqType: The HTTP request type, such as GET or POST.
  url: The URL of the server program.
  asynch: Whether to send the request asynchronously or not. */

function httpRequest(reqType,url,asynch)
{
  //Mozilla-based browsers
  if(window.XMLHttpRequest)
  {
    request = new XMLHttpRequest(  );
  }
  else if (window.ActiveXObject)
  {
    request=new ActiveXObject("Msxml2.XMLHTTP");
    if (! request)
    {
      request=new ActiveXObject("Microsoft.XMLHTTP");
    }
  }
  //the request could still be null if neither ActiveXObject
  //initialization succeeded
  if(request)
  {
    initReq(reqType,url,asynch);
  }
  else
  {
        alert("Your browser does not permit the use of all of this application's features!");
  }
}

function showPending()
{
  var elm = document.getElementById("commentprocessing");
  elm.style.display="inline";
  elm.innerHTML="Processing your comment<blink>...</blink>";
  elm = document.getElementById("comment-post");
  elm.disabled="true";
}

function resetCommentForm()
{
  var inF = document.getElementById("comments_form");
  if(inF)
  {
    var name = checkCookie("comment-author");
    if(name)
    {
      inF.author.value = name;
    }
    else
    {
      inF.author.value = "";
    }
    var email = checkCookie("comment-email");
    if(email)
    {
      inF.email.value = email;
    }
    else
    {
      inF.email.value = "";
    }
    inF.text.value = "";
  }
}

function rememberMe(inF)
{
  if(inF.author.value != "")
  {
    setCookie("comment-author", 100, inF.author.value)
  }
  if(inF.email.value != "")
  {
    setCookie("comment-email", 100, inF.email.value)
  }
}

function forgetMe(inF)
{
  killCookie("comment-author");
  killCookie("comment-email");
}

function checkRequiredFields(inF)
{
  if(inF.author.value == "")
  {
    alert("Please enter your name.");
    document.comment_form.author.focus();
    return false;
  }
  if(inF.email.value == "")
  {
    alert("Please enter your email address.");
    document.comment_form.email.focus();
    return false;
  }
  if(! echeck(inF.email.value))
  {
    document.comment_form.email.focus();
    return false;
  }
  if(inF.text.value == "")
  {
    alert("Your comment is empty.");
    document.comment_form.text.focus();
    return false;
  }
  return true;
}
/**
 * Fix smartquotes and other stuff MS Word puts in forms
 */
function replaceMS(item)
{
	var entry = item.value;
	entry = entry.replace(/\u2010/ig, '-');  //hyphen
	entry = entry.replace(/\u2011/ig, '-');  //non-breaking hyphen
	entry = entry.replace(/\u2012/ig, '-');  //figure dash
	entry = entry.replace(/\u2013/ig, '--');  //en dash
	entry = entry.replace(/\u2014/ig, '--');  //em dash
	entry = entry.replace(/\u2015/ig, '--');  //horizontal bar
	entry = entry.replace(/\u2016/ig, '||');  //double vertical bar
	entry = entry.replace(/\u2017/ig, '_');  //double low line
	entry = entry.replace(/\u2018/ig, "'");  //left quote
	entry = entry.replace(/\u2019/ig, "'");  //right quote
	entry = entry.replace(/\u201A/ig, "'");  //single low quote
	entry = entry.replace(/\u201B/ig, "'");  //single high quote
	entry = entry.replace(/\u201C/ig, '"');  //left double quote
	entry = entry.replace(/\u201D/ig, '"');  //right double quote
	entry = entry.replace(/\u201E/ig, '"');  //double low quote
	entry = entry.replace(/\u201F/ig, '"');  //reverse double high quote
	entry = entry.replace(/\u2020/ig, '+');  //dagger
	entry = entry.replace(/\u2021/ig, '+');  //double dagger
	entry = entry.replace(/\u2022/ig, '*');  //bullet
	entry = entry.replace(/\u2023/ig, '*');  //triangle bullet
	entry = entry.replace(/\u2024/ig, '.');  //one dot leader
	entry = entry.replace(/\u2025/ig, '..');  //two dot leader
	entry = entry.replace(/\u2026/ig, '...');  //elipsis
	entry = entry.replace(/\u2027/ig, '.');  //hyphen point
	entry = entry.replace(/\u2028/ig, ' ');  //line separator
	entry = entry.replace(/\u2029/ig, ' ');  //para seperator

	entry = entry.replace(/\u2032/ig, "'");  //prime
	entry = entry.replace(/\u2033/ig, '"');  //double prime
	entry = entry.replace(/\u2034/ig, '"');  //triple prime
	entry = entry.replace(/\u2035/ig, "'");  //reversed prime
	entry = entry.replace(/\u2036/ig, '"');  //reversed double prime
	entry = entry.replace(/\u2037/ig, '"');  //reversed triple prime
	entry = entry.replace(/\u2038/ig, '^');  //caret
	entry = entry.replace(/\u2039/ig, '<');  //left bracket
	entry = entry.replace(/\u203A/ig, '>');  //right bracket

	entry = entry.replace(/\u00A9/ig, '(c)');  //copyright
	entry = entry.replace(/\u2122/ig, '(tm)');  //trade mark
	entry = entry.replace(/\u00BC/ig, '1/4');  //quarter
	entry = entry.replace(/\u00BD/ig, '1/2');  //half


	item.value = entry;


}
