jQuery.fn.rte=function(a,b){if(!b||b.constructor!=Array){b=new Array()}$(this).each(function(c){var d=(this.id)?this.id:b.length;b[d]=new lwRTE(this,a||{})});return b};var lwRTE_resizer=function(a){this.drag=false;this.rte_zone=$(a).parents(".rte-zone")};lwRTE_resizer.mousedown=function(b,a){b.drag=true;b.event=(typeof(a)=="undefined")?window.event:a;b.rte_obj=$(".rte-resizer",b.rte_zone).prev().eq(0);$("body",document).css("cursor","se-resize");return false};lwRTE_resizer.mouseup=function(b,a){b.drag=false;$("body",document).css("cursor","auto");return false};lwRTE_resizer.mousemove=function(d,c){if(d.drag){c=(typeof(c)=="undefined")?window.event:c;var a=Math.max(1,d.rte_zone.width()+c.screenX-d.event.screenX);var b=Math.max(1,d.rte_obj.height()+c.screenY-d.event.screenY);d.rte_zone.width(a);d.rte_obj.height(b);d.event=c}return false};var lwRTE=function(a,b){this.css=[];this.css_class=b.frame_class||"";this.base_url=b.base_url||"";this.width=b.width||$(a).width()||"100%";this.height=b.height||$(a).height()||350;this.iframe=null;this.iframe_doc=null;this.textarea=null;this.event=null;this.range=null;this.toolbars={rte:"",html:""};this.controls={rte:{disable:{hint:"Source editor"}},html:{enable:{hint:"Visual editor"}}};$.extend(this.controls.rte,b.controls_rte||{});$.extend(this.controls.html,b.controls_html||{});$.extend(this.css,b.css||{});if(document.designMode||document.contentEditable){$(a).wrap($("<div></div>").addClass("rte-zone").width(this.width));$('<div class="rte-resizer"><a href="#"></a></div>').insertAfter(a);var c=new lwRTE_resizer(a);$(".rte-resizer a",$(a).parents(".rte-zone")).mousedown(function(d){$(document).mousemove(function(f){return lwRTE_resizer.mousemove(c,f)});$(document).mouseup(function(f){return lwRTE_resizer.mouseup(c,f)});return lwRTE_resizer.mousedown(c,d)});this.textarea=a;this.enable_design_mode()}};lwRTE.prototype.editor_cmd=function(c,a){this.iframe.contentWindow.focus();try{this.iframe_doc.execCommand(c,false,a)}catch(b){}this.iframe.contentWindow.focus()};lwRTE.prototype.get_toolbar=function(){var a=(this.iframe)?$(this.iframe):$(this.textarea);return(a.prev().hasClass("rte-toolbar"))?a.prev():null};lwRTE.prototype.activate_toolbar=function(c,a){var b=this.get_toolbar();if(b){b.remove()}$(c).before($(a).clone(true))};lwRTE.prototype.enable_design_mode=function(){var a=this;a.iframe=document.createElement("iframe");a.iframe.frameBorder=0;a.iframe.frameMargin=0;a.iframe.framePadding=0;a.iframe.width="100%";a.iframe.height=a.height||"100%";a.iframe.src="javascript:void(0);";if($(a.textarea).attr("class")){a.iframe.className=$(a.textarea).attr("class")}if($(a.textarea).attr("id")){a.iframe.id=$(a.textarea).attr("id")}if($(a.textarea).attr("name")){a.iframe.title=$(a.textarea).attr("name")}var f=$(a.textarea).val();$(a.textarea).hide().after(a.iframe).remove();a.textarea=null;var c="";for(var b in a.css){c+="<link type='text/css' rel='stylesheet' href='"+a.css[b]+"' />"}var g=(a.base_url)?"<base href='"+a.base_url+"' />":"";var d=(a.css_class)?"class='"+a.css_class+"'":"";var j="<html><head>"+g+c+"</head><body "+d+" style='padding:5px'>"+f+"</body></html>";a.iframe_doc=a.iframe.contentWindow.document;try{a.iframe_doc.designMode="on"}catch(h){$(a.iframe_doc).focus(function(){a.iframe_doc.designMode()})}a.iframe_doc.open();a.iframe_doc.write(j);a.iframe_doc.close();if(!a.toolbars.rte){a.toolbars.rte=a.create_toolbar(a.controls.rte)}a.activate_toolbar(a.iframe,a.toolbars.rte);$(a.iframe).parents("form").submit(function(){a.disable_design_mode(true)});$(a.iframe_doc).mouseup(function(e){if(a.iframe_doc.selection){a.range=a.iframe_doc.selection.createRange()}a.set_selected_controls((e.target)?e.target:e.srcElement,a.controls.rte)});$(a.iframe_doc).blur(function(e){if(a.iframe_doc.selection){a.range=a.iframe_doc.selection.createRange()}});$(a.iframe_doc).keyup(function(e){a.set_selected_controls(a.get_selected_element(),a.controls.rte)});if(!$.browser.msie){a.editor_cmd("styleWithCSS",false)}};lwRTE.prototype.disable_design_mode=function(b){var a=this;a.textarea=(b)?$('<input type="hidden" />').get(0):$("<textarea></textarea>").width("100%").height(a.height).get(0);if(a.iframe.className){a.textarea.className=a.iframe.className}if(a.iframe.id){a.textarea.id=a.iframe.id}if(a.iframe.title){a.textarea.name=a.iframe.title}$(a.textarea).val($("body",a.iframe_doc).html());$(a.iframe).before(a.textarea);if(!a.toolbars.html){a.toolbars.html=a.create_toolbar(a.controls.html)}if(b!=true){$(a.iframe_doc).remove();$(a.iframe).remove();a.iframe=a.iframe_doc=null;a.activate_toolbar(a.textarea,a.toolbars.html)}};lwRTE.prototype.toolbar_click=function(f,d){var b=d.exec;var a=d.args||[];var g=(f.tagName.toUpperCase()=="SELECT");$(".rte-panel",this.get_toolbar()).remove();if(b){if(g){a.push(f)}try{b.apply(this,a)}catch(c){}}else{if(this.iframe&&d.command){if(g){a=f.options[f.selectedIndex].value;if(a.length<=0){return}}this.editor_cmd(d.command,a)}}};lwRTE.prototype.create_toolbar=function(d){var c=this;var b=$("<div></div>").addClass("rte-toolbar").width("100%").append($("<ul></ul>")).append($("<div></div>").addClass("clear"));var h,a;for(var f in d){if(d[f].separator){a=$("<li></li>").addClass("separator")}else{if(d[f].init){try{d[f].init.apply(d[f],[this])}catch(g){}}if(d[f].select){h=$(d[f].select).change(function(i){c.event=i;c.toolbar_click(this,d[this.className]);return false})}else{h=$("<a href='#'></a>").attr("title",(d[f].hint)?d[f].hint:f).attr("rel",f).click(function(i){c.event=i;c.toolbar_click(this,d[this.rel]);return false})}a=$("<li></li>").append(h.addClass(f))}$("ul",b).append(a)}$(".enable",b).click(function(){c.enable_design_mode();return false});$(".disable",b).click(function(){c.disable_design_mode();return false});return b.get(0)};lwRTE.prototype.create_panel=function(h,c){var i=this;var e=i.get_toolbar();if(!e){return false}$(".rte-panel",e).remove();var f,b;var d=i.event.pageX;var g=i.event.pageY;var a=$("<div></div>").hide().addClass("rte-panel").css({left:d,top:g});$("<div></div>").addClass("rte-panel-title").html(h).append($("<a class='close' href='#'>X</a>").click(function(){a.remove();return false})).mousedown(function(){f=true;return false}).mouseup(function(){f=false;return false}).mousemove(function(j){if(f&&b){d-=b.pageX-j.pageX;g-=b.pageY-j.pageY;a.css({left:d,top:g})}b=j;return false}).appendTo(a);if(c){a.width(c)}e.append(a);return a};lwRTE.prototype.get_content=function(){return(this.iframe)?$("body",this.iframe_doc).html():$(this.textarea).val()};lwRTE.prototype.set_content=function(a){(this.iframe)?$("body",this.iframe_doc).html(a):$(this.textarea).val(a)};lwRTE.prototype.set_selected_controls=function(b,l){var h=this.get_toolbar();if(!h){return false}var k,a,d,f,m,c,j;try{for(k in l){f=l[k];d=$("."+k,h);d.removeClass("active");if(!f.tags){continue}a=b;do{if(a.nodeType!=1){continue}m=a.nodeName.toLowerCase();if($.inArray(m,f.tags)<0){continue}if(f.select){d=d.get(0);if(d.tagName.toUpperCase()=="SELECT"){d.selectedIndex=0;for(c=0;c<d.options.length;c++){j=d.options[c].value;if(j&&((f.tag_cmp&&f.tag_cmp(a,j))||m==j)){d.selectedIndex=c;break}}}}else{d.addClass("active")}}while(a=a.parentNode)}}catch(g){}return true};lwRTE.prototype.get_selected_element=function(){var c,b,a;var d=this.iframe.contentWindow;if(d.getSelection){try{b=d.getSelection();a=b.getRangeAt(0);c=a.commonAncestorContainer}catch(f){return false}}else{try{b=d.document.selection;a=b.createRange();c=a.parentElement()}catch(f){return false}}return c};lwRTE.prototype.get_selection_range=function(){var a=null;var c=this.iframe.contentWindow;this.iframe.focus();if(c.getSelection){a=c.getSelection().getRangeAt(0);if($.browser.opera){var b=a.startContainer;if(b.nodeType===Node.TEXT_NODE){a.setStartBefore(b.parentNode)}}}else{this.range.select();a=this.iframe_doc.selection.createRange()}return a};lwRTE.prototype.get_selected_text=function(){var a=this.iframe.contentWindow;if(a.getSelection){return a.getSelection().toString()}this.range.select();return a.document.selection.createRange().text};lwRTE.prototype.get_selected_html=function(){var b=null;var d=this.iframe.contentWindow;var a=this.get_selection_range();if(a){if(d.getSelection){var c=document.createElement("div");c.appendChild(a.cloneContents());b=c.innerHTML}else{b=a.htmlText}}return b};lwRTE.prototype.selection_replace_with=function(b){var a=this.get_selection_range();var c=this.iframe.contentWindow;if(!a){return}this.editor_cmd("removeFormat");if(c.getSelection){a.deleteContents();a.insertNode(a.createContextualFragment(b));this.editor_cmd("delete")}else{this.editor_cmd("delete");a.pasteHTML(b)}};
/*
 * Lightweight RTE - jQuery Plugin, v1.2
 * Basic Toolbars
 * Copyright (c) 2009 Andrey Gayvoronsky - http://www.gayvoronsky.com
 */
