
//------------------------tag encoding-------------------------------
var aTag,aPrp,aAtt,aVal,aFil,aRst,offSet=162,iFtz,iFonts;

iFtz=new Array (0,1,2,3,4,5,6,7);
iFonts=new Array('monospace','sans-serif','serif','cursive','lucida console','courier','tempus sans itc','fantasy','impact','curlz mt','gothic');


//------------------------------------ ENCODE ----------------------------------

function cleanx(x){
x=grep(x,'[IMG]',' ');
x=grep(x,'[/IMG]',' ');
x=grep(x,'<a ','<A ');
x=grep(x,'<A ','<A target=_blank ');
x=grep(x,"`","");
x=grep(x,"\\","!&!"); 
x=grep(x,"&#092;","!&!"); 
x=grep(x,'<marquee>','<marquee direction=right behavior=alternate>');
x=encode(x);
x=grep(x,"'","&#39;");
return x;}


function encode(s){
if(s==null||s=='')return '';
var i,a1,a2,a3,i1,i2,i3,t,x,txt,xStyl='';
s=scrub(s);
s=grep(s,'progid:',String.fromCharCode(offSet));
a1=s.split('<');
x=a1[0];
for(i1=1;i1<a1.length;i1++){
 xStyl='';
 a2=a1[i1].split('>');
 if(a2.length==1){x+='&lt;'+a1[i1];continue;}
 x+='<';
 if(a2.length>1){
  txt=a1[i1].substr(_ix(a1[i1],'>')+1,a1[i1].length);
 }else txt='';
 a2[0]=fixqts(a2[0]);
 a2[0]=sqsh(a2[0],'=');
 a2[0]=fixSp(0,a2[0]);
 t=a2[0]; 
 i=_ix(t,' style="');
 if(i==-1)i=_ix(t,' STYLE="');
 if(i>-1){
  t=t.substr(i+8,t.length);
  t=grep(t,'absolute','relative');
  t=t.substr(0,_ix(t.substr(0,t.length),'"'));
  a2[0]=a2[0].replace(' style="'+t+'"','');
  xStyl=encStyle(t);
 }
 a2=a2[0].split(' ');
 t=a2[0];
 if(t.charAt(0)=='/'){
  x+='/';
  t=t.substr(1,99);
  x+=enc(aTag,t);
 }else{
  x+=enc(aTag,t);
  for(i2=1;i2<a2.length;i2++){
   if(a2[i2]!=''){
    a3=a2[i2].split('=');
    x+=enc(aPrp,a3[0]);
    a3[1]=_chkVal(a3[0],a3[1]);
    if(a3.length>1)x+=enc(aVal,a3[1],1);
 }}}
 x=trim(x);
 x+=xStyl;
 x+='>'+txt;
}
x=encRest(x);
return x;}


function scrub(s){
var c,i,k,t='';
for(i=0;i<s.length;i++){
 c=s.charAt(i);
 k=c.charCodeAt(0);
 if(k>161&&k<254)t+='&#'+k+';';
 else t+=c;
}
return t;}

function encStyle(s){
var i,x,a,j,t,att,p,a2,i2;
var url = /http:/i; // New line...........
x=enc(aPrp,'style');
s=grep(s,'_$',' ');
s=s.replace(url,"http&#58"); // New line.......... 
a=s.split(';');
for(i=0;i<a.length;i++){
 if(a[i].length>1){   
  t=a[i].split(':');
  if(t.length>1){
   t[0]=trim(t[0]);
   t[0]=t[0].toLowerCase();
   att=t[0].split('-');
   for(j=0;j<att.length;j++){
    x+=enc(aAtt,att[j]);
    if(j<att.length-1)x+='-';
   }
   t[1]=trim(t[1]);
   t[1]=_chkVal(t[0],t[1]);
   if(t[0]=='filter')x+=encFilter(t[1]);
   else x+=enc(aVal,t[1],1);
}}}
return x;}

function _chkVal(p,v){
var htwt = /^\"?\d{1,3}\%?\"?$/;
if(p=='height'||p=='width'){v=v.replace('px','');if( v.match(htwt)==null){v=v.replace(v,'0');}}
return v;}

function encFilter(s){
s=s.toLowerCase();
for(var i=0;i<aFil.length;i++)s=grep(s,aFil[i],String.fromCharCode(i+offSet));
return s+'~';}

function decFilter(s){
var i,j,x='';
for(i=0;i<s.length;i++){
 j=s.charCodeAt(i);
 if(j>(offSet-1))x+=aFil[j-offSet];
 else x+=s.charAt(i);
}
return x;}


