var bxDomain="aileme";
var bengxinEditor = function(conName,eHeight,faceType){
	var btnBgPos = faceType ? [{ pos : '-272px' , idx : 0 , width : '29px' , tit : '插入表情' }] : [{ pos : '0' , idx : 0 , width : '18px' , tit : '加粗' },{ pos : '-17px' , idx : 1 , width : '18px' , tit : '斜体' },{ pos : '-34px' , idx : 2 , width : '18px' , tit : '下划线' },{ pos : '-51px' , idx : 3 , width : '18px' , tit : '取消样式' },{ pos : '-68px' , idx : 4 , width : '42px' , tit : '字体' },{ pos : '-85px' , idx : 5 , width : '42px' , tit : '文字大小' },{ pos : '-102px' , idx : 6 , width : '29px' , tit : '文字颜色' },{ pos : '-119px' , idx : 7 , width : '18px' , tit : '左对齐' },{ pos : '-136px' , idx : 8 , width : '18px' , tit : '居中对齐' },{ pos : '-153px' , idx : 9 , width : '18px' , tit : '右对齐' },{ pos : '-170px' , idx : 10 , width : '18px' , tit : '无序列表' },{ pos : '-187px' , idx : 11 , width : '18px' , tit : '有序列表' },{ pos : '-204px' , idx : 12 , width : '18px' , tit : '加超链接' },{ pos : '-221px' , idx : 13 , width : '18px' , tit : '取消链接' },{ pos : '-238px' , idx : 14 , width : '18px' , tit : '插入图片' },{ pos : '-255px' , idx : 15 , width : '29px' , tit : '插入flash' },{ pos : '-272px' , idx : 16 , width : '29px' , tit : '插入表情' },{ pos : '-289px' , idx : 17 , width : '64px' , tit : '插入视频转帖' }];
	var fontFamilyName = [{ family : '宋体' , name : '宋体' },{ family : '隶书' , name : '隶书' },{ family : '楷体' , name : '楷体_GB2312' },{ family : '幼圆' , name : 'youyuan' },{ family : '黑体' , name : 'SimHei' },{ family : 'Arial' , name : 'Arial' },{ family : 'Arial Black' , name : 'Arial Black' },{ family : 'Tahoma' , name : 'Tahoma' },{ family : 'Verdana' , name : 'Verdana' } , { family : 'Georgia' , name : 'Georgia' }];
	var fontClrs = ["#333333","#000000","#993300","#333300","#003300","#003366","#000080","#333399","#808080","#800000","#ff6600","#808000","#008000","#008080","#0000ff","#666699","#999999","#ff0000","#ff9900","#99cc00","#339966","#33cccc","#3366ff","#800080","#c0c0c0","#ff00ff","#ffcc00","#ffff00","#00ff00","#00ffff","#00ccff","#993366","#ffffff","#ff99cc","#ffcc99","#ffff99","#ccffcc","#F4F9FD","#99ccff","#cc99ff"];
    var bxEditor = this;
	this.editorHeight = eHeight ? eHeight : 260;
	this.toolBarHeight = 17;
	this.textareaName = conName;
	this.faceType = faceType; 
    this.editorObjBao = new Element("div").set({'class':'bxEditor'}).setStyles({'overflow' : 'hidden' , 'width' : '100%'});;
    this.editToolBar = new Element("div").set({'class':'bxeTools'}).setStyles({'height' :  this.toolBarHeight + 'px' , 'overflow' : 'hidden' , 'width' : '100%'});
	this.editorTextarea = new Element("textarea").set({'name': this.textareaName}).setStyles({'display' : 'none' , 'overflow' : 'auto' , 'font-size' : '14px' , 'padding' : '4px' , 'border' : '1px solid #DFDFDF' ,  'width' : '97%' , 'height' : this.editorHeight - this.toolBarHeight + 'px'});
    this.editorFrame =new IFrame({
		styles: {
			width: '97%',
			height: this.editorHeight - this.toolBarHeight + 'px',
			marginTop : '1px',
			padding : '4px',
			background : '#FFFFFF'
		},
		frameBorder : '0'	 
	});
	this.mPos = null;
	this.sType = null;
	this.textareaCon = $(conName);

	this.editBtn = [];
	this.editorMenuArr = [];
	this.toolBarBtn = [];

	this.init = function()	{		
		this.editorFrame.setStyles({'border' : '1px solid #DFDFDF'});
		this.editToolBar.inject(this.editorObjBao);
		this.editorTextarea.inject(this.editorObjBao);
		this.editorFrame.inject(this.editorObjBao);
		this.editorObjBao.inject(this.textareaCon,'before');
		this.eDomFrame = this.editorFrame.contentWindow;
		this.eDomDocument = this.eDomFrame.document;
		this.eDomDocument.designMode = "On";
		this.eDomDocument.open();
		this.eDomDocument.write('<html><head><style type=\"text/css\">body { padding:4px; margin:0; font-size:14px; font-family:Tahoma;} </style></head><body></body></html>');
		this.eDomDocument.close();
		this.eDomFrame.focus();
		this.eDomBody = this.eDomDocument.body;
		aEvt(this.eDomDocument, 'click', this.click);
		aEvt(this.eDomDocument, 'keyup', this.keyup);
		aEvt(this.eDomDocument, 'keydown', this.keydown);
		aEvt(this.eDomFrame, 'blur', this.blur);
		this.initTools();
		if(!this.faceType){
			this.injectFlash();
			this.injectVideo();
			this.fontFamilies();
			this.fontSizes();
			this.fontColors();
		}
		this.faceInsert();

		this.pushHtml(this.textareaCon.value);
	}

	this.create = function(){
		this.textareaCon.set('name' , '').setStyle('display' , 'none');
		this.init();
	}

	this.getHtml = function(){
		function change(s){return s}
		return bxEditor.eDomBody.innerHTML.replace(/<\/?\w[^>]*>/g,change);
	}

	this.pushHtml = function(s){
		bxEditor.eDomBody.innerHTML = s;
		bxEditor.editorTextarea.value = s;
	}
	this.setRange = function(){
		this.eDomFrame.focus();
		if (browser.msie)
		{
			this.mPos = this.eDomFrame.document.selection.createRange();
			this.sType = this.eDomFrame.document.selection.type;
		}
	}
	this.insertHTML = function(html){
		if (browser.msie){
			if (!this.mPos){
				this.setRange();
			}
			if(this.mPos && this.sType != "Control")
			{
				this.mPos.pasteHTML(html);
				this.mPos.select();
			}
			this.mPos = null;
		}
		else
		{
			this.eDomFrame.document.execCommand("insertHTML", false, html);
			this.eDomFrame.focus();
		}
	}

	this.empty = function(){return clearTag(bxEditor.editorTextarea.value).length == 0;}
	this.focus = function(){this.eDomFrame.focus();}
	this.paste = function(html){this.insertHTML(html);}

	this.imgWinOpen = function(o){}



	this.initTools = function(){
		this.setRange();
		btnBgPos.each(function(el){
			var a = new Element('input').set({'type' : 'button' , 'title' : el.tit }).setStyles({'background-position' : 'left ' + el.pos , 'width' : el.width});
			a.addEvents({'focus' : function(){this.blur(); bxEditor.eDomFrame.focus();},'click' : function(){bxEditor.toolBarBtn[el.idx](this);}});
			a.inject(bxEditor.editToolBar , '');
			bxEditor.editBtn[el.idx] = a;
		});
	}
	this.injectFlash = function(){
		this.setRange();
		var d = bxEditor._create_menu(4).addClass('injectFlashSwf');
		var c = new Element('div').set({'class' : 'fontStyleBao injectFlashDiv','html' : '<div class="injectFlashSwfBao"><h3>插入swf</h3><dl><dt>请插入后缀名为swf的地址。</dt><dd><input type="text" id="swfValue' + this.textareaName + '" value="" /></dd></dl><div class="injectBtnBao"><button class="injectSWFBtn">确定</button><button class="injectSWFClose">取消</button></div></div>'});
		c.inject(d);
		c.getElements('button')[0].addEvent('click' , function(){
			var swfV = $('swfValue' + bxEditor.textareaName).value;
			if(swfV != "http://" && swfV != ""){
				bxEditor.insFlash(); 
				bxEditor._cls_menu();
			}else{
				alert("视频地址不可为空！");
				$('swfValue' + bxEditor.textareaName).focus();
			}
			return false;
		})
		c.getElements('button')[1].addEvent('click' , function(){bxEditor._cls_menu(); bxEditor.eDomFrame.focus();  return false;})
	}
	this.injectVideo = function(){
		this.setRange();
		var d = bxEditor._create_menu(5).addClass('injectFlashSwf');
		var c = new Element('div').set({'class' : 'fontStyleBao injectFlashDiv','html' : '<div class="injectFlashSwfBao"><h3>贴视频，请直接输入网址</h3><dl><dt>目前支持：土豆、优酷、酷六、激动、六间房、第一视频、新浪视频</dt><dd><span id="vLoad' + this.textareaName + '" class="disNone">读取视频文件中... ...</span><input type="text" id="videoValue' + this.textareaName + '" value="" /></dd>' + (browser.mozilla ? '<dd style="color:#F39501; padding-top:6px;">Firefox浏览器，插入视频不支持所见即所得，但文章发布后可正常观看。</dd>' : '') + '</dl><div class="injectBtnBao"><button class="injectSWFBtn">确定</button><button class="injectSWFClose">取消</button></div></div>'});
		c.inject(d);
		c.getElements('button')[0].addEvent('click' , function(){
			var swfV = $('videoValue' + bxEditor.textareaName).value;
			if(swfV != "http://" && swfV != ""){
				bxEditor.insVideo(); 
			}else{
				alert("视频地址不可为空！");
				$('videoValue' + bxEditor.textareaName).focus();
			}
			return false;
		})
		c.getElements('button')[1].addEvent('click' , function(){bxEditor._cls_menu(); bxEditor.eDomFrame.focus();  return false;})
	}
	this.fontFamilies = function(){
		this.setRange();
		var d = bxEditor._create_menu(0).addClass('setFontFamily');
		var c = new Element('div').set('class' , 'fontStyleBao ffamilyList');
		c.inject(d);
		fontFamilyName.each(function(el){
			var a = new Element('a').set({'html' : el.family , 'href' : '#' , 'rel' : el.name});
			a.addEvent('click' , function(){sFmt(bxEditor.eDomFrame, 'FontName', this.rel);bxEditor._cls_menu(); return false;})
			a.inject(c,'bottom');
		});
	}
	this.fontSizes = function(){
		this.setRange();
		var d = bxEditor._create_menu(1).addClass('setFontSize');
		var c = new Element('div').set('class' , 'fontStyleBao fsizeList');
		c.inject(d);
		for(var i = 1 ; i < 8; i ++)
		{
			var a = new Element('a').set({'html' :  i + ' 号字' , 'href' : '#' , 'name' : i })
 			a.addEvent('click' , function(){sFmt(bxEditor.eDomFrame, 'FontSize', this.name);bxEditor._cls_menu();return false;})
			a.inject(c,'bottom');
		}
	}
	this.fontColors = function(){
		this.setRange();
		var d = bxEditor._create_menu(2).addClass('setFontColor');
		var c = new Element('div').set('class' , 'fontStyleBao fcolorList');
		c.inject(d);
		fontClrs.each(function(el){
			var a = new Element('a').set({'html' : el, 'href' : '#' }).setStyle('background', el)
			a.addEvent('click' , function(){sFmt(bxEditor.eDomFrame, 'ForeColor', this.innerHTML ); bxEditor._cls_menu(); return false;})
			a.inject(c,'bottom');
		});
	}
	this.faceInsert = function(){
		this.setRange();
		if(this.faceType){
			var d = bxEditor._create_menu(0).addClass('insertFace');
		}else{
			var d = bxEditor._create_menu(3).addClass('insertFace');
		}
	}
	this.insFace = function(ele){
		this.setRange();
		var img = $(ele).innerHTML;
		this.paste(img);
	}
	this.insFlash = function(){
		var swf = $('swfValue' + bxEditor.textareaName).value;
		var swfSTR = '<p><embed src="' + swf + '" type="application/x-shockwave-flash" allow script access="always" allowfullscreen="true" wmode="opaque" width="520" height="450"></embed></p>'
		this.paste(swfSTR);
		$('swfValue' + bxEditor.textareaName).value = '';
	}
	this.insVideo = function(){
		$('videoValue' + bxEditor.textareaName).addClass('disNone');
		$('vLoad' + bxEditor.textareaName).removeClass('disNone');
		var videoValue = $('videoValue' + bxEditor.textareaName).value.trim();
		var vdata = "path=" + encodeURIComponent(videoValue);
		var videoRequest = new Request.JSON({
			url: '/ajax/get_video.php',
			onSuccess: function(jsonObj) {
				if(jsonObj.msg == "1"){
					var videoSTR = '<p><embed src="' + jsonObj.path + '" type="application/x-shockwave-flash" allow script access="always" allowfullscreen="true" wmode="opaque" width="520" height="450"></embed></p>'
					bxEditor.paste(videoSTR);
					$('videoValue' + bxEditor.textareaName).value = '';
					$('videoValue' + bxEditor.textareaName).removeClass('disNone');
					$('vLoad' + bxEditor.textareaName).addClass('disNone');
					bxEditor._cls_menu();
				}else{
					$('videoValue' + bxEditor.textareaName).removeClass('disNone');
					$('vLoad' + bxEditor.textareaName).addClass('disNone');
					alert('视频网址有误，或本网站暂不支持。   \n  \n请插入正确的网址！');
				}
			}
		})
		videoRequest.cancel();
		videoRequest.send(vdata);
	}
	this._create_menu = function(i){
		var d = new Element('div').set({'class' : 'fontStyleList'}).setStyles({'display' : 'none' , 'position' : 'absolute' , 'z-index' : '999'})
		bxEditor.editorMenuArr[i] = d;
		d.inject(bxEditor.editorObjBao,'bottom');
		return d;
	}
	this._cls_menu = function(){
		this.editorMenuArr.each(function(el){el.setStyle('display','none')});
		if(browser.msie && this.mPos && this.sType != "Control"){
			this.mPos.select();
		}
		this.mPos = null;

	}
	this._shw_menu = function(m,x,y){
		bxEditor._cls_menu();
		if(/insertFace/.test($(m).className) && !$('faceInset' + this.textareaName)){
			var c = new Element('div').set({'id' : 'faceInset' + this.textareaName , 'class' : 'fontStyleBao faceInsertBao' });
			c.inject($(m));
			for(var i=0 ; i < 65 ; i ++){
				var a = new Element('a').set({'html' : '<img src="http:\/\/img.' + bxDomain + '.cn\/web\/face/new' + i + '.gif" alt="" />', 'href' : '#'});
				a.addEvent('click' , function(){bxEditor.eDomFrame.focus(); bxEditor.insFace(this); bxEditor._cls_menu(); return false;})
				a.inject($('faceInset' + this.textareaName));
			}
		}
		$(m).setStyles({'top' : y + 'px' , 'left' : x + 'px' , 'display' : 'block'});
	}
	this.click = function(){
		bxEditor._cls_menu();
	}

	this.keyup = function(e){
		var e = e ? e : event;
		if(e.ctrlKey && e.keyCode == 86){
			if(bxEditor.faceType){
				bxEditor.pushHtml(regExpTag(bxEditor.getHtml(),1));
			}else{
				bxEditor.pushHtml(regExpTag(bxEditor.getHtml()));
			}
		}
	}
	this.keydown = function(e){
		var e = e ? e : event;
		if(e.ctrlKey && e.keyCode == 13){
			if($('writeform')){
				if(writeSubmit()){
					$('writeform').submit();
				}
			}else if($('editorPost')){
				if(sendMSG()){
					$('editorPost').submit();
				}
			}else if($('shareToFriend')){
				if(sendLetter()){
					$('shareToFriend').submit();
				}
			}
		}
	}
	this.blur = function()
	{
		var html = bxEditor.getHtml();
		bxEditor.editorTextarea.value = html;
		bxEditor.textareaCon.value = html;
	}
	if(this.faceType){
		this.toolBarBtn[0] = function(ele){
			var p = gPos(ele); bxEditor._shw_menu(bxEditor.editorMenuArr[0], p.x, p.y + p.h);
		}
	}else{
		this.toolBarBtn[0] = function(){sFmt(bxEditor.eDomFrame, 'Bold');}
		this.toolBarBtn[1] = function(){sFmt(bxEditor.eDomFrame, 'Italic');}
		this.toolBarBtn[2] = function(){sFmt(bxEditor.eDomFrame, 'Underline');}
		this.toolBarBtn[3] = function(){sFmt(bxEditor.eDomFrame, 'RemoveFormat');}
		this.toolBarBtn[4] = function(ele){var p = gPos(ele); bxEditor._shw_menu(bxEditor.editorMenuArr[0], p.x, p.y + p.h);}
		this.toolBarBtn[5] = function(ele){var p = gPos(ele); bxEditor._shw_menu(bxEditor.editorMenuArr[1], p.x, p.y + p.h);}
		this.toolBarBtn[6] = function(ele){var p = gPos(ele); bxEditor._shw_menu(bxEditor.editorMenuArr[2], p.x, p.y + p.h);}
		this.toolBarBtn[7] = function(){sFmt(bxEditor.eDomFrame, 'justifyleft');}
		this.toolBarBtn[8] = function(){sFmt(bxEditor.eDomFrame, 'justifycenter');}
		this.toolBarBtn[9] = function(){sFmt(bxEditor.eDomFrame, 'justifyright');}
		this.toolBarBtn[10] = function(){sFmt(bxEditor.eDomFrame, 'insertunorderedlist');}
		this.toolBarBtn[11] = function(){sFmt(bxEditor.eDomFrame, 'insertorderedlist');}
		this.toolBarBtn[12] = function(){sFmt(bxEditor.eDomFrame, 'CreateLink');}
		this.toolBarBtn[13] = function(){sFmt(bxEditor.eDomFrame, 'Unlink');}
		this.toolBarBtn[14] = function(){
			bxEditor.imgWinOpen(bxEditor);
		}
		this.toolBarBtn[15] = function(ele){
			var p = gPos(ele); bxEditor._shw_menu(bxEditor.editorMenuArr[4], p.x, p.y + p.h);
		}
		this.toolBarBtn[16] = function(ele){
			var p = gPos(ele); bxEditor._shw_menu(bxEditor.editorMenuArr[3], p.x, p.y + p.h);
		}
		this.toolBarBtn[17] = function(ele){
			var p = gPos(ele); bxEditor._shw_menu(bxEditor.editorMenuArr[5], p.x, p.y + p.h);
		}
	}
}
function aEvt(o,t,h){
	if(o.attachEvent){o.attachEvent("on" + t, h);}
	else if(o.addEventListener){o.addEventListener(t, h, false);}else{o["on" + t] = h;}
}
function gEvt(){
	return window.event ? window.event : arguments.callee.caller.arguments[0];
}
function gRoot(){
	var e = document.documentElement;
	var b = document.body;
	return (e.clientHeight > b.clientHeight) ? e : b;
}
function gPos(o){
	var p = {'y':o.offsetTop,'x':o.offsetLeft,'w':o.clientWidth,'h':o.clientHeight};
	while(o = o.offsetParent){
		p.y += o.offsetTop;
		p.x += o.offsetLeft;
	}
	return p;
}