var rte_tag		= '-rte-tmp-tag-';

var	rte_toolbar = {
	s1				: {separator: true},
	bold			: {command: 'bold', tags:['b', 'strong']},
	italic			: {command: 'italic', tags:['i', 'em']},
	strikeThrough	: {command: 'strikethrough', tags: ['s', 'strike'] },
	underline		: {command: 'underline', tags: ['u']},
	s2				: {separator: true },
	justifyLeft   	: {command: 'justifyleft'},
	justifyCenter	: {command: 'justifycenter'},
	justifyRight	: {command: 'justifyright'},
	justifyFull		: {command: 'justifyfull'},
	s3				: {separator : true},
	indent			: {command: 'indent'},
	outdent			: {command: 'outdent'},
	s4				: {separator : true},
	orderedList		: {command: 'insertorderedlist', tags: ['ol'] },
	unorderedList	: {command: 'insertunorderedlist', tags: ['ul'] },
	s6				: {separator : true },
	image			: {exec: lwrte_image, tags: ['img'] },
	link			: {exec: lwrte_link, tags: ['a'] },
	unlink			: {command: 'unlink'},
	s8				: {separator : true },
	removeFormat	: {exec: lwrte_unformat},
	clear			: {exec: lwrte_clear}
};

var html_toolbar = {
	s1				: {separator: true},
	clear			: {exec: lwrte_clear}
};