//------------------------------------ DECODE ----------------------------------

function uncleanx(x){
var tmp;
x=decode(x);
x=grep(x,'[IMG]',' ');
x=grep(x,'[/IMG]',' ');
x=grep(x,"!&!","/"); 
tmp=x.toLowerCase();
if(_in(tmp,"expression"))x=grep(tmp,'expression','expreshion');
x=expandx(x);
return x;}


function decode(s){
if(s==null||s=='')return '';
var i,t,x,a1,a2,i1,i2,c,p,prp,is,bs;
var valid_style = /#roomz (img{display:none}|td{text-transform:(capitalize|uppercase|lowercase)(!important)?})/ig;
var find_style = /<(\/)?style(>)?/ig;
t=grep(s,' ','');
if(_in(t,'script'))return clean(grep(s,'s','$'));
s=grep(s,String.fromCharCode(offSet),'progid:');
s=decRest(s);
a1=s.split('<');
x=a1[0];
for(i1=1;i1<a1.length;i1++){
 a2=a1[i1].split('>');
 if(a2.length==1){x+='&lt;'+a1[i1];continue;}
 x+='<';
 if(a2.length>1)txt=a1[i1].substr(_ix(a1[i1],'>')+1,a1[i1].length);   
 else txt='';
 a2[0]=fixSp(1,a2[0]);
 t=a2[0]; 
 if(t.charAt(0)=='/'){
  x+='/';
  t=t.substr(1,99);
  a2[0]='';
  if(t.charAt(1)==':')x+=t;
  else x+=dec(aTag,t.charAt(0));
 }else{
  x+=dec(aTag,t.charAt(0));
  if(t.length>1){x+=' '+decParms(aPrp,t.substr(1,t.length),'=',' ');}
 }
 x+='>'+txt;
}
bs = x.match(find_style);
for(is in bs){
if(valid_style.test(x)){
var rs=x.match(valid_style);
x=x.replace(find_style,'');
x=x.replace(valid_style,'<style>'+rs+'<\/style>');
}else{
x=x.replace(find_style,'');
     }
}
return x;}

function decParms(m,t,e,d){
var i,x='',j,p,v='',v2,prp=0;
var space = /\s/g;
for(i=0;i<t.length;i++){
 c=t.charAt(i);
 if(x!=''&&x.charAt(x.length-1)==d&&c.charCodeAt(0)<offSet)prp=0;
 if(prp==0){
  if(v!=''){v2=_chkVal(p,v);if(v2!=v)x=grep(x,v,v2);}
  v='';
  if(c=='-'){x+='-';continue;}
  if(c.charCodeAt(0)<offSet){x+='?'+c;continue;}
  p=dec(m,c);
  x+=p;
  if(p=='filter'&&e==':'){
   tmp=t.substr(i+1,t.length);
   tmp=tmp.substr(0,_ix(tmp,'~'));
   x+=":"+decFilter(tmp)+';';
   i=i+tmp.length+1;
  }else{
   if(p=='style'&&e=='='){
    x+='="'+decParms(aAtt,t.substr(i+1,t.length),':',';')+'"';
    return x;
   }
   if(i<t.length-1&&t.charAt(i+1)!='-'){prp=1;x+=e;}
  }
  if(p=="title"||p=="alt")t=t.replace(space,"&nbsp;");
 }else{
  j=c.charCodeAt(0);
  if(j<offSet){
   //if(p=="src"&&c=="#")x+="?";
   //if(p=="src"&&v.length>5&&v.substring(1,5)!="http")x+="?";
   if((p=="href"&&v.length>5&&v.substring(1,5)!="http")||
      (p=="src"&&v.length>5&&v.substring(1,5)!="http")||
      (p=="background"&&v.length>8&&v.substring(0,3)=="url"&&v.substring(4,8)!="http"))
   x+="?";else x+=c;
   v+=c;
   prp=2;
   continue;
  }
  if(j>(offSet-1)&&prp==2){x+=d;i--;prp=0;continue;}
  v=dec(aVal,c);
  if(v&&_in(v.toLowerCase(),'absolute'))v='relative';
  x+=v+d;
  prp=0;
}}
if(v!=''){v2=_chkVal(p,v);if(v2!=v)x=grep(x,v,v2);}
return x;}

function encRest(s){
for(var i=0;i<aRst.length;i++)s=grep(s,aRst[i],String.fromCharCode(253-i));
return s;}