function sFmt(tar,what,opt){
	var f = false;
	if(what == 'CreateLink'){
		f = true; if(!browser.msie){opt = window.prompt("Enter Link:", "http://");}
		if (opt =='' || opt == "http://") return;
	}
	with(tar){
	    focus();
	    if(!opt){document.execCommand(what, f, false);}
	    else{if(browser.msie){document.execCommand(what,'',opt);}else{document.execCommand(what,false,opt);}}
	}
}
function regExpTag(html,type){
		html = html.replace(/<br>/gi, '<br />');
		html = html.replace(/<style[\s\S]*?<\/style>/gi, '');
		html = html.replace(/<script[\s\S]*?<\/script>/gi, '');
		html = html.replace(/<applet[\s\S]*?<\/applet>/gi, '');
		html = html.replace(/<object[\s\S]*?<\/object>/gi, '');
		html = html.replace(/<map[\s\S]*?<\/map>/gi, '');
		html = html.replace(/<select[\s\S]*?<\/select>/gi, '');
		html = html.replace(/<textarea[\s\S]*?<\/textarea>/gi, '');
		html = html.replace(/<!--[\s\S]*?-->/gi, '');
		html = html.replace(/<meta[\s\S]*?>/gi, '');
		html = html.replace(/<link[\s\S]*?>/gi, '');
		html = html.replace(/<input[\s\S]*?>/gi, '');
		html = html.replace(/<area[\s\S]*?>/gi, '');
		html = html.replace(/<\/?SPAN[^>]*>/gi, '');
		html = html.replace(/<\/?PRE[^>]*>/gi, '');
		html = html.replace(/<\/?BUTTON[^>]*>/gi, '');
		html = html.replace(/<\/?FORM[^>]*>/gi, '');
		html = html.replace(/<\/?IFRAME[^>]*>/gi, '');
		html = html.replace(/<(\w[^>]*) class="([^"]*)"([^>]*)/gi, '<$1$3');
		html = html.replace(/<(\w[^>]*) id=([^ |>]*)([^>]*)/gi, '<$1$3');
		html = html.replace(/<(\w[^>]*) style="([^"]*)"([^>]*)/gi, '<$1$3');
		html = html.replace(/<(\w[^>]*) on[\s\S]*?="([^"]*)"([^>]*)/gi, '<$1$3');
		html = html.replace(/<(\w[^>]*) lang=([^ |>]*)([^>]*)/gi, '<$1$3');
		html = html.replace(/<\\?\?xml[^>]*>/gi, '');
		html = html.replace(/<\/?\w+:[^>]*>/gi, '');
		if(type){
			html = html.replace(/<\/?A[^>]*>/gi, '');
			html = html.replace(/(<\/?(?!br|p|img)[^>\/]*)\/?>/gi,'');
		}
		return html.replace(/&nbsp;/, ' ');
}
function clearTag(str){
	return str.replace(/<[^>]+>/g, '');
}

