
function wptexturize(text) {
  text = ' '+text+' ';
  var next    = true;
  var output  = '';
  var prev    = 0;
  var length  = text.length;
  while ( prev < length ) {
     var index = text.indexOf('<', prev);
     if ( index > -1 ) {
        if ( index == prev ) {
           index = text.indexOf('>', prev);
        }
        index++;
     } else {
        index = length;
     }
     var s = text.substring(prev, index);
     prev = index;
     if ( s.substr(0,1) != '<' && next == true ) {
        s = s.replace(/---/g, '&#8212;');
        s = s.replace(/--/g, '&#8211;');
        s = s.replace(/\.{3}/g, '&#8230;');
        s = s.replace(/``/g, '&#8220;');
        s = s.replace(/'s/g, '&#8217;s');
        s = s.replace(/'(\d\d(?:&#8217;|')?s)/g, '&#8217;$1');
        s = s.replace(/([\s"])'/g, '$1&#8216;');
        s = s.replace(/(\d+)"/g, '$1&Prime;');
        s = s.replace(/(\d+)'/g, '$1&prime;');
        s = s.replace(/([^\s])'([^'\s])/g, '$1&#8217;$2');
        s = s.replace(/(\s)"([^\s])/g, '$1&#8220;$2');
        s = s.replace(/"(\s)/g, '&#8221;$1');
        s = s.replace(/'(\s|.)/g, '&#8217;$1');
        s = s.replace(/\(tm\)/ig, '&#8482;');
        s = s.replace(/\(c\)/ig, '&#169;');
        s = s.replace(/\(r\)/ig, '&#174;');
        s = s.replace(/''/g, '&#8221;');
        s = s.replace(/(\d+)x(\d+)/g, '$1&#215;$2');
     } else if ( s.substr(0,5) == '<code' ) {
        next = false;
     } else {
        next = true;
     }
     output += s;
  }
  return output.substr(1, output.length-2);
}

function wpautop(p) {
  p = p + '\n\n';
  p = p.replace(/(<blockquote[^>]*>)/g, '\n$1');
  p = p.replace(/(<\/blockquote[^>]*>)/g, '$1\n');
  p = p.replace(/\r\n/g, '\n');
  p = p.replace(/\r/g, '\n');
  p = p.replace(/\n\n+/g, '\n\n');
  p = p.replace(/\n?(.+?)(?:\n\s*\n)/g, '<p>$1</p>');
  p = p.replace(/<p>\s*?<\/p>/g, '');
  p = p.replace(/<p>\s*(<\/?blockquote[^>]*>)\s*<\/p>/g, '$1');
  p = p.replace(/<p><blockquote([^>]*)>/ig, '<blockquote$1><p>');
  p = p.replace(/<\/blockquote><\/p>/ig, '<p></blockquote>');
  p = p.replace(/<p>\s*<blockquote([^>]*)>/ig, '<blockquote$1>');
  p = p.replace(/<\/blockquote>\s*<\/p>/ig, '</blockquote>');
  p = p.replace(/\s*\n\s*/g, '<br />');
  return p;
}

function updateLivePreview() {

  var cmntArea = document.getElementById('comment');
  var pnmeArea = document.getElementById('author');
  var purlArea = document.getElementById('url');

  if( cmntArea )
     var cmnt = wpautop(wptexturize(cmntArea.value));

  if( pnmeArea )
     var pnme = pnmeArea.value;

  if( purlArea )
     var purl = purlArea.value;

  if(purl && pnme) {
     var name = '<a href="' + purl + '">' + pnme + '</a> says';
  } else if(!purl && pnme) {
     var name = pnme + ' says';
  } else if(purl && !pnme) {
     var name = '<a href="' + purl + '">You</a> say';
  } else {
     var name = "You say";
  }

        document.getElementById('commentPreview').innerHTML = '<p><strong>Preview:</strong></p><p><em>' + name + ':</em></p><p>' + cmnt + '</p>';
}

function initLivePreview() {
  if(!document.getElementById)
     return false;

  var cmntArea = document.getElementById('comment');
  var pnmeArea = document.getElementById('author');
  var purlArea = document.getElementById('url');

  if ( cmntArea )
     cmntArea.onkeyup = updateLivePreview;

  if ( pnmeArea )
     pnmeArea.onkeyup = updateLivePreview;

  if ( purlArea )
     purlArea.onkeyup = updateLivePreview;
}

//========================================================
// Event Listener by Scott Andrew - http://scottandrew.com
// edited by Mark Wubben, <useCapture> is now set to false
//========================================================
function addEvent(obj, evType, fn){
  if(obj.addEventListener){
     obj.addEventListener(evType, fn, false);
     return true;
  } else if (obj.attachEvent){
     var r = obj.attachEvent('on'+evType, fn);
     return r;
  } else {
     return false;
  }
}

addEvent(window, "load", initLivePreview);

