﻿/*
	Product : SN Editor, trình soan thao van ban  WYSIWYG cho cac ung dung web ;
	Author : Sacroyant Nguyen ; Email : saroyant@gmail.com  ; Homepage : http://sacroyant.googlepages.com 
*/
function getNavigator(){var bUserAgent=navigator.userAgent.toLowerCase();if(bUserAgent.indexOf('msie')>0){return 'msie'}else if(bUserAgent.indexOf('opera')==0){return 'opera'}else if(bUserAgent.indexOf('safari')>0){if(bUserAgent.indexOf('chrome')==-1){return 'safari'}else{return 'chrome'}}else{return 'firefox'}};
var nav=getNavigator();
var isIE=(nav=='msie')?true:false;
var isMz=(nav=='firefox')?true:false;
var isOp=(nav=='opera')?true:false;
var isGC=(nav=='chrome')?true:false;
var isSa=(nav=='safari')?true:false;
var AVIMLoaded=false;
	var typemodes=[
		['auto','AUTO',0],
		['telex','TELEX',1],
		['vni','VNI',2],
		['viqr1','VIQR',3],
		['viqr2','VIQR*',4],
		['off','OFF',-1]
	  ];
function cod(s){return encodeURIComponent(s);}
function dec(s){return decodeURIComponent(s);}
function trim(str){return str.replace(/^\s+|\s+$/g,'')};
function apps(url){var oScript=document.createElement("script");oScript.type="text/javascript";oScript.src=url;document.body.appendChild(oScript);}
function setSNLabsCookie(name,value){var today=new Date();var ex=new Date();ex.setTime(today.getTime()+1000*60*60*24*360);document.cookie = name+"="+cod(value)+"; expires="+ex.toGMTString()+"; path=/";}
function getSNLabsCookie(name){
  var cookies=document.cookie.split(';');
  var tcookie ='',cname ='',cvalue='',found=false; 
	for(var i=0;i<cookies.length;i++){
	  tcookie=cookies[i].split('=');
	  cname=trim(tcookie[0]);
		if(cname==name){
		  found=true;
			if(tcookie.length>1){
			  cvalue=trim(tcookie[1]);
			}
			return dec(cvalue);
			break;
		}
		tcookie=null;
		cname='';
	}
  if(!found){
	return null;
  }
}
function Editor(instanceName, contain, defaultContent, width, height){
  this.is=instanceName;
  this.contain=contain;
  this.ID=this.is+'_editor';
  this.simpleArea='code_'+this.ID;
  this.UI=null;
  this.ed=null;
  this.cnt=defaultContent;
  this.width=width<300?300:width;
  this.height=height<200?200:height;
  this.cache='';
  this.mode='wysiwyg';
  this.submenu=null;
  this.btnApp=null;
  this.preilta=null;
  this.dialog=null;
  this.bookmark=null;
  this.testImageTimer=null;
  this.ToolBar=contain+'_toolBar';
  this.enableToolbar=true;
  this.sm=function(el,s){if(!this.enableToolbar){return;};this.cm();this.rel(this.is+'_'+el).style.position='relative';var paf=document.createElement('div');var pop=document.createElement('div');var w=this.width;var h=this.height;paf.id=this.is+'_ePaf';pop.id=this.is+'_'+el+'_pop';with(paf.style){position='absolute';padding='0px';backgroundImage='url("'+this.iconPath+'bg.gif")';top=isOp?'35px':'28px';left='0px';zIndex='2';width=(w==0)?'100%':w+'px';height=(h-58)+'px';}with(pop.style){position='absolute';padding='2px';borderWidth='1px';borderStyle='solid';borderColor='#cccccc';background='#ffffff';cursor='default';top=isOp?'38px':'25px';left=(el!='btnUnikey')?'0px':'-50px';zIndex='3';}pop.innerHTML=s;this.rel(this.is+'_subMenu').appendChild(paf);this.rel(this.is+'_'+el+'_menu').appendChild(pop);this.sa(this.is+'_ePaf', 'click', this.is+'.cm()');this.submenu=this.is+'_'+el+'_pop';this.btnApp=this.is+'_'+el+'_menu';this.preilta=paf;};this.addButton=function(id,t,ic,f,no,i){if(i!=null&&!isNaN(i)&&i>=0&&i<this.bs.length){this.bs.splice(i,0,new Array(id,t,ic,f,(no==null)?1:no));}else{this.bs.push(new Array(id,t,ic,f,(no==null)?1:no));}this.ltb()};this.moveButton=function(id,ix,r){for(var i=0;i<this.bs.length;i++){if(id==this.bs[i][0]){if(r==2){this.bs[i][4]=2}else{this.bs[i][4]=1}if(!isNaN(ix)&&ix>=0&&ix<this.bs.length){var t=this.bs[i];this.bs.splice(i,1);this.bs.splice(ix,0,t);};break;}}this.ltb();};this.cm=function(){this.cd();if(this.submenu!=null){this.clearTxt(this.btnApp);this.submenu=null;if(this.preilta){this.rel(this.is+'_subMenu').removeChild(this.preilta);this.preilta=null;}}};
  this.rel=function(ob){try{return document.getElementById(ob);}catch(e){}}
  this.gTxt=function(ob,txt){try{this.rel(ob).innerHTML=txt;}catch(e){}}
  this.clearTxt=function(ob){try{this.gTxt(ob,"");}catch(e){}}
  this.setStyle=function(ob,cln){this.rel(ob).className=cln;}
  this.show=function(ob){this.rel(ob).style.display='inline';}
  this.hide=function(ob){this.rel(ob).style.display='none';}
  this.osl=function(){if(!this.enableToolbar){return;};var s='<table border="0" width="120" height="100%" cellpadding="0" cellspacing="0">';var h=0,k=0;for(var i=0;i<8;i++){s+='<tr height="20" >';h=k;for(var j=0;j<4;j++){if(this.emoticons[(h+j)]){s+='<td align="center" width="30" height="25" title="'+this.fixSlashes(this.emoticons[(h+j)][0])+'"><img src="'+this.emoticonPath+this.emoticons[(h+j)][2]+'" '+ (!isIE?'onclick="'+this.is+'.fmt(\'inserthtml\',\''+this.emoticons[(h+j)][1]+'\');"':'onclick="'+this.is+'.getSelection().pasteHTML(\''+this.emoticons[(h+j)][1]+'\');'+this.is+'.ed.selection.createRange().select();"')+'></td>';}else{s+='<td>&nbsp;</td>';}k++;}s+='</tr>';}s+='</table>';this.sm('btnEmoticon',s);}
  this.cl=function(no){if(!this.enableToolbar){return;};var s='<div><table border="0" bgcolor="#999999" cellspacing="0" cellpadding="0">';var m=0;for(var i=0;i<5;i++){s+='<tr>';for(var j=0;j<8;j++){s+='<td title="'+this.colors[m][1]+'"><'+(isIE?'button':'div')+' id="bcm_'+m+'_'+no+'" class="cOut" onmouseover="'+this.is+'.setStyle(\'bcm_'+m+'_'+no+'\',\'cOver\');" onmouseout="'+this.is+'.setStyle(\'bcm_'+m+'_'+no+'\',\'cOut\');" style="background-color:'+this.colors[m][0]+';" onclick="'+this.is+'.fmt(\''+(no==1?'forecolor':(isIE?'backcolor':'hilitecolor'))+'\',\''+this.colors[m][0]+'\');'+this.is+'.cm();">&nbsp;</'+(isIE?'button':'div')+'></td>';m++;}s+='</tr>';}s+='</table></div>';this.sm((no==1?'btnFontcolor':'btnBackcolor'),s);}
  this.fsl=function(){if(!this.enableToolbar){return;};var z=0,s='<table border="0" cellpadding="0" cellspacing="1" width="20">';for(var i=0;i<this.fontSize.length;i++){z=i+1;s+='<tr><td><'+(isIE?'button':'div')+' id="fsm'+i+'" class="mOut" style="border:none;font-family:serif;width:100%;text-align:center;margin:0px;padding:0px;"  onclick="'+this.is+'.fmt(\'fontsize\',\''+this.fontSize[i]+'\');'+this.is+'.cm();" onmouseover="'+this.is+'.setStyle(\'fsm'+i+'\',\'mOn\');" onmouseout="'+this.is+'.setStyle(\'fsm'+i+'\',\'mOut\');" title="'+z+'"><font size="'+this.fontSize[i]+'">'+this.fontSize[i]+'</font></'+(isIE?'button':'div')+'></td></tr>';}s+='</table>';this.sm('btnFontsize',s);}
  this.ffl=function(){if(!this.enableToolbar){return;};var s='<table cellpadding="0" cellspacing="0" width="100">';for(var i=0;i<this.fontFace.length;i++){s+='<tr><td><'+(isIE?'button':'div')+' id="ffm'+i+'" class="mOut" style="border:none;font-family:serif;width:100%;text-align:left;margin:0px;padding:0px;" onclick="'+this.is+'.fmt(\'fontname\',\''+this.fontFace[i]+'\');'+this.is+'.cm();" onmouseover="'+this.is+'.setStyle(\'ffm'+i+'\',\'mOn\');" onmouseout="'+this.is+'.setStyle(\'ffm'+i+'\',\'mOut\');" title="'+this.fontFace[i]+'"> &nbsp; <font face="'+this.fontFace[i]+'">'+this.fontFace[i]+'</font></'+(isIE?'button':'div')+'></td></tr>';}s+='</table>';this.sm('btnFontface',s);}
  this.undoClear=function(){if(this.cache!=''){this.cnt=this.cache;if(this.mode=='wysiwyg'){this.ed.body.innerHTML=this.cnt;}else{this.rel(this.simpleArea).value=this.cnt;};this.cache='';this.clearTxt('undo');}}
  this.clearAll=function(){if(this.mode=='wysiwyg'){this.cache=this.getHTML();this.cnt="";this.ed.body.innerHTML='';}else{this.cache=this.rel(this.simpleArea).value;this.rel(this.simpleArea).value='';this.cnt='';};if(this.cache.length>5){this.gTxt('undo','<span class="ctr" id="btnUndoClear" title="Undo Clear">Undo</span>');this.sa('btnUndoClear','click',this.is+'.undoClear();');}}
  this.selectAll=function(){this.cm();if(this.mode=='wysiwyg'){this.fmt('selectall');this.UI.focus();}else{this.rel(this.simpleArea).focus();this.rel(this.simpleArea).select();}}
  this.getHTML=function(){this.ed.body.innerHTML=this.ed.body.innerHTML.replace(/<P>&nbsp;<\/P>/g,"<br \/>");this.ed.body.innerHTML=this.ed.body.innerHTML.replace(/<P>/g,"");this.ed.body.innerHTML=this.ed.body.innerHTML.replace(/<P><\/P>/g,"<br \/>");this.ed.body.innerHTML=this.ed.body.innerHTML.replace(/ <BR>/g,"<br \/>");this.ed.body.innerHTML=this.ed.body.innerHTML.replace(/(.*?)<br>$/gi,"$1");return this.ed.body.innerHTML;}
  this.getContent=function(){return this.getHTML();}
  this.getText=function(){return isIE?this.ed.body.innerText:this.ed.body.textContent;}
  /*this.AVIMPath=siteurl+'/jscripts/viettype.js';*/this.AVIMLoad=false;
  this.iconPath=siteurl+'/pics/';this.emoticonPath='http://us.i1.yimg.com/us.yimg.com/i/mesg/emoticons7/';
  this.textColor='#000000';this.textFont='sans-serif';this.textSize='14px';
  this.backgroundImage=new Object();this.backgroundImage.url=this.iconPath+'background.jpg';this.backgroundImage.repeat='no-repeat';this.backgroundImage.position='top right';this.backgroundColor='#ffffff';
  this.toolbarColor="#f2fff1";
  this.showFootbar=true;
  this.codeTag=[['SCRIPT',['[SCRIPT]','[/SCRIPT]']],['CODE',['[CODE]','[/CODE]']],['PHP',['[PHP]','[/PHP]']],['PRE',['<pre class="prettyprint">','</pre>']]];
  this.removeButton=function(btn){for(var k=0;k<arguments.length;k++){if(!isNaN(arguments[k])){if(arguments[k]>=0&&arguments[k]<this.bs.length){this.bs.splice(arguments[k],1);}}else{for(var i=0;i<this.bs.length;i++){if(arguments[k]==this.bs[i][0]){this.bs.splice(i,1);break;}}}}this.ltb()};this.ltb=function(){var s='<table border="0" cellpadding="1" cellspacing="0">';var tt=1;for(var i=0;i<this.bs.length;i++){if(this.bs[i][4]!=1){tt=2;break;}}if(tt==1){s+='<tr height="25">';for(var i=0;i<this.bs.length;i++){s+='<td width="20">';s+='<span style="position:relative;" id="'+this.is+'_'+this.bs[i][0]+'_menu"></span><div id="'+this.is+'_'+this.bs[i][0]+'" style="background-image:url('+this.iconPath+this.bs[i][2]+');background-repeat:no-repeat;background-position: center center;" class="bOut" title="'+this.bs[i][1]+'"><img src="'+this.iconPath+'bg.gif" width="18" height="18"></div>';s+='</td>';}s+='</tr>';}else if(tt==2){s+='<tr height="20">';var mx=m=n=0;r=[[],[]];for(var i=0;i<this.bs.length;i++){if(this.bs[i][4]==1){r[0].push(this.bs[i]);m++;}else{r[1].push(this.bs[i]);n++;}}mx=m>n?m:n;for(var i=0;i<mx;i++){if(i<r[0].length){s+='<td width="20">';s+='<span style="position:relative;" id="'+this.is+'_'+r[0][i][0]+'_menu"></span><div id="'+this.is+'_'+r[0][i][0]+'" style="background-image:url('+this.iconPath+r[0][i][2]+');background-repeat:no-repeat;background-position: center center;" class="bOut" title="'+r[0][i][1]+'"><img src="'+this.iconPath+'bg.gif" width="18" height="18"></div>';s+='</td>';}else{s+='<td width="20">&nbsp;</td>';}}s+='</tr>';s+='<tr height="25">';for(var i=0;i<mx;i++){if(i<r[1].length){s+='<td width="20">';s+='<span style="position:relative;" id="'+this.is+'_'+r[1][i][0]+'_menu"></span><div id="'+this.is+'_'+r[1][i][0]+'" style="background-image:url('+this.iconPath+r[1][i][2]+');background-repeat:no-repeat;background-position: center center;" class="bOut" title="'+r[1][i][1]+'"><img src="'+this.iconPath+'bg.gif" width="18" height="18"></div>';s+='</td>';}else{s+='<td width="20">&nbsp;</td>';}}s+='</tr>';}s+='</table>';this.gTxt(this.ToolBar,s);for(var i=0;i<this.bs.length;i++){if(this.bs[i].callback!=''){this.sa(this.is+'_'+this.bs[i][0],'click',this.bs[i][3]);}this.sa(this.is+'_'+this.bs[i][0],'mouseout',this.is+'.setStyle("'+this.is+'_'+this.bs[i][0]+'","bOut")');this.sa(this.is+'_'+this.bs[i][0], 'mouseover', this.is+'.setStyle("'+this.is+'_'+this.bs[i][0]+'","bOver")');}}
  this.sa=function(o,e,f){var el=this.rel(o);if(el!=null){if(el.addEventListener){el.addEventListener(e,new Function(f),false)}else if(el.attachEvent){el.attachEvent('on'+e, new Function(f))}}};
  this.switchMode=function(){
	if(this.mode=='simpletext'){
		this.show(this.ID);
		this.mode='wysiwyg';
		this.hide(this.simpleArea);
		this.enableToolbar=true;
	}
	else{
		this.show(this.simpleArea);
		this.hide(this.ID);	
		this.mode='simpletext';
		this.enableToolbar=false;
	}
  }
  this.loadAvim=function(){
	if(!this.AVIMLoad){
	  apps(this.AVIMPath);
	  this.AVIMLoad=true;
	}
	if(AVIMLoaded){
		this.checkTypeMode();  
	}
	else{
		var self=this;
		setTimeout(function(){self.loadAvim()},100);
	}
  }
  this.display=function(){
	var sEditor='<iframe id="'+this.ID+'" style="width:'+((this.width==0)?'99%':(this.width-5)+'px')+';height:'+(this.height-(this.showFootbar?55:30))+'px;overflow:auto;margin:0px;padding:0px;"></iframe><textarea id="code_'+this.ID+'" style="margin:2px;padding:4px;width:'+((this.width==0)?'99%':(this.width-5)+'px')+';height:'+(this.height-(this.showFootbar?55:30))+'px;overflow:auto;border:inset 2px #999999;display:none;color:'+this.textColor+';font-family:'+this.textFont+';font-size:'+this.textSize+';background-color:'+this.backgroundColor+';"></textarea>',sCB='',s='<table border="0" width="'+((this.width==0)?'100%':this.width)+'" height="'+this.height+'" cellpadding="1" cellspacing="0" style="background-color:#f7fff3;"><tr height="25" bgcolor="'+this.toolbarColor+'"><td colspan="2"><span id="'+this.is+'_subMenu" style="position:relative;top:0px;left:0px;"></span><span id="fly" style="position:relative;"></span><span id="'+this.ToolBar+'">&nbsp;</span></td></tr><tr height="'+(this.height-(this.showFootbar?50:25))+'"><td colspan="2">'+sEditor+'</td></tr>';
	if(this.showFootbar){s+='<tr height="25"><td colspan="2"><table width="100%"><tr><td width="70%"> &nbsp; <span id="btnConvert"><span class="ctrE" title="Convert to HTML code" onclick="'+this.is+'.convertHTML();">Convert to HTML</span></span> </td><td width="30%"> <span class="ctrE" title="Select All" onclick="'+this.is+'.selectAll();">Select All</span> &nbsp; <span class="ctrE" title=" Clear All " onclick="'+this.is+'.clearAll();">Clear All</span> &nbsp; &nbsp;<span id="undo" style="background-color:#ffff99;"></span></td></tr></table></td></tr>'}s+='</table>';this.gTxt(this.contain,s);this.ltb();this.UI=this.rel(this.ID).contentWindow;this.ed=this.UI.document;with(this.ed){designMode='On';open();write('<html><head><style>p{margin:0px;padding:0px;}</style></head><body style="color:'+this.textColor+';font-family:'+this.textFont+';font-size:'+this.textSize+';margin:2px;padding:4px;background-color:'+this.backgroundColor+';'+((this.backgroundImage.url!='')?'background:'+this.backgroundColor+' url(\''+this.backgroundImage.url+'\') '+this.backgroundImage.repeat+' '+this.backgroundImage.position+' fixed;':'')+'">'+this.cnt+'</body></html>');close();}this.UI.focus();var self=this;setTimeout(function(){self.loadAvim();},1000);}
  this.fmt=function(c,v){this.cm();if(!this.enableToolbar){return;};if(this.ed.queryCommandEnabled(c)){if(!v){v=null;}this.ed.execCommand(c,false,v);this.UI.focus();}}
  this.unformat=function(){
	if(this.enableToolbar){
      if(isOp){
		var sel=this.UI.getSelection();
		  this.fmt('inserthtml',sel);
	  }
	  else{
		this.fmt('unlink');
		this.fmt('removeformat');
	  }
	}
  }
  this.getSelectedText=function(){
    if(!isIE){
	  var sel=this.getSelection();
	  if(sel==''){return '';}
		var rg=sel.getRangeAt(0);
		var doc=rg.cloneContents();
		var xmls=new XMLSerializer();
		  return xmls.serializeToString(doc);
	}
	else{
	  if(this.bookmark){
		return this.bookmark.htmlText;
	  }
	  else{
	    var ir=this.ed.selection.createRange();
	    ir.select();
	    return ir.htmlText;		
	  }
	}
  }
  this.quote=function(){
    try{
	  if(this.enableToolbar){
		var s=this.getSelectedText();
		if(s!=''){
		  var qt='';
		  var sq='[quote]',eq='[/quote]';
		  if(!isIE){
			qt=sq+s+eq;
			this.fmt('inserthtml',qt);
		  }
		  else{
			var ig=this.ed.selection.createRange();
			ig.select();
			qt=sq+s+eq;
			ig.pasteHTML(qt);
		  }
		}else{
		  if(!isIE){
			this.fmt('inserthtml','[quote][/quote]');
		  }
		  else{
			var ig=this.ed.selection.createRange();
			ig.select();
			ig.pasteHTML('[quote][/quote]');
		  }
		}
	  }
	}
	catch(e){}
  }
  this.codeType=function(){
	if(this.enableToolbar){
		var s='<table cellpadding="0" cellspacing="0" width="50">';
	      for(var i=0;i<this.codeTag.length;i++){
			s+='<tr height="12" id="codeType'+i+'" class="mOut" onmouseover="'+this.is+'.setStyle(\'codeType'+i+'\',\'mOn\');" onmouseout="'+this.is+'.setStyle(\'codeType'+i+'\',\'mOut\');" onclick="'+this.is+'.code('+i+');'+this.is+'.cm();"><td><'+(isOp?'button':'div')+' style="border:none;font-family:arial,sans-serif;font-size:11px;width:100%;text-align:left;margin:0px;padding:0px;"> &nbsp; '+this.codeTag[i][0]+'</'+(isOp?'button':'div')+'></td></tr>';
		  }
		  s+='</table>';
	    this.sm('btnCode',s);
	}  
  }
  this.code=function(k){
    try{
		this.unformat();
		  if(!k){k=0;}
		  var ss=this.getSelectedText();
			if(ss!=''){
			   var sc=((k!=3)?'<br />':'')+this.codeTag[k][1][0], ec=this.codeTag[k][1][1]+((k!=3)?'<br />':'');
				if(!isIE){
				  this.fmt('inserthtml',sc+ss+ec);
				}
				else{
				  var ig=this.ed.selection.createRange();
					ig.select();
					ig.pasteHTML(sc+ss+ec);
				}
			}
	}
	catch(e){}
  } 
  this.showDialog=function(title, str, width, height){
	var w=this.width;var h=this.height;
	var d=document.createElement('div');
	var paf=document.createElement('div');
	paf.setAttribute('id',this.is+'_paf');
	d.setAttribute('id',this.is+'_dialog');
	d.style.position='absolute';
	d.style.zIndex=5;
	d.style.top=parseInt((h-(height+40))/2)+'px';
	d.style.left=parseInt((w-width)/2)+'px';
	d.style.borderStyle='solid';
	d.style.borderColor='#119919';
	d.style.borderWidth='2px';
	d.style.width=width+'px';
	d.style.height=height+'px';
	d.style.backgroundColor='#eeeeee';
	d.innerHTML='<table width="100%" height="100%" cellpadding="4"><tr height="20"><td align="center" bgcolor="#119919" style="font-family:arial;color:#ffff00;font-size:15px;">'+title+'</td></tr><tr><td>'+str+'</td></tr></table>';
	this.cm();
	this.dialog=d;
	this.preilta=paf;
	  with(paf.style){position='absolute';padding='0px';backgroundImage='url("'+this.iconPath+'bg.gif")';top=isOp?'35px':'28px';left='0px';zIndex='2';width=(w==0)?'100%':w+'px';height=(h-58)+'px';}
	  this.rel(this.is+'_subMenu').appendChild(paf);
	  this.sa(this.is+'_paf', 'click', this.is+'.cd()');
	this.rel('fly').appendChild(d);
	  if(isIE){
	  	if(this.bookmark){
		  this.bookmark=null;
		}
		  this.bookmark=this.getSelection();
	  }
  }
  this.cd=function(){
	if(this.dialog){this.rel('fly').removeChild(this.dialog);this.dialog=null;}
	if(this.preilta){this.rel(this.is+'_subMenu').removeChild(this.preilta);this.preilta=null;}
	if(this.testImageTimer){clearInterval(this.testImageTimer);}
	  	if(isIE&&this.bookmark){
		  this.bookmark.select();
		  this.bookmark=null;
		}
	this.UI.focus();
  }
  this.addLink=function(){
	if(this.enableToolbar){
	  this.cm();
	  var s='<form name="fLink" onsubmit="return '+this.is+'.doAddLink();"><table width="100%" height="100%" cellpadding="3" cellspacing="1">';
	  s+='<tr><td width="50" align="right">Type : </td><td><select name="linkType" id="linkType"><option value="0">Web address<option value="1">Email address</select> &nbsp; &nbsp; Target : &nbsp;<select name="linkTarget" id="linkTarget"><option value="0">New<option value="1">Blank<option value="2">Parent<option value="3">Top</select> </td></tr>';
	  s+='<tr><td align="right">Link : </td><td><input type="text" name="linkTo" id="linkTo" value="" style="width:310px;color:blue;"></td></tr>';
	  s+='<tr><td align="right">Title : </td><td><input type="text" name="linkTile" id="linkTitle" value="" style="width:310px;color:blue;"></td></tr>';
	  s+='<tr><td colspan="2" align="center"><input type="submit" value="Insert" style="width:80px;" class="btn" onmouseover="this.className=\'btnOn\'" onmouseout="this.className=\'btn\'"><input type="button" value="Cancel" style="width:80px;" class="btn" onmouseover="this.className=\'btnOn\'" onmouseout="this.className=\'btn\'" onclick="'+this.is+'.cd();"></td></tr>';
	  s+='</table></form>'
	  this.showDialog('Insert HyperLink', s, 400, 150);
	  this.rel('linkTo').focus();
	}
  }
  this.doAddLink=function(){
	var t=this.rel('linkType').value;
	var w=this.rel('linkTarget').value;
	var l=trim(this.rel('linkTo').value);
	var lt=trim(this.rel('linkTitle').value);
	var s='';/*var ss=this.getSelectedText();
	if(!ss){
	  	if(isIE&&this.bookmark){
		  this.bookmark.select();
		}
	  this.cd();
	  return false;
	}*/
	  if(l!=''){
		if(t==0){
		  if(l.indexOf('http://')!=0&&l.indexOf('https://')!=0&&l.indexOf('ftp://')!=0&&l.indexOf('mms://')!=0){
			l='http://'+l;
		  }
		  s+='<a href="'+l+'" ';
			switch(w){
			  case '0' : s+='target="_new"';break;
			  case '1' : s+='target="_blank"';break;
			  case '2' : s+='';break;
			  case '3' : s+='target="_top"';break;
			}
		  //s+=((lt!='')?(' title="'+this.fixQuote(lt)+'"'):'')+'>'+ss;
		  s+=((lt!='')?(' title="'+this.fixQuote(lt)+'"'):'')+'>'+((lt!='')?this.fixQuote(lt):l);
		}
		else if(t==1){
			s+='<a href="mailto:'+l+'">'+ss;
		}
		s+='</a>';
		  if(!isIE){
			this.fmt('inserthtml',s);
		  }
		  else{
			this.bookmark.pasteHTML(s);
			this.bookmark.select();
		  }
		this.cd();
	  }
	  else{
		this.cd();
	  }
	return false;
  }
  this.insertImage=function(url, title){
	if(this.enableToolbar){
	  this.cm();
		if(url){
		  this.UI.focus();
			var s='<img src="'+url+'" alt="'+title+'" title="'+title+'" />';
			  if(!isIE){
				this.fmt('inserthtml',s);
			  }
			  else{
				if(isIE&&this.bookmark){
				  this.bookmark.pasteHTML(s);
				}else{
				var ig=this.ed.selection.createRange();
				ig.select();
				qt=s;
				ig.pasteHTML(qt);
				}
			}  
		  this.cd();
		   return false;
		}
	  var s='<form name="fImage" onsubmit="return '+this.is+'.doAddImage();"><table width="100%" height="100%" cellpadding="3" cellspacing="1">';
	  s+='<tr><td width="50" align="right">Type : </td><td><select name="imgType" id="imgType"><option value="0">Web address <option value="1" disabled>Local file</select> &nbsp; &nbsp; Align : &nbsp;<select name="imgAlign" id="imgAlign"><option value=""> &nbsp;None <option value="top"> &nbsp;Top<option value="bottom"> &nbsp;Bottom<option value="middle"> &nbsp;Middle<option value="left"> &nbsp;Left<option value="right"> &nbsp;Right</td></tr>';
	  s+='<tr><td align="right">URL : </td><td><input type="text" name="imgSrc" id="imgSrc" value="" onblur="'+this.is+'.loadPreviewImg();" style="width:320px;color:blue;"></td></tr>';
	  s+='<tr><td colspan="2">'
	  s+='<table width="100%" cellpadding="0" cellspacing="1">'
		s+='<tr><td align="right" width="60">Border : </td><td width="60"> &nbsp; <input type="text" name="imgBorder" id="imgBorder" value="0" style="width:30px;color:blue;"> <span style="font-size:11px;">px</span></td><td rowspan="3"><div id="imgPreview" style="width:240px;height:70px;border:solid 1px #cccccc;background:url('+this.iconPath+'bg.gif) center center no-repeat;"><div style="color:#1a8a1a;font-family:sans-serif;font-size:11px;padding:5px;">If your URL is correct, you\'ll see an image preview here. Large images may take a few minutes to appear.</div></div><input type="hidden" name="imgPath" id="imgPath" value=""></td></tr>';  
		s+='<tr><td align="right">Hspace : </td><td> &nbsp; <input type="text" name="imgHspace" id="imgHspace" value="1" style="width:30px;color:blue;"> <span style="font-size:11px;">px</span></td></tr>';  
		s+='<tr><td align="right">Vspace : </td><td> &nbsp; <input type="text" name="imgVspace" id="imgVspace" value="1" style="width:30px;color:blue;"> <span style="font-size:11px;">px</span></td></tr>';  
	  s+='</table>'
	  s+='</td></tr>'
	  s+='<tr><td align="right">Title : </td><td><input type="text" name="imgTile" id="imgTitle" value="" style="width:320px;color:blue;"></td></tr>';
	  s+='<tr><td colspan="2" align="center"><input type="submit" value="Insert" style="width:80px;" class="btn" onmouseover="this.className=\'btnOn\'" onmouseout="this.className=\'btn\'"><input type="button" value="Cancel" style="width:80px;" class="btn" onmouseover="this.className=\'btnOn\'" onmouseout="this.className=\'btn\'" onclick="'+this.is+'.cd();"></td></tr>';
	  s+='</table></form>'
	  this.showDialog('Insert Picture', s, 410, 240);
	  this.rel('imgSrc').focus();
	  var self=this;
	  this.testImageTimer=setInterval(function(){self.loadPreviewImg();},100);
	}
  } 
  this.loadPreviewImg=function(){
	if(this.rel('imgSrc')&&this.rel('imgSrc').value!=''){
		if(this.rel('imgPreview')){
			this.rel('imgPreview').style.backgroundImage='url('+this.rel('imgSrc').value+')';
		}
	}
  }
  this.doAddImage=function(){
	var s='';
	var addType=this.rel('imgType').value;
	var align=this.rel('imgAlign').value;
	var border=this.rel('imgBorder').value;
	var hspace=this.rel('imgHspace').value;
	var vspace=this.rel('imgVspace').value;
	var title=trim(this.rel('imgTitle').value);
	var src=trim(this.rel('imgSrc').value);
	  if(addType==1){
		src=trim(this.rel('imgPath').value);
		//use uploaded file...
	  }
	if(src!=''){
		if(src.indexOf('http://')!=0&&src.indexOf('https://')!=0){
		  src='http://'+src;
		}
	  s+='<img src="'+src+'" border="'+border+'" hspace="'+hspace+'" vspace="'+vspace+'" align="'+align+'" alt="'+this.fixQuote(title)+'" title="'+this.fixQuote(title)+'" />';
		  if(!isIE){
			this.fmt('inserthtml',s);
		  }
		  else{
			if(isIE&&this.bookmark){
			  this.bookmark.pasteHTML(s);
			}
		 }  
	}
	  this.cd();
	return false;
  }
  this.getSelection=function(){
	if(window.getSelection){ 
      return this.UI.getSelection();
	}
	else if(document.getSelection){
	  return this.ed.getSelection();
	}
	else if(document.selection){ 
	  return this.ed.selection.createRange();
	}
  }
  this.fixQuote=function(s){
	s=s.replace(/(&#8220;)|(&#8221;)|[“”\u8220\u8221]|[\"]/g, "&#34;");
	s=s.replace(/(&#8216;)|(&#8217;)|[‘’\u8216\u8217]|[\']/g, "&#39;");
	return s;
  }
  this.fixSlashes=function(s){
	return s.replace(/\\/g, "");
  }
  this.convertHTML=function(){
	this.switchMode();
	this.rel(this.simpleArea).value=this.getHTML();
	this.gTxt("btnConvert",'<span class="ctrE" title="WYSIWYG mode" onclick="'+this.is+'.convertWYSIWYGMode();">Return WYSIWYG</span>');
  }
  this.convertWYSIWYGMode=function(){
	this.switchMode();
	this.ed.body.innerHTML=this.rel(this.simpleArea).value;
	this.gTxt("btnConvert",'<span class="ctrE" title="Convert to HTML code" onclick="'+this.is+'.convertHTML();">Convert to HTML</span>');
  }
	this.vnkb=function(){
	  if(this.enableToolbar){
		var s='<table cellpadding="0" cellspacing="0" width="80">';
	      for(var i=0;i<typemodes.length;i++){
			s+='<tr height="12" id="vnkb'+i+'" class="mOut" onmouseover="'+this.is+'.setStyle(\'vnkb'+i+'\',\'mOn\');" onmouseout="'+this.is+'.setStyle(\'vnkb'+i+'\',\'mOut\');" onclick="'+this.is+'.changeTypeMode(\''+typemodes[i][2]+'\');'+this.is+'.cm();"><td width="20" style="font-size:9px;">&nbsp;<span id="tm_'+typemodes[i][0]+'"></span></td><td><'+(isOp?'button':'div')+' style="border:none;font-family:arial,sans-serif;font-size:11px;width:100%;text-align:left;margin:0px;padding:0px;"> '+typemodes[i][1]+'</'+(isOp?'button':'div')+'></td></tr>';
		  }
		  s+='</table>';
	    this.sm('btnUnikey',s);this.checkTypeMode();
	  }
	}
	this.changeTypeMode=function(k){
	  setMethod(k);
		setSNLabsCookie('typeMode',k);
		for(var i=0;i<typemodes.length;i++){
		  this.gTxt('tm_'+typemodes[i][0],((typemodes[i][2]==k)?'<img src="'+this.iconPath+'checked.gif" height="8" width="9">':'&nbsp;'));
		}
	}
	this.checkTypeMode=function(){
	  var k=getSNLabsCookie('typeMode');
		if(k){
		  for(var i=0;i<typemodes.length;i++){
			this.gTxt('tm_'+typemodes[i][0],(typemodes[i][2]==k)?'<img src="'+this.iconPath+'checked.gif" height="8" width="9">':'&nbsp;');
		  }
		}
		else{k=-1;this.gTxt('tm_'+typemodes[5][0],'<img src="'+this.iconPath+'checked.gif" height="8" width="9">');}	
	  setMethod(k);
	}
  this.bs=[
		['btnBold', 'Bold', 'bold.gif', this.is+'.fmt("bold")', 1],
		['btnItalic', 'Italic', 'italic.gif', this.is+'.fmt("italic")', 1],
		['btnUnderline', 'Underline', 'underline.gif', this.is+'.fmt("underline")', 1],
		['btnFontface', 'Font Face', 'fontface.gif', this.is+'.ffl()', 1],
		['btnFontsize', 'Font Size', 'fontsize.gif', this.is+'.fsl()', 1],
		['btnFontcolor', 'Font Color', 'fontcolor.gif', this.is+'.cl(1)', 1],
		['btnBackcolor', 'Background Color', 'bgcolor.gif', this.is+'.cl(2)', 1],
		['btnSuperscript', 'Super Script', 'sup.gif', this.is+'.fmt("superscript")', 1],
		['btnSubscript', 'Sub Script', 'sub.gif', this.is+'.fmt("subscript")', 1],
		['btnInsertLink', 'Insert Link', 'link.gif', this.is+'.addLink()', 1],
		['btnInsertImage', 'Insert Image', 'image.gif', this.is+'.insertImage()', 1],
		['btnEmoticon', 'Emoticons', '8.gif', this.is+'.osl()', 1],
		['btnAlignLeft', 'Align Left', 'alignLeft.gif', this.is+'.fmt("justifyleft")', 1],
		['btnAlignCenter', 'Align Center', 'alignCenter.gif', this.is+'.fmt("justifycenter")', 1],
		['btnAlignRight', 'Align Right', 'alignRight.gif', this.is+'.fmt("justifyright")', 1],
		['btnAlignJustify', 'Align Justify', 'alignJustify.gif', this.is+'.fmt("justifyfull")', 1],
		['btnOrderedList', 'Ordered List', 'orderedList.gif', this.is+'.fmt("insertorderedlist")', 1],
		['btnBulletedList', 'Bulleted List', 'bulletedList.gif', this.is+'.fmt("insertunorderedlist")', 1],
		['btnIndentMore', 'Indent', 'indent.gif', this.is+'.fmt("indent")', 2],
		['btnOutdentMore', 'Outdent', 'outdent.gif', this.is+'.fmt("outdent")', 2],
		['btnQuote', 'Quote', 'quote.png', this.is+'.quote()', 2],
		['btnUnformat', 'Remove Formatting', 'removeformatting.gif', this.is+'.unformat()', 2],
		['btnUnikey', 'Vietnamese Keyboard', 'unikey.jpg', this.is+'.vnkb()', 2],
		['btnMedia', 'Media', 'media.gif', (!isIE?this.is+'.fmt(\'inserthtml\', \'[wm]http://www[/wm]\')':this.is+'.getSelection().pasteHTML(\'[wm]http://www[\/wm]\');'+this.is+'.ed.selection.createRange().select()'), 2],
		['btnFlash', 'Flash', 'flash.gif', (!isIE?this.is+'.fmt(\'inserthtml\', \'[flash]http://www[/flash]\')':this.is+'.getSelection().pasteHTML(\'[flash]http://www[\/flash]\');'+this.is+'.ed.selection.createRange().select()'), 2],
		['btnMemberonly', 'Member Only', 'memberonly.gif', (!isIE?this.is+'.fmt(\'inserthtml\', \'[member][/member]\')':this.is+'.getSelection().pasteHTML(\'[member][\/member]\');'+this.is+'.ed.selection.createRange().select()'), 2],
		['btnYou', 'You', 'memberonly.gif', (!isIE?this.is+'.fmt(\'inserthtml\', \'[you]\')':this.is+'.getSelection().pasteHTML(\'[You]\');'+this.is+'.ed.selection.createRange().select()'), 2]
  ];
  this.fontSize=[1,2,3,4,5,6,7];
  this.fontFace=['Courier','Georgia','Cursive','Fixedsys','Impact','Serif','Sans-Serif','Elephant'];
  this.colors=[
	['#000000','Black'],
	['#A0522D','Sienna'],
	['#556B2F','Dark Olive Green'],
	['#006400','Dark Green'],
	['#483D8B','Dark Slate Blue'],
	['#000080','Navy'],
	['#4B0082','Indigo'],
	['#2F4F4F','Dark Slate Gray'],
	['#8B0000','Dark Red'],
	['#FF8C00','Dark Orange'],
	['#808000','Olive'],
	['#008000','Green'],
	['#008080','Teal'],
	['#0000FF','Blue'],
	['#708090','Slate Gray'],
	['#696969','Dim Gray'],
	['#FF0000','Red'],
	['#F4A460','Sandy Brown'],
	['#9ACD32','Yellow Green'],
	['#2E8B57','Sea Green'],
	['#48D1CC','Medium Turquoise'],
	['#4169E1','RoyalBlue'],
	['#800080','Purple'],
	['#808080','Gray'],
	['#FF00FF','Magenta'],
	['#FFA500','Orange'],
	['#FFFF00','Yellow'],
	['#00FF00','Lime'],
	['#00FFFF','Cyan'],
	['#00BFFF','Deep SkyBlue'],
	['#9932CC','Dark Orchid'],
	['#C0C0C0','Silver'],
	['#FFC0CB','Pink'],
	['#F5DEB3','Wheat'],
	['#FFFACD','Lemon Chiffon'],
	['#98FB98','Pale Green'],
	['#AFEEEE','Pale Turquoise'],
	['#ADD8E6','Light Blue'],
	['#DDA0DD','Plum'],
	['#FFFFFF','White'],
	['#DDA0DD','Plum'],
	['#FFFFFF','White']
  ];
  this.emoticons=[
	['happy',':)','1.gif'],
	['sad',':(','2.gif'],
	['rose','@};-','53.gif'],
	['coffee','~O)','57.gif'],	
	['batting eyelashes',';;)','5.gif'],
	['big hug','&gt;:D&lt;'+(isIE?'&lt;':''),'6.gif'],
	['confused',':-/','7.gif'],
	['love struck',':x','8.gif'],
	['blushing',':&quot;&gt;','9.gif'],
	['tongue',':P','10.gif'],
	['surprise',':-O','13.gif'], 
	['cool','B-)','16.gif'],
	['crying',':((','20.gif'],
	['laughing',':))','21.gif'],
	['straight face',':|','22.gif'],
	["don\\'t tell anyone",':-$','32.gif'],
	['yawn','(:|','37.gif'],
	['thinking',':-?','39.gif'],
	["d\\'oh",'#-o','40.gif'],
	['applause','=D&gt;','41.gif'],
	['angel','O:)','25.gif'],
	['daydreaming','8-&gt;','105.gif'],
	['kiss',':-\*','11.gif'],
	['angry','X(','14.gif'],
	['worried',':-S','17.gif'],
	['waiting',':-w','45.gif'],
	["I don\\'t know",':-??','106.gif'],
	['shame on you','[-X','68.gif'],
	['whistling',':-&quot;','65.gif'],
	['praying','[-O&lt;'+(isIE?'&lt;':''),'63.gif'],
	['winking',';)','3.gif'],
	['big grin',':D','4.gif']
  ];
}
//document.oncontextmenu=new Function("return false");

