
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 = convertSmilies(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> writes';
	} else if(!purl && pnme) {
		var name = pnme + ' writes';
	} else if(purl && !pnme) {
		var name = '<a href="' + purl + '">You</a> write';
	} else {
		var name = "You write";
	}
	
    	document.getElementById('commentPreview').innerHTML = '<br /><br /><p><strong>Your live preview:</strong></p><p><em>' + name + ':</em></p><small><p>' + cmnt + '</p></small>';
}

/*
JS function to convert text smilies
(c) 2007-09-14 by Philippe Stellwag <philippe(_AT_)stellwag(_DOT_)eu>

Bugs:
	- first and last smiley on line will _not_ be converted
	- every smilie must have a blank before and after it

See /wp-includes/functions.php in function smilies_init():
[CUT]
		':mrgreen:' => 'icon_mrgreen.gif',
		':neutral:' => 'icon_neutral.gif',
		':twisted:' => 'icon_twisted.gif',
		  ':arrow:' => 'icon_arrow.gif',
		  ':shock:' => 'icon_eek.gif',
		  ':smile:' => 'icon_smile.gif',
		    ':???:' => 'icon_confused.gif',
		   ':cool:' => 'icon_cool.gif',
		   ':evil:' => 'icon_evil.gif',
		   ':grin:' => 'icon_biggrin.gif',
		   ':idea:' => 'icon_idea.gif',
		   ':oops:' => 'icon_redface.gif',
		   ':razz:' => 'icon_razz.gif',
                   ':good:' => 'icon_good.gif',             !!!MY OWN SMILEY!!!
		   ':roll:' => 'icon_rolleyes.gif',
		   ':wink:' => 'icon_wink.gif',
		    ':cry:' => 'icon_cry.gif',
		    ':eek:' => 'icon_surprised.gif',
		    ':lol:' => 'icon_lol.gif',
		    ':mad:' => 'icon_mad.gif',
		    ':sad:' => 'icon_sad.gif',
		      '8-)' => 'icon_cool.gif',
		      '8-O' => 'icon_eek.gif',
		      ':-(' => 'icon_sad.gif',
		      ':-)' => 'icon_smile.gif',
		      ':-?' => 'icon_confused.gif',
		      ':-D' => 'icon_biggrin.gif',
		      ':-P' => 'icon_razz.gif',
		      ':-o' => 'icon_surprised.gif',
		      ':-x' => 'icon_mad.gif',
		      ':-|' => 'icon_neutral.gif',
		      ';-)' => 'icon_wink.gif',
		       '8)' => 'icon_cool.gif',
		       '8O' => 'icon_eek.gif',
		       ':(' => 'icon_sad.gif',
		       ':)' => 'icon_smile.gif',
		       ':?' => 'icon_confused.gif',
		       ':D' => 'icon_biggrin.gif',
		       ':P' => 'icon_razz.gif',
		       ':o' => 'icon_surprised.gif',
		       ':x' => 'icon_mad.gif',
		       ':|' => 'icon_neutral.gif',
		       ';)' => 'icon_wink.gif',
		      ':!:' => 'icon_exclaim.gif',
		      ':?:' => 'icon_question.gif'
[/CUT]
*/
function convertSmilies(t) {
	/* for blanks before and after the smiley */
	t = t.replace(/ :mrgreen: /g, " <img src='/wp-includes/images/smilies/icon_mrgreen.gif' /> ");
	t = t.replace(/ :wink: /g, " <img src='/wp-includes/images/smilies/icon_wink.gif' /> ");
	t = t.replace(/ :neutral: /g, " <img src='/wp-includes/images/smilies/icon_neutral.gif' /> ");
	t = t.replace(/ :twisted: /g, " <img src='/wp-includes/images/smilies/icon_twisted.gif' /> ");
	t = t.replace(/ :arrow: /g, " <img src='/wp-includes/images/smilies/icon_arrow.gif' /> ");
	t = t.replace(/ :shock: /g, " <img src='/wp-includes/images/smilies/icon_eek.gif' /> ");
	t = t.replace(/ :smile: /g, " <img src='/wp-includes/images/smilies/icon_smile.gif' /> ");
	t = t.replace(/ :\?\?\?: /g, " <img src='/wp-includes/images/smilies/icon_confused.gif' /> ");
	t = t.replace(/ :cool: /g, " <img src='/wp-includes/images/smilies/icon_cool.gif' /> ");
	t = t.replace(/ :evil: /g, " <img src='/wp-includes/images/smilies/icon_evil.gif' /> ");
	t = t.replace(/ :grin: /g, " <img src='/wp-includes/images/smilies/icon_biggrin.gif' /> ");
	t = t.replace(/ :idea: /g, " <img src='/wp-includes/images/smilies/icon_idea.gif' /> ");
	t = t.replace(/ :oops: /g, " <img src='/wp-includes/images/smilies/icon_redface.gif' /> ");
	t = t.replace(/ :razz: /g, " <img src='/wp-includes/images/smilies/icon_razz.gif' /> ");
	t = t.replace(/ :good: /g, " <img src='/wp-includes/images/smilies/icon_good.gif' /> ");         /* !!!MY OWN SMILEY!!! */
	t = t.replace(/ :roll: /g, " <img src='/wp-includes/images/smilies/icon_rolleyes.gif' /> ");
	t = t.replace(/ :wink: /g, " <img src='/wp-includes/images/smilies/icon_wink.gif' /> ");
	t = t.replace(/ :cry: /g, " <img src='/wp-includes/images/smilies/icon_cry.gif' /> ");
	t = t.replace(/ :eek: /g, " <img src='/wp-includes/images/smilies/icon_surprised.gif' /> ");
	t = t.replace(/ :lol: /g, " <img src='/wp-includes/images/smilies/icon_lol.gif' /> ");
	t = t.replace(/ :mad: /g, " <img src='/wp-includes/images/smilies/icon_mad.gif' /> ");
	t = t.replace(/ :sad: /g, " <img src='/wp-includes/images/smilies/icon_sad.gif' /> ");
	t = t.replace(/ 8-\) /g, " <img src='/wp-includes/images/smilies/icon_cool.gif' /> ");
	t = t.replace(/ 8-O /g, " <img src='/wp-includes/images/smilies/icon_eek.gif' /> ");
	t = t.replace(/ :-\( /g, " <img src='/wp-includes/images/smilies/icon_sad.gif' /> ");
	t = t.replace(/ :-\) /g, " <img src='/wp-includes/images/smilies/icon_smile.gif' /> ");
	t = t.replace(/ :-\? /g, " <img src='/wp-includes/images/smilies/icon_confused.gif' /> ");
	t = t.replace(/ :-D /g, " <img src='/wp-includes/images/smilies/icon_biggrin.gif' /> ");
	t = t.replace(/ :-P /g, " <img src='/wp-includes/images/smilies/icon_razz.gif' /> ");
	t = t.replace(/ :-o /g, " <img src='/wp-includes/images/smilies/icon_surprised.gif' /> ");
	t = t.replace(/ :-x /g, " <img src='/wp-includes/images/smilies/icon_mad.gif' /> ");
	t = t.replace(/ :-\| /g, " <img src='/wp-includes/images/smilies/icon_neutral.gif' /> ");
	t = t.replace(/ ;-\) /g, " <img src='/wp-includes/images/smilies/icon_wink.gif' /> ");
	t = t.replace(/ 8\) /g, " <img src='/wp-includes/images/smilies/icon_cool.gif' /> ");
	t = t.replace(/ 8O /g, " <img src='/wp-includes/images/smilies/icon_eek.gif' /> ");
	t = t.replace(/ :\( /g, " <img src='/wp-includes/images/smilies/icon_sad.gif' /> ");
	t = t.replace(/ :\) /g, " <img src='/wp-includes/images/smilies/icon_smile.gif' /> ");
	t = t.replace(/ :\? /g, " <img src='/wp-includes/images/smilies/icon_confused.gif' /> ");
	t = t.replace(/ :D /g, " <img src='/wp-includes/images/smilies/icon_biggrin.gif' /> ");
	t = t.replace(/ :P /g, " <img src='/wp-includes/images/smilies/icon_razz.gif' /> ");
	t = t.replace(/ :o /g, " <img src='/wp-includes/images/smilies/icon_surprised.gif' /> ");
	t = t.replace(/ :x /g, " <img src='/wp-includes/images/smilies/icon_mad.gif' /> ");
	t = t.replace(/ :\| /g, " <img src='/wp-includes/images/smilies/icon_neutral.gif' /> ");
	t = t.replace(/ ;\) /g, " <img src='/wp-includes/images/smilies/icon_wink.gif' /> ");
	t = t.replace(/ :\!: /g, " <img src='/wp-includes/images/smilies/icon_exclaim.gif' /> ");
	t = t.replace(/ :\?: /g, " <img src='/wp-includes/images/smilies/icon_question.gif' /> ");

	return t;
}

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


