
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);