/*** tag compare callbacks ***/
function lwrte_block_compare(node, tag) {
	tag = tag.replace(/<([^>]*)>/, '$1');
	return (tag.toLowerCase() == node.nodeName.toLowerCase());
}

/*** init callbacks ***/
function lwrte_style_init(rte) {
	var self = this;
	self.select = '<select><option value="">- no css -</option></select>';

	// load CSS info. javascript only issue is not working correctly, that's why ajax-php :(
	if(rte.css.length) {	
		$.ajax({
			url: "styles.php", 
			type: "POST",
			data: { css: rte.css[rte.css.length - 1] }, 
			async: false,
			success: function(data) {
				var list = data.split(',');
				var select = "";

				for(var name in list)
					select += '<option value="' + list[name] + '">' + list[name] + '</option>';
	
				self.select = '<select><option value="">- css -</option>' + select + '</select>';
			}});
	}
}

/*** exec callbacks ***/
function lwrte_style(args) {
	if(args) {
		try {
			var css = args.options[args.selectedIndex].value
			var self = this;
			var html = self.get_selected_text();
			html = '<span class="' + css + '">' + html + '</span>';
			self.selection_replace_with(html);
			args.selectedIndex = 0;
		} catch(e) {
		}
	}
}

function lwrte_color(){
	var self = this;
	var panel = self.create_panel('Set color for text', 385);
	var mouse_down = false;
	var mouse_over = false;
	panel.append('\
<div class="colorpicker1"><div class="rgb" id="rgb"></div></div>\
<div class="colorpicker1"><div class="gray" id="gray"></div></div>\
<div class="colorpicker2">\
	<div class="palette" id="palette"></div>\
	<div class="preview" id="preview"></div>\
	<div class="color" id="color"></div>\
</div>\
<div class="clear"></div>\
<p class="submit"><button id="ok">Ok</button><button id="cancel">Cancel</button></p>'
).show();

	var preview = $('#preview', panel);
	var color = $("#color", panel);
	var palette = $("#palette", panel);
	var colors = [
		'#660000', '#990000', '#cc0000', '#ff0000', '#333333',
		'#006600', '#009900', '#00cc00', '#00ff00', '#666666',
		'#000066', '#000099', '#0000cc', '#0000ff', '#999999',
		'#909000', '#900090', '#009090', '#ffffff', '#cccccc',
		'#ffff00', '#ff00ff', '#00ffff', '#000000', '#eeeeee'
	];
			
	for(var i = 0; i < colors.length; i++)
		$("<div></div>").addClass("item").css('background', colors[i]).appendTo(palette);
			
	var height = $('#rgb').height();
	var part_width = $('#rgb').width() / 6;

	$('#rgb,#gray,#palette', panel)
		.mousedown( function(e) {mouse_down = true; return false; } )
		.mouseup( function(e) {mouse_down = false; return false; } )
		.mouseout( function(e) {mouse_over = false; return false; } )
		.mouseover( function(e) {mouse_over = true; return false; } );

	$('#rgb').mousemove( function(e) { if(mouse_down && mouse_over) compute_color(this, true, false, false, e); return false;} );
	$('#gray').mousemove( function(e) { if(mouse_down && mouse_over) compute_color(this, false, true, false, e); return false;} );
	$('#palette').mousemove( function(e) { if(mouse_down && mouse_over) compute_color(this, false, false, true, e); return false;} );
	$('#rgb').click( function(e) { compute_color(this, true, false, false, e); return false;} );
	$('#gray').click( function(e) { compute_color(this, false, true, false, e); return false;} );
	$('#palette').click( function(e) { compute_color(this, false, false, true, e); return false;} );

	$('#cancel', panel).click( function() { panel.remove(); return false; } );
	$('#ok', panel).click( 
		function() {
			var value = color.html();

			if(value.length > 0 && value.charAt(0) =='#') {
				if(self.iframe_doc.selection) //IE fix for lost focus
					self.range.select();

				self.editor_cmd('foreColor', value);
			}
					
			panel.remove(); 
			return false;
		}
	);

	function to_hex(n) {
		var s = "0123456789abcdef";
		return s.charAt(Math.floor(n / 16)) + s.charAt(n % 16);
	}			

	function get_abs_pos(element) {
		var r = { x: element.offsetLeft, y: element.offsetTop };

		if (element.offsetParent) {
			var tmp = get_abs_pos(element.offsetParent);
			r.x += tmp.x;
			r.y += tmp.y;
		}

		return r;
	};
			
	function get_xy(obj, event) {
		var x, y;
		event = event || window.event;
		var el = event.target || event.srcElement;

		// use absolute coordinates
		var pos = get_abs_pos(obj);

		// subtract distance to middle
		x = event.pageX  - pos.x;
		y = event.pageY - pos.y;

		return { x: x, y: y };
	}
			
	function compute_color(obj, is_rgb, is_gray, is_palette, e) {
		var r, g, b, c;

		var mouse = get_xy(obj, e);
		var x = mouse.x;
		var y = mouse.y;

		if(is_rgb) {
			r = (x >= 0)*(x < part_width)*255 + (x >= part_width)*(x < 2*part_width)*(2*255 - x * 255 / part_width) + (x >= 4*part_width)*(x < 5*part_width)*(-4*255 + x * 255 / part_width) + (x >= 5*part_width)*(x < 6*part_width)*255;
			g = (x >= 0)*(x < part_width)*(x * 255 / part_width) + (x >= part_width)*(x < 3*part_width)*255	+ (x >= 3*part_width)*(x < 4*part_width)*(4*255 - x * 255 / part_width);
			b = (x >= 2*part_width)*(x < 3*part_width)*(-2*255 + x * 255 / part_width) + (x >= 3*part_width)*(x < 5*part_width)*255 + (x >= 5*part_width)*(x < 6*part_width)*(6*255 - x * 255 / part_width);

			var k = (height - y) / height;

			r = 128 + (r - 128) * k;
			g = 128 + (g - 128) * k;
			b = 128 + (b - 128) * k;
		} else if (is_gray) {
			r = g = b = (height - y) * 1.7;
		} else if(is_palette) {
			x = Math.floor(x / 10);
			y = Math.floor(y / 10);
			c = colors[x + y * 5];
		}

		if(!is_palette)
			c = '#' + to_hex(r) + to_hex(g) + to_hex(b);

		preview.css('background', c);
		color.html(c);
	}
}