function decRest(s){
var i,j,x='';
for(i=0;i<s.length;i++){
 j=s.charCodeAt(i);
 if(j>240&&j<254){
  x+=aRst[253-j];
 }
 else x+=s.charAt(i);
}return x;}

function fixqts(s){
var i,t,a,x='';
a=s.split('"');
t=0;
for(i=0;i<a.length;i++){
 if(t){t=0;a[i]=grep(a[i],"'","");}
 else {t=1;a[i]=grep(a[i],"'",'"');}
 x+=a[i];
 if(a.length>i+1)x+='"';
}return x;}

function fixSp(d,s){
if(!s)return '';
var i,t,a;
x='';
a=s.split('"');
t=0;
for(i=0;i<a.length;i++){
 if(t){
  if(!d)a[i]=grep(a[i],' ','_$');
  else a[i]=grep(a[i],'_$',' ');
  t=0;
 }else t=1;
 x+=a[i];
 if(a.length>i+1)x+='"';
}
return x;}

function enc(a,vv,keep){
if(vv==null||vv=='')return '';
var i,k,v=vv.toLowerCase();
for(i=0;i<a.length;i++)if(a[i]==v){k=i;i=a.length;}
if(k==null){if(keep)return vv;return ' e=';}
return String.fromCharCode(k+offSet);}



function dec(m,c){return m[c.charCodeAt(0)-offSet];}
function sqsh(s,t,c){if(c==null)c=' ';while(_in(s,c+t))s=grep(s,c+t,t);while(_in(s,t+c))s=grep(s,t+c,t);return s;}


//------------------------- tokens --------------------------------------

function _tokens(){
//see 'tempxxx' 
t=',ani,img,a,b,tr,td,i,u,p,div,fieldset,blink,button,center,font,form,input,marquee,object,option,param,select,small,span,table,textarea,br,t:animate,t:animatecolor,t:animatemotion,t:transitionfilter,t:media,v:shape,v:shadow,v:fill,v:path,v:textpath,v:extrusion,t:animate,t:animatecolor,t:animatemotion,t:transitionfilter,t:media,big,tbody,strike,legend,pre,xmp,style';
aTag=t.split(',');
t=',c,brk,align,alt,background,begin,behavior,bgcolor,border,cellpadding,cellspacing,checked,tempxxx,clear,color,cols,colspan,direction,end,face,height,hspace,loop,maxlength,name,nowrap,rows,rowspan,scrollamount,scrolldelay,scrollleft,scrolltop,selected,size,src,srollheight,style,target,type,valign,value,vspace,width,href,dur,id,path,values,attributename,targetelement,autoreverse,filled,fillcolor,repeatcount,begin,coordsize,on,stroked,strokecolor,strokeweight,textpathok,fitpath,string,edge,rotation,accelerate,decelerate,mode,subtype,fill,offset,color2,rep,cnt,opacity,init';
aPrp=t.split(',');
t=',letter,x,y,z,3d,arrow,background,base,behavior,border,bottom,break,char,clear,clip,collapse,color,cursor,dark,decoration,direction,display,during,family,filter,float,font,header,height,image,indent,index,justify,left,light,line,margin,max,min,offset,outline,overflow,padding,pitch,play,position,positionx,positiony,right,scrollbar,shadow,size,space,spacing,stretch,style,table,text,align,top,transform,underline,vertical,visibility,weight,white,width,word,wrap,zoom,antialias,q,bg,dragon,resize';
aAtt=t.split(',');
t='keep!,relative,tempxxx,center,left,right,bold,red,green,blue,yellow,black,white,orange,purple,pink,verdana';
t+=iFtz+','+iFonts;
aVal=t.split(',');
tmp='progid:,dximagetransform.microsoft.,gradient,type=,startcolorstr=,endcolorstr=,glow,border,color,strength,opacity,alpha,shadow(,drop,offx,offy,positive,motionblur(,direction=,wave,matrix,basicimage';
t=tmp+','+t;
aFil=t.split(',');
//253-240  
//t='></,><,</,http:';
t='></,><,</';
aRst=t.split(',');}