function lwrte_image() {
	var self = this;
	var panel = self.create_panel('Insert image', 385);
	panel.append('\
<p><label>URL</label><input type="text" id="url" size="30" value=""><button id="file">Upload</button><button id="view">View</button></p>\
<div class="clear"></div>\
<p class="submit"><button id="ok">Ok</button><button id="cancel">Cancel</button></p>'
).show();

	var url = $('#url', panel);
	var upload = $('#file', panel).upload( {
		autoSubmit: false,
		action: lwteroot,
		onSelect: function() {
			var file = this.filename();
			var ext = (/[.]/.exec(file)) ? /[^.]+$/.exec(file.toLowerCase()) : '';
			if(!(ext && /^(jpg|png|jpeg|gif)$/.test(ext))){
				alert('Invalid file extension');
				return;
			}

			this.submit();
		},
		onComplete: function(response) { 
			if(response.length <= 0)
				return;

			response	= eval("(" + response + ")");
			if(response.error && response.error.length > 0)
				alert(response.error);
			else
				url.val((response.file && response.file.length > 0) ? response.file : '');
		}
	});

	$('#view', panel).click( function() {
			(url.val().length >0 ) ? window.open(url.val()) : alert("Enter URL of image to view");
			return false;
		}
	);
			
	$('#cancel', panel).click( function() { panel.remove(); return false;} );
	$('#ok', panel).click( 
		function() {
			var file = url.val();
			file = webroot+ file.substr(6);
			self.editor_cmd('insertImage', file);
			panel.remove(); 
			return false;
		}
	)
}