//-----------------------------icons-------------------------------------
var aIcons=new Array(
"omg_smile.gif",":-O","tongue_smile.gif",":-P","wink_smile.gif",";-)","sad_smile.gif",":-(","confused_smile.gif",":-S","what_smile.gif",":-|","cry_smile.gif",":'(","red_smile.gif",":-$","shades_smile.gif","(H)`(h)","angry_smile.gif",":-@","angel_smile.gif","(A)`(a)",
"devil_smile.gif","(6)","47_47.gif",":-#","48_48.gif","8o|","49_49.gif","8-|","50_50.gif","^o)","51_51.gif",":-*","52_52.gif","+o(","71_71.gif",":^)","72_72.gif","*-)","74_74.gif","<:o)","75_75.gif","8-)","77_77.gif","|-)","coffee.gif","(C)`(c)","thumbs_up.gif","(Y)`(y)",
"thumbs_down.gif","(N)`(n)","beer_mug.gif","(B)`(b)","martini.gif","(D)`(d)","girl.gif","(X)`(x)","guy.gif","(Z)`(z)","guy_hug.gif","({)","girl_hug.gif","(})","bat.gif",":-[`:[","cake.gif","(^)","heart.gif","(L)`(l)","broken_heart.gif","(U)`(u)","kiss.gif","(K)`(k)","present.gif","(G)`(g)",
"rose.gif","(F)`(f)","wilted_rose.gif","(W)`(w)","camera.gif","(P)`(p)","film.gif","(~)","cat.gif","(@)","dog.gif","(&)","phone.gif","(T)`(t)","lightbulb.gif","(I)`(i)","note.gif","(8)","moon.gif","(S)","star.gif","(*)","envelope.gif","(E)`(e)","clock.gif","(O)`(o)","messenger.gif","(M)`(m)",
"53_53.gif","(sn)","70_70.gif","(bah)","55_55.gif","(pl)","56_56.gif","(||)","57_57.gif","(pi)","58_58.gif","(so)","59_59.gif","(au)","60_60.gif","(ap)","61_61.gif","(um)","62_62.gif","(ip)","63_63.gif","(co)","64_64.gif","(mp)","66_66.gif","(st)","73_73.gif","(li)","69_69.gif","(mo)"
);

function expandx(x){
//----- MSN smilies
var keys,j=0,a=aIcons,
img='<img src=http://messenger.msn.com/MMM2006-04-19_17.00/Resource/emoticons/';
for(var i=1;i<a.length;i=i+2){
 keys=a[i].split('`');
 if(keys[0]){while(_in(x,keys[0]))x=x.replace(keys[0],img+a[i-1]+'>');}
 if(keys[1]){while(keys.length>1&&_in(x,keys[1]))x=x.replace(keys[1],img+a[i-1]+'>');}
}
//----- MEDIA
var a,i,y,t,ix,txt='';
a=x.split(' ');
for(i=0;i<a.length;i++){
 t=a[i];
 y=t.substring(0,4);
 if(y!='http'){
  txt+=t+' ';
 }else{
  ix=_getFileType(t);
  txt+=expandu(t,ix)+' ';
}}
return txt;}



function expandu(u,ix){
var v;
switch(ix){
 case 1:
  v='<img src="'+u+'">';
  break;
 case 2:
  v='<embed src="'+u+'" autostart=true>';
  break;
 case 3:
  v='<embed src="'+u+'" autostart=true autoplay=true>';
  break;
 case 4:
  //v='<a target=_blank href="'+u+'">'+u+'</a>';
  u=u.replace("watch?v=","v/");
  v='<embed src="'+u+'&autoplay='+gAutoPlay+'" type="application/x-shockwave-flash" '+
    'wmode="transparent" width="500" height="350"></embed>';
  gAutoPlay=0;
  break;
 case 99: 
  v='<a target=_blank href="'+u+'">'+u+'</a>';
  break;
}
return v;}




//---------------------------------media----------------------------------


function _getFileType(xv,qmark){
var a,x,i,ext;
v=xv.toLowerCase();
if(v.substring(0,4)!='http')return 0;
if(!qmark){i=_ix(v,'?');if(i>-1)v=v.substr(0,i);}
a=v.split('.');
ext=a[a.length-1];
switch(ext){
case 'gif':case 'jpg':case 'jpeg':case 'png':case 'bmp':
 ix=1;break;
case 'wav':case 'au':case 'mid':case 'aif':case 'ram':case 'mp3':case 'aiff':case 'wma':case 'asf':
 ix=2;break;
case 'swf':case 'mpg':case 'mpeg':case 'm2p':case 'mp4':case 'qt':case 'vob':case 'rm':case 'avi':case 'wmv':case 'mov':case 'asx':
 ix=3;break;
default:
 ix=(_isYouTube(v))?4:99;
}
return ix;}


function _isYouTube(xv){
var x=xv.toLowerCase();
x=x.replace('/www.','/');
x=x.replace('http://','');
if(_ix(x,'youtube.com/')==0&&!_in(v,'youtube.com/watch_fullscreen'))return true;
return false;}