function lwrte_unformat() {
	this.editor_cmd('removeFormat');
	this.editor_cmd('unlink');
}

function lwrte_clear() {
	if(confirm('Clear Document?')) 
		this.set_content('');
}

function lwrte_cleanup_word() {
	this.set_content(cleanup_word(this.get_content(), true, true, true)); 
	
	function cleanup_word(s, bIgnoreFont, bRemoveStyles, bCleanWordKeepsStructure) {
		s = s.replace(/<o:p>\s*<\/o:p>/g, '') ;
		s = s.replace(/<o:p>[\s\S]*?<\/o:p>/g, '&nbsp;') ;

		// Remove mso-xxx styles.
		s = s.replace( /\s*mso-[^:]+:[^;"]+;?/gi, '' ) ;

		// Remove margin styles.
		s = s.replace( /\s*MARGIN: 0cm 0cm 0pt\s*;/gi, '' ) ;
		s = s.replace( /\s*MARGIN: 0cm 0cm 0pt\s*"/gi, "\"" ) ;

		s = s.replace( /\s*TEXT-INDENT: 0cm\s*;/gi, '' ) ;
		s = s.replace( /\s*TEXT-INDENT: 0cm\s*"/gi, "\"" ) ;

		s = s.replace( /\s*TEXT-ALIGN: [^\s;]+;?"/gi, "\"" ) ;

		s = s.replace( /\s*PAGE-BREAK-BEFORE: [^\s;]+;?"/gi, "\"" ) ;

		s = s.replace( /\s*FONT-VARIANT: [^\s;]+;?"/gi, "\"" ) ;

		s = s.replace( /\s*tab-stops:[^;"]*;?/gi, '' ) ;
		s = s.replace( /\s*tab-stops:[^"]*/gi, '' ) ;

		// Remove FONT face attributes.
		if (bIgnoreFont) {
			s = s.replace( /\s*face="[^"]*"/gi, '' ) ;
			s = s.replace( /\s*face=[^ >]*/gi, '' ) ;

			s = s.replace( /\s*FONT-FAMILY:[^;"]*;?/gi, '' ) ;
		}

		// Remove Class attributes
		s = s.replace(/<(\w[^>]*) class=([^ |>]*)([^>]*)/gi, "<$1$3") ;

		// Remove styles.
		if (bRemoveStyles)
			s = s.replace( /<(\w[^>]*) style="([^\"]*)"([^>]*)/gi, "<$1$3" ) ;

		// Remove style, meta and link tags
		s = s.replace( /<STYLE[^>]*>[\s\S]*?<\/STYLE[^>]*>/gi, '' ) ;
		s = s.replace( /<(?:META|LINK)[^>]*>\s*/gi, '' ) ;

		// Remove empty styles.
		s =  s.replace( /\s*style="\s*"/gi, '' ) ;

		s = s.replace( /<SPAN\s*[^>]*>\s*&nbsp;\s*<\/SPAN>/gi, '&nbsp;' ) ;

		s = s.replace( /<SPAN\s*[^>]*><\/SPAN>/gi, '' ) ;

		// Remove Lang attributes
		s = s.replace(/<(\w[^>]*) lang=([^ |>]*)([^>]*)/gi, "<$1$3") ;

		s = s.replace( /<SPAN\s*>([\s\S]*?)<\/SPAN>/gi, '$1' ) ;

		s = s.replace( /<FONT\s*>([\s\S]*?)<\/FONT>/gi, '$1' ) ;

		// Remove XML elements and declarations
		s = s.replace(/<\\?\?xml[^>]*>/gi, '' ) ;

		// Remove w: tags with contents.
		s = s.replace( /<w:[^>]*>[\s\S]*?<\/w:[^>]*>/gi, '' ) ;

		// Remove Tags with XML namespace declarations: <o:p><\/o:p>
		s = s.replace(/<\/?\w+:[^>]*>/gi, '' ) ;

		// Remove comments [SF BUG-1481861].
		s = s.replace(/<\!--[\s\S]*?-->/g, '' ) ;

		s = s.replace( /<(U|I|STRIKE)>&nbsp;<\/\1>/g, '&nbsp;' ) ;

		s = s.replace( /<H\d>\s*<\/H\d>/gi, '' ) ;

		// Remove "display:none" tags.
		s = s.replace( /<(\w+)[^>]*\sstyle="[^"]*DISPLAY\s?:\s?none[\s\S]*?<\/\1>/ig, '' ) ;

		// Remove language tags
		s = s.replace( /<(\w[^>]*) language=([^ |>]*)([^>]*)/gi, "<$1$3") ;

		// Remove onmouseover and onmouseout events (from MS Word comments effect)
		s = s.replace( /<(\w[^>]*) onmouseover="([^\"]*)"([^>]*)/gi, "<$1$3") ;
		s = s.replace( /<(\w[^>]*) onmouseout="([^\"]*)"([^>]*)/gi, "<$1$3") ;

		if (bCleanWordKeepsStructure) {
			// The original <Hn> tag send from Word is something like this: <Hn style="margin-top:0px;margin-bottom:0px">
			s = s.replace( /<H(\d)([^>]*)>/gi, '<h$1>' ) ;

			// Word likes to insert extra <font> tags, when using MSIE. (Wierd).
			s = s.replace( /<(H\d)><FONT[^>]*>([\s\S]*?)<\/FONT><\/\1>/gi, '<$1>$2<\/$1>' );
			s = s.replace( /<(H\d)><EM>([\s\S]*?)<\/EM><\/\1>/gi, '<$1>$2<\/$1>' );
		} else {
			s = s.replace( /<H1([^>]*)>/gi, '<div$1><b><font size="6">' ) ;
			s = s.replace( /<H2([^>]*)>/gi, '<div$1><b><font size="5">' ) ;
			s = s.replace( /<H3([^>]*)>/gi, '<div$1><b><font size="4">' ) ;
			s = s.replace( /<H4([^>]*)>/gi, '<div$1><b><font size="3">' ) ;
			s = s.replace( /<H5([^>]*)>/gi, '<div$1><b><font size="2">' ) ;
			s = s.replace( /<H6([^>]*)>/gi, '<div$1><b><font size="1">' ) ;

			s = s.replace( /<\/H\d>/gi, '<\/font><\/b><\/div>' ) ;

			// Transform <P> to <DIV>
			var re = new RegExp( '(<P)([^>]*>[\\s\\S]*?)(<\/P>)', 'gi' ) ;	// Different because of a IE 5.0 error
			s = s.replace( re, '<div$2<\/div>' ) ;

			// Remove empty tags (three times, just to be sure).
			// This also removes any empty anchor
			s = s.replace( /<([^\s>]+)(\s[^>]*)?>\s*<\/\1>/g, '' ) ;
			s = s.replace( /<([^\s>]+)(\s[^>]*)?>\s*<\/\1>/g, '' ) ;
			s = s.replace( /<([^\s>]+)(\s[^>]*)?>\s*<\/\1>/g, '' ) ;
		}

		return s;
	}
}

function lwrte_link() {
	var self = this;
	var panel = self.create_panel("Create link / Attach file", 385);

	panel.append('\
<p><label>URL</label><input type="text" id="url" size="30" value=""><button id="file">Attach File</button><button id="view">View</button></p>\
<div class="clear"></div>\
<p><label>Title</label><input type="text" id="title" size="30" value=""><label>Target</label><select id="target"><option value="">default</option><option value="_blank">new</option></select></p>\
<div class="clear"></div>\
<p class="submit"><button id="ok">Ok</button><button id="cancel">Cancel</button></p>'
).show();

	$('#cancel', panel).click( function() { panel.remove(); return false; } );

	var url = $('#url', panel);
	var upload = $('#file', panel).upload( {
		autoSubmit: true,
		action:  lwteroot,
		onComplete: function(response) { 
			if(response.length <= 0)
				return;

			response	= eval("(" + response + ")");

			if(response.error && response.error.length > 0)
				alert(response.error);
			else
				url.val((response.file && response.file.length > 0) ? response.file : '');
		}
	});

	$('#view', panel).click( function() {
		(url.val().length >0 ) ? window.open(url.val()) : alert("Enter URL to view");
		return false;
	}
	);

	$('#ok', panel).click( 
		function() {
			var url = $('#url', panel).val();
			var target = $('#target', panel).val();
			var title = $('#title', panel).val();

			if(self.get_selected_text().length <= 0) {
				alert('Select the text you wish to link!');
				return false;
			}

			panel.remove(); 

			if(url.length <= 0)
				return false;

			self.editor_cmd('unlink');

			// we wanna well-formed linkage (<p>,<h1> and other block types can't be inside of link due to WC3)
			self.editor_cmd('createLink', rte_tag);
			var tmp = $('<span></span>').append(self.get_selected_html());

			if(target.length > 0)
				$('a[href*="' + rte_tag + '"]', tmp).attr('target', target);

			if(title.length > 0)
				$('a[href*="' + rte_tag + '"]', tmp).attr('title', title);

			$('a[href*="' + rte_tag + '"]', tmp).attr('href', url);
				
			self.selection_replace_with(tmp.html());
			return false;
		}
	)
}
(function(a){a.fn.upload=function(b){b=a.extend({name:"file",enctype:"multipart/form-data",action:"",autoSubmit:true,onSubmit:function(){},onComplete:function(){},onSelect:function(){},params:{}},b);return new a.ocupload(this,b)},a.ocupload=function(e,d){var c=this;var h=new Date().getTime().toString().substr(8);var f=a('<iframe id="iframe'+h+'" name="iframe'+h+'"src="#"></iframe>').css({display:"none"});var g=a('<form method="post" enctype="'+d.enctype+'" action="'+d.action+'" target="iframe'+h+'"></form>').css({margin:0,padding:0});var b=a('<input name="'+d.name+'" type="file" />').css({width:"auto",position:"absolute",right:0,top:0,opacity:0,zoom:1,filter:"alpha(opacity=0)",border:0,"font-size":"10em"});e.wrap("<div></div>");e.wrap(g);e.wrap("<span></span>");e.parent().css({"float":"left","white-space":"nowrap",position:"relative","z-index":1,left:0,top:0,overflow:"hidden",display:"inline",border:0});e.after(b);e.parent().parent().after(f);g=b.parent().parent();b.change(function(){c.onSelect();if(c.autoSubmit){c.submit()}});a.extend(this,{autoSubmit:d.autoSubmit,onSubmit:d.onSubmit,onComplete:d.onComplete,onSelect:d.onSelect,filename:function(){return b.attr("value")},params:function(i){var i=i?i:false;if(i){d.params=a.extend(d.params,i)}else{return d.params}},name:function(i){var i=i?i:false;if(i){b.attr("name",value)}else{return b.attr("name")}},action:function(i){var i=i?i:false;if(i){g.attr("action",i)}else{return g.attr("action")}},enctype:function(i){var i=i?i:false;if(i){g.attr("enctype",i)}else{return g.attr("enctype")}},set:function(k,j){var j=j?j:false;function i(m,l){switch(m){default:throw new Error("[jQuery.ocupload.set] '"+m+"' is an invalid option.");break;case"name":c.name(l);break;case"action":c.action(l);break;case"enctype":c.enctype(l);break;case"params":c.params(l);break;case"autoSubmit":c.autoSubmit=l;break;case"onSubmit":c.onSubmit=l;break;case"onComplete":c.onComplete=l;break;case"onSelect":c.onSelect=l;break}}if(j){i(k,j)}else{a.each(k,function(l,m){i(l,m)})}},submit:function(){this.onSubmit();a.each(d.params,function(i,j){g.append(a('<input type="hidden" name="'+i+'" value="'+j+'" />'))});g.get(0).submit();f.unbind().load(function(){var j=document.getElementById(f.attr("name"));var i=a(j.contentWindow.document.body).text();c.onComplete(i)})}})}})(jQuery);
