Greasy Fork is available in English.

cendoldarkbb-qrfixer

darkbb-fixer (phpBB)

// ==UserScript==
// @name           cendoldarkbb-qrfixer
// @namespace      http://userscripts.org/scripts/show/101076
// @description    darkbb-fixer (phpBB) 
// @author         idx (http://userscripts.org/users/idx)
// @license        (CC) by-nc-sa 3.0
// @include        http://*.darkbb.com/*
// @match          http://*.darkbb.com/*
// @version        0.7
// @timestamp      1309373780487
// ==/UserScript==
// -!--latestupdate
//
// v0.7 - 2011-06-30
//   Improve PM send-to like kaskus forum (vBulletin)
//
// v0.6 - 2011-04-26
//   Fix failed shortcut
//
// -/!latestupdate---
(function(){
// Initialize Global Variables
var gvar=function(){};

gvar.__DEBUG__ = false;
/*
javascript:window.alert(new Date().getTime());
*/

function init(){
  
  gvar.img_path= "http://illiweb.com/fa/wysiwyg/";
  gvar.id_textarea= "text_editor_textarea";
  
  gvar.domain = location.protocol+'//'+location.host+'/';
  gvar.pathloc = location.pathname||'';
  
  gvar.search_path = '';
  
  gvar.pasangan= rSRC.getSetOf('pasangan');
  gvar.coloroptions= rSRC.getSetOf('color');
  gvar.fontoptions= rSRC.getSetOf('font');
  gvar.sizeoptions= rSRC.getSetOf('size'); 
  
  getAuth();
  // --------
  
  // let's roll
  if(gvar.auth) 
    start_Main();  
  
  if(gvar.pathloc=='/privmsg') 
    event_txta();  
}

function start_Main(){
  var par,el, vB01='vB_Editor_001';
  
  // relayout current editor
  relayout_tpl();
  
  // place global style
  GM_addGlobalStyle( rSRC.getCSS(), 'css_darkbb', true );

  if($D('#text_editor_controls'))
    $D('#text_editor_controls').innerHTML = rSRC.getTPL_qr_control();

  if(Dom.g(gvar.id_textarea))
    on('keydown',Dom.g(gvar.id_textarea),function(e){return is_keypress_pressed(e)});  
  
  // event for each element
  for(var id in gvar.pasangan){
    if(!isString(gvar.pasangan[id])) continue;

	if(el=$D(id)) switch(gvar.pasangan[id]){
	  case "Bold":case "Ital.":case "Underl.":case "Strike":case "Left":case "Center":case "Right":case "Justified":
		on('click',el,function(e){do_align_BIU(e)});
	  break;
	  
	  case "Quote":case "Code":case "Image":case "Link":case "Video":
	   on('click',el,function(e){do_btncustom(e)});
	  break;
	  case "line_break":
	   on('click',el,function(e){do_btncustom_single(e)});
	  break;
	  case "dotlist":case "numberlist":
	   on('click',el,function(e){do_btncustom_list(e)});
	  break;
	  
	  default:
	  break;
	}    
  } // end for  
  
  // event buat Other
  el = create_popup_other();  
  par = $D('popup_btn_other');
  if(par) Dom.add(el,par);
  el = $D('#btn_other');
  if(el) on('click',el,function(e){clickpick(e,'popup_btn_other_menu')});

  
  // fungsi click pick
  var clickpick = function(el,id){
    var ve=$D(id);
    ve.style.display=(ve.style.display==''?'none':'');
    if(ve.style.display!='none') try{Dom.g(id+'_dumy').focus();}catch(el){}
  };
  // event buat kolor
  par = $D(vB01+'_popup_forecolor'), el = create_popup_color();  
  if(par) Dom.add(el,par);
  el = $D('#pick_kolor');
  if(el) on('click',el,function(e){clickpick(e, vB01+'_popup_forecolor_menu');});
  
  // event buat size  
  el = create_popup_size();
  par = $D(vB01+'_popup_fontsize');
  if(par && el) Dom.add(el,par);
  el = $D('#pick_size');
  if(el) on('click',el,function(e){clickpick(e,vB01+'_popup_size_menu')});
  
  // event buat font  
  el = create_popup_font();  
  par = $D(vB01+'_popup_fontname');
  if(par) Dom.add(el,par);  
  el = $D('#pick_font');
  if(el) on('click',el,function(e){clickpick(e,vB01+'_popup_fontname_menu')});
  
  // event buat clear 
  el = $D('btn_clear');
  if(el) on('click',el,function(){vB_textarea.set('')});  
  
} // end start_main


// event multiple send PM like kaskus.us (vBulletin)
function event_txta(){
    var els = $D('//input[contains(@name,"username")]'), el, txta, leng, inp, par, Attr, tmpTxt;
    gvar.search_path = gvar.domain + 'search?mode=searchuser';
    
    // take one element & mae event for em
    if(leng = els.snapshotLength){
        inp = els.snapshotItem(0);
        par = inp.parentNode;

        // get all value of username
        tmpTxt = '';
        for(var j=0; j<leng; j++){
            inp = els.snapshotItem(j);
            if(inp.value) tmpTxt+=inp.value + ' ; ';
        }
        // recreate with textarea
        Attr={id:'send_to','tabindex':'100',dir:'ltr',name:'send_to_username','style':'width:450px!important; height:50px!important;float:left;'};
        txta = createEl('textarea',Attr, tmpTxt);        
        par.innerHTML = '';
        Dom.add(txta, par);        
        
        //  == POPUP username ==
        // create container of hidden username_list
        el = createEl('div',{id:'hidden_username_list', style:'position:absolute; left:-10000;'}, '');
        Dom.add(el, par);
        // create container popup_cont
        el = createEl('div',{style:'position:relative;'});
        par.insertBefore(el, par.firstChild);
         par = el;
        el = createEl('div',{id:'popup_cont', 'class':'vbmenu_popup',style:'overflow:hidden; margin-top:50px!important; display:none;'});
        Dom.add(el, par);
        
        // do event
        vB_dbb_AJAX_NameSuggest('username', 'send_to');
        
        // event for preview & send buttons
        els = ['btn_preview', 'btn_post'];
        for(var i=0; i<els.length; i++){
            el = $D('#'+els[i]);
            if(el)
                on('click', el, function(e){
                    e= e.target||e;
                    var vals, par = $D('#hidden_username_list'), txta=$D('#send_to'), el, Attr;
                    if(txta && par){
                        vals = txta.value.split(';');
                        for(var i=0; i<vals.length; i++){
                            Attr = {'name':'username[]', 'type':'hidden', 'value':vals[i].trim()};
                            el = createEl('input', Attr);
                            Dom.add(el, par);
                        }
                    }
                });
        }
        
    }
}


/*======================================================================*\
|| #################################################################### ||
|| # vBulletin 3.8.0
|| # ---------------------------------------------------------------- # ||
|| # Copyright ©2000-2009 Jelsoft Enterprises Ltd. All Rights Reserved. ||
|| # ---------------------------------------------------------------- # ||
|| # http://www.vbulletin.com | http://www.vbulletin.com/license.html # ||
|| #################################################################### ||
\*======================================================================*/
function vB_dbb_AJAX_NameSuggest(varname, txta_id){
    this.textobj = $D('#'+txta_id);
    this.varname = varname;
    this.fragment = "";
    this.donenames = "";
    this.selected = 0;
    this.menuopen = false;
    this.timeout = null;
    this.names = new Array();
    this.active = false;
    this.allow_multiple = true;
    this.min_chars = 2;
    
    this.popupname = 'popup_cont';
    var that = this;
    
    this.get_text = function () {
        if (this.allow_multiple) {
            var E = this.textobj.value.lastIndexOf(";");
            if (E == -1) {
                this.donenames = new String("");
                this.fragment = new String(this.textobj.value);
            } else {
                this.donenames = new String(this.textobj.value.substring(0, E + 1));
                this.fragment = new String(this.textobj.value.substring(E + 1));
            }
        } else {
            this.fragment = new String(this.textobj.value);
        }        
        this.fragment = this.fragment.trim();
    };    
    this.set_text = function (E) {
        if (this.allow_multiple) {
            this.textobj.value = (this.donenames + " " + (this.names[E]).trim() + " ; ");
        } else {
            this.textobj.value = (this.names[E]).trim();
        }
        this.textobj.focus();
        this.menu_hide();
        return false;
    };    
    this.move_row_selection = function (E) {
        var F = parseInt(this.selected, 10) + parseInt(E, 10);
        if (F < 0) {
            F = this.names.length - 1;
        } else {
            if (F >= this.names.length) {
                F = 0;
            }
        }
        this.set_row_selection(F);
        return false;
    };    
    this.set_row_selection = function (E) {
        var P=$D('#'+this.popupname), F = getTag('div',P);
        
        F[this.selected].className = "vbmenu_option";
        this.selected = E;
        F[this.selected].className = "vbmenu_hilite";
    };        
    this.key_event_handler = function (E) {
        E = E ? E : window.event;
        if (this.menuopen) {
            do_an_e(E);
            switch (E.keyCode) {
            case 38:
                this.move_row_selection(-1);
                return false;
            case 40:
                this.move_row_selection(1);
                return false;
            case 27:
                this.menu_hide();
                return false;
            case 13:
                this.set_text(this.selected);
                return false;
            }
        }        
        this.get_text();
            
        if (this.fragment.length >= this.min_chars) {
            clearTimeout(this.timeout);
            
            if( this.fragment.indexOf('*')==-1 ) this.fragment+= '*';
            var that = this;
            this.timeout = window.setTimeout(function() { that.name_search(that.fragment); }, 500);
        } else {
            this.menu_hide();
        }        
    };    
    this.menu_build = function(){
        var el, that, upto=15, tgt=$D('#'+this.popupname), that=this;
        if(tgt){            
            tgt.innerHTML = '';
            for(var i=0; i<this.names.length; i++){
                upto++;
                el = createEl('div', {'id':'mnu_el_'+i,'class':''+(i==0 ? 'vbmenu_hilite':'vbmenu_option'),'style':'text-align: left; font-size: 12px;'}, this.names[i]);
                on('click', el, function(e){
                    e=e.target||e;
                    var F=e.id.replace('mnu_el_', '');
                    that.set_text(F);
                });
                Dom.add(el, tgt);
                if(i > upto) break;
            }
            this.active = true;
            this.menu_show();
        }    
    };
    this.menu_show = function(){
        if (this.active) {
            $D('#'+this.popupname).style.display = '';
            this.menuopen = true;
        }
    };
    this.menu_hide = function(){
        var tgt=$D('#'+this.popupname);
        if(tgt){
            tgt.innerHTML = '';
            tgt.style.display = 'none';
            this.menuopen = false;
            this.selected = 0;
        }
    };
    this.name_search = function(q){
        var that = this, spost = '&search_username='+q + '&search=Search';
        GM_XHR.uri = gvar.search_path;
        GM_XHR.cached = true;
        GM_XHR.request(spost.toString(),'post', that.handle_ajax_request);
    };
    this.handle_ajax_request = function(reply_html){
        if( isUndefined(reply_html) ) return false;
        reply_html = reply_html.responseText;
       
        this.names = [];
        var ret, that=this, parser = function(S, $1){that.names.push($1)}
        ret = reply_html.replace(/>([^>]+)<\/option/gi, parser );
        this.menu_build();
    };    
    
    on('click', this.textobj, function(){
        that.menu_hide();
        that.active=true;
    });
    on('blur', this.textobj, function(){
        that.active=false; var T=this;
        window.setTimeout(function() { T.menu_hide(); }, 300);
    });
    on('focus', this.textobj, function(){that.active=true});
    on('keyup', this.textobj, function(E){that.key_event_handler(E)});
    on('keypress', this.textobj, function(E){
        E = E ? E : window.event;
        if (E.keyCode == 13) {
            return (that.menuopen ? false : true)
        }    
    });
}

// relayout, prep everything before making change
function relayout_tpl(){
  var tgt=Dom.g(gvar.id_textarea), par = tgt.parentNode, el, Attr, onc, cucok;
  var delAttr=function(o,at){
    if(isUndefined(at)) at='tabindex';
    o.removeAttribute(at);
	return o;
  };
  
  // recreate textarea to remove default event
  if(tgt) {
	gvar.isQR = $D('#quick_reply');
	var tmpTxt = tgt.value, lW=tgt.clientWidth;
	if( Dom.g(gvar.id_textarea) ) Dom.remove( Dom.g(gvar.id_textarea) );
	Attr={id:gvar.id_textarea,'tabindex':'102',dir:'ltr',name:'message',
	   'style':'width:'+(gvar.isQR?'575px':(lW-5)+'px')+'!important;'+(gvar.isQR?'height:125px!important;':'')};
	el=createEl('textarea',Attr,tmpTxt);
	par.insertBefore(el, par.firstChild);
	
    //resize textarea
    par.style.setProperty('height', '125px', 'important');
    if(gvar.isQR) par.style.setProperty('width', '580px', 'important');	
  }
  // reorder tabindex [title,txtarea,preview,post]
  el=$D('.//input[@name="subject"]',null,true);
  if(el){
	el=delAttr(el);
    el.setAttribute('tabindex','101');
  }
  
  // redesign preview and post
  el=$D('.//input[@name="preview"]',null,true);
  if(el) {
    el.title="Preview (Alt+P)";
	el.id = "btn_preview";
	el=delAttr(el);
	el.setAttribute('tabindex','103');
  }
  el=$D('.//input[@name="post"]',null,true);
  if(el) {
    el.title="Post (Ctrl+Enter or Alt+X)";
	el.id = "btn_post";
	el=delAttr(el);
	el.setAttribute('tabindex','104');
  }  
  
  // hide helpbox is available
  if(el=$D('helpbox'))
    el.style.display='none';
}

// uploader auth
function getAuth(){
  // collect uploader auth
  var el = $D('servimg'), onc=el.getAttribute('onclick').toString(), cucok;
  if(cucok=/([^\(]+).([^,]+).\s*['"]([^'"]+).,\s*['"]([^'"]+).,\s*['"]([^'"]+)/.exec(onc)){
    gvar.auth= {};
	gvar.auth.func = cucok[1];
	gvar.auth.obj = cucok[2];
	gvar.auth.email = cucok[3];
	gvar.auth.hash = cucok[4];
	gvar.auth.tid = cucok[5];
  }else{
    gvar.auth = false;
  }
}

// event for every button
function do_insertTag(tag, value){
  vB_textarea.init();
  vB_textarea.wrapValue(tag, (value ? value :null) ); // phpBB no need this: (isNaN(value)?'"':'')
}

function tTagFromAlt(e){
  var tag=e;
  if(typeof(e)=='object'){
	el=e.target||e;
    e=el;
	if(el.nodeName!='IMG'){
	  e = getTag('img',el);
	  if(e.length) e=e[0];
	}
	return e.alt;
  }else if(typeof(e)=='string'){
    return e;
  }else{
    return false;
  }
}
function do_align_BIU(e){
  var el, tag=tTagFromAlt(e);
  var pTag={
    'Bold' :'B',    'Ital.' :'I',      'Underl.':'U','Strike':'STRIKE',
    'Left' :'LEFT', 'Center' :'CENTER', 'Right'    :'RIGHT', 'Justified'    :'JUSTIFIED',
  };
  if(tag && tag.indexOf('Align ')!=-1) tag = tag.replace('Align ','');
  if(isUndefined(pTag[tag])) return;
  vB_textarea.init();
  vB_textarea.wrapValue(pTag[tag],''); 
}
function do_btncustom_list(e, nospace){
  var tag=tTagFromAlt(e), mode=(tag=='numberlist' ? 'number':'dot'), ins='1';
  //case "-List":case "Ordered List":
  // [LIST]  
  do_insertTag('LIST', (mode=='number' ? 1:null) );
  //gvar.firstRec = 1;
  vB_textarea.focus();
  reInsert();  
}
function reInsert(pass){
   var ins=prompt("Enter a list item.\nLeave the box empty or press 'Cancel' to complete the list:");
   vB_textarea.init();
   if(isUndefined(pass)) vB_textarea.setValue( '\n' );
   if(ins){    
	vB_textarea.setValue( '\n' + '[*]' + ins + '');
	reInsert(true);
   }else{
    return;	
   }
}

function do_btncustom_single(e, nospace){
  var tag=tTagFromAlt(e);
  var pTag={
    'line_break' :'HR'
  };
  vB_textarea.init();
  vB_textarea.setValue( '['+pTag[tag]+']' + (!nospace ? ' ':'') );
}
function do_btncustom(e){
  var tag=tTagFromAlt(e);  
  var tagprop = '';
  if(tag) tag=tag.replace(/[\[\]]/g,'').replace('Insert ','').toLowerCase();
 
  var pTag={
     'quote':'QUOTE','code' :'CODE'
    ,'link' :'URL',  'image':'IMG'
    ,'spoiler' :'SPOILER'
	//,'transparent':'COLOR','noparse' :'NOPARSE','youtube' :'YOUTUBE'
    ,'video' :'YOUTUBE'
  };
  var endFocus=function(){ vB_textarea.focus(); return};
  if(!tag || isUndefined(pTag[tag])) return endFocus();;
  vB_textarea.init();
  
  if(tag=='quote' || tag=='code'){
    vB_textarea.wrapValue( tag );  
  }else if(tag=='spoiler'){
  
    var title = prompt('Please enter the TITLE of your Spoiler:', gvar.settings.lastused.sptitle );
    if(title==null) return endFocus();
    title = (title ? title : ' ');
    gvar.settings.lastused.sptitle = trimStr(title);
    //setValue(KS+'LAST_SPTITLE', title);
    vB_textarea.wrapValue( 'spoiler', title );

  }else{
    var text, selected = vB_textarea.getSelectedText();
    var is_video_link = function(text){
        text = trimStr ( text ); //trim
        if( text.match(/youtube\.com\/watch\?v=[\w\d-]+/i) ){
          var rx = /youtube\.com\/watch\?v=([^&]+)/i.exec(text);
          text = ( rx ? rx[1] : '');
		  pTag['video'] = 'YOUTUBE';
        }else if( /https?:\/\/(?:w{3}\.)?dailymotion\.com\/video\/.+/.test(text) ){		  
		  pTag['video'] = 'DAILYMOTION';
        }else if(!/^[\d\w-]+$/.test(text))
          text = false;
        return text;
    };
    if(selected==''){
      switch(tag){
        case 'transparent':
          tagprop = tag;
          text = prompt('Please enter the Text to be transparent:', 'text hantu');
        break;
        case 'noparse':
          text = prompt('Please enter Text or/with Tags to be no parsed:', '[code]-CODE-[/code]');
        break;
        case 'link':
          text = prompt('Please enter the URL of your link:', 'http://');
          tagprop = text;
        break;
        case 'image':
          text = prompt('Please enter the URL of your image:', 'http://');
        break;
        case 'video':
          text = prompt('Please enter the Youtube or dailymotion URL', '');
        break;
      }
      if(text==null) return endFocus();
      if(tag=='video')
        text = is_video_link(text);
      if(tag=='link' || tag=='image')
        text = (isLink(text) ? text : null);
      if(!text) 
        return endFocus();
      else{
        var prehead = [('['+pTag[tag]+(tagprop!=''?'='+tagprop:'')+']').length, 0];
        prehead[1] = (prehead[0]+text.length);        
        vB_textarea.setValue( '['+pTag[tag]+(tagprop!=''?'='+tagprop:'')+']'+text+'[/'+pTag[tag]+']', prehead );
      }
      return endFocus();
    } // end selected==''
    
    tagprop = (tag=='transparent' ? 'transparent' : '');
    if(tag=='link'||tag=='image'||tag=='video'){
       var ptitle=(tag=='video' ? ['Please enter the Youtube or dailymotion URL','']:['Please enter the URL of your '+tag+':','http://']);
       text = prompt(ptitle[0], ptitle[1]);
       if(text==null) return endFocus();
       switch(tag){
         case 'link':
          tagprop = text;
          text = selected;           
         break;
         case 'video':
           text = is_video_link(text);
           if(!text) return endFocus();
         break;
       }       
       var prehead = [('['+pTag[tag]+(tagprop!=''?'='+tagprop:'')+']').length, 0];
       prehead[1] = (prehead[0]+text.length);
       vB_textarea.replaceSelected( '['+pTag[tag]+(tagprop!=''?'='+tagprop:'')+']'+text+'[/'+pTag[tag]+']', prehead );
       return endFocus();
    }
    vB_textarea.wrapValue( pTag[tag], (tagprop!='' ? tagprop:'') );
  }
}

function create_popup_other(){
  var el, id = 'popup_btn_other_menu', Attr, tCont;
  Attr = {id:id,'class':'vbmenu_popup',
    style:'width:130px;overflow:hidden;display:none;'
  };
  el = createEl('div',Attr);
  var pasOther= {
     'sub'    : 'Index'
    ,'sup'    : 'Exponent'
    ,'spoiler': 'Spoiler'
    ,'hide'   : 'Hidden'
    ,'scroll' : 'Horizontal scrolling'
    ,'updown' : 'Vertical scrolling'
    ,'rand'   : 'Random'
    ,'wow'    : 'Wow'
  };
  for (var tag in pasOther) {
    Attr={title:pasOther[tag],rel:tag,'class':'osize',style:'text-align:left;font-size:12px;'};
    tCont = createEl('div',Attr,pasOther[tag]);
	on('click',tCont,function(e){
	  e=e.target||e;
	  var eTag=e.getAttribute('rel');
	  var cont=Dom.g(id);
      cont.style.display='none';
	  do_insertTag(eTag);
	});
	Dom.add(tCont,el);
  }
  create_dummy_input(el, id+'_dumy');
  return el;
  
}
function create_popup_size(){
  var id = 'vB_Editor_001_popup_size_menu';
  var Attr = {id:id,'class':'vbmenu_popup',
       style:'overflow:hidden;display:none;'
    };
  var el = createEl('div',Attr);
  var tCont,prop, tFont;
  for (var tipe in gvar.sizeoptions) {
    prop = gvar.sizeoptions[tipe]; // ['', ''] = [inner, value]
    Attr={title:prop[1],'class':'osize',style:'text-align:left;'};
    tCont = createEl('div',Attr);
    tFont = createEl('font',{size:prop[0]+'pt'},tipe);
    Dom.add(tFont,tCont);
    on('click',tCont,function(e){
      e=e.target||e;
      if(e.nodeName=='FONT') e=e.parentNode;      
      var cont=Dom.g(id);
      cont.style.display='none';
      var eTitle = e.getAttribute('title');
      do_insertTag('size',eTitle);
    });
    Dom.add(tCont,el);
  }
  create_dummy_input(el, id+'_dumy');
  return el;
}
function create_popup_font(){
  var id = 'vB_Editor_001_popup_fontname_menu';
  var Attr = {id:id,'class':'vbmenu_popup',
       style:'width:200px;height:250px;overflow:auto;display:none;'
    };
  var el = createEl('div',Attr), oL=gvar.fontoptions.length;
  var tClr,tFont,font;
  for (var idx=0; idx<oL; idx++) {
    font = gvar.fontoptions[idx];
    if(!isString(font)) continue; // should do this, coz Opera lil weirdo
    Attr={'class':'ofont',title:font};
    tClr = createEl('div',Attr);
    tFont = createEl('font',{face:font},font);
    Dom.add(tFont,tClr);
    on('click',tClr,function(e){
      e=e.target||e;
      if(e.nodeName=='FONT') e=e.parentNode;      
      var cont=Dom.g(id);
      cont.style.display='none';
      var sfont = e.getAttribute('title');
      do_insertTag('font',sfont);
    });    
    Dom.add(tClr,el);
  }
  create_dummy_input(el, id+'_dumy');
  return el;
}
function create_popup_color(){
  var id = 'vB_Editor_001_popup_forecolor_menu';
  var Attr = {id:id,'class':'vbmenu_popup',
    style:'overflow:hidden;display:none;'
  };
  var el = createEl('div',Attr);
  Attr = {cellPadding:0,cellSpacing:0,border:0};
  var table = createEl('table', Attr);
  Dom.add(table,el);
  var i=0,tr,kolor,div,td;
  var pickColor = function(e){
    e=e.target||e;
    if(e.nodeName=='DIV') e=e.parentNode;
    var etitle = e.id.replace('pick_color_','');
    do_insertTag('color',etitle);
    Dom.g(id).style.display='none';
  };
  for (var hex in gvar.coloroptions) {
    if(!isString(gvar.coloroptions[hex])) continue; // should do this, coz Opera lil weirdo
    if (i % 8 == 0) 
      tr = table.insertRow(-1);
    i++;
    kolor=gvar.coloroptions[hex];
    div = createEl('div',{style:'background-color:'+kolor},'&nbsp;');
    td = tr.insertCell(-1);
    td.className = "ocolor";
    Dom.add(div,td);
    td.title = td.colorname = kolor;
    td.id = "pick_color_"+td.colorname;
    
    on('click',td,function(e){ pickColor(e) });
  }
  // last row for transparent
  tr = table.insertRow(-1);
  kolor='transparent';
  div = createEl('div',{style:'background-color:'+kolor+';width:100%;','class':'gensmall'},'transparent');
  td = tr.insertCell(-1);
  td.setAttribute("colspan",8);
  Dom.add(div,td);
  td.title = td.colorname = kolor;
  td.id = "pick_color_"+td.colorname;    
  on('click',td,function(e){ pickColor(e) });
  
  create_dummy_input(el, id+'_dumy');
  return el;
}
function create_dummy_input(parent, dumy_id){
  var dumyEl = createEl('input',{id:dumy_id,style:'width:0px;height:0px;line-height:0px;border:0px;margin-left:-999999px;',value:''});
  on('blur',dumyEl,function(ec){
	if( gvar.stillOnIt ){
        ec = ec.target||ec;
        if(ec && ec.nodeName=='INPUT') ec=ec.parentNode;
		window.setTimeout(function(){
		  delete( gvar.stillOnIt );
		  if( !gvar.stillOnIt && ec ) ec.style.setProperty('display', 'none', '');
		}, 200);
	}
  });
  on('focus',dumyEl,function(ec){gvar.stillOnIt=true});
  Dom.add(dumyEl,parent);
}

// keydown on textarea
// Ketika keydown tab dari textarea
function is_keypress_pressed(C){
  var C = (!C ? window.event : C), asocKey={};
  if(C) {
   if(C.ctrlKey){ // mijit + Ctrl
    var B, A = C.keyCode ? C.keyCode : C.charCode;
    asocKey={
	  '13':'btn_post' // Enter
	 ,'66':'Bold' // B
	 ,'73':'Ital.' // I
	 ,'85':'Underl.' // U
	 
	 ,'69':'Center' // E
	 ,'76':'Left' // L
	 ,'82':'Right' // R
	 ,'74':'Justified' // U
	};
	B = (isDefined(asocKey[A])? asocKey[A] : false);
	//alert('al;'+C + ' - ' + C.ctrlKey + ' - '+B);
	if(B===false) return false;
    if(A==13){
      if(C.shiftKey) B = 'btn_preview'; // preview
	  if(Dom.g(B)) SimulateMouse(Dom.g(B), 'click', true); 
    }else{
      do_align_BIU(B);
	}
	C = do_an_e(C);

   }else
   if(C.altKey){ // mijit + Alt
    var B='', A = C.keyCode ? C.keyCode : C.charCode;
	asocKey={
	   '83':'btn_post' // [S] Submit post
	  ,'80':'btn_preview' // [P] Preview
	};
	B = (isDefined(asocKey[A])? asocKey[A] : false);
	if(B===false) return false;
    if(Dom.g(B)) SimulateMouse(Dom.g(B), 'click', true); 
	C = do_an_e(C);
	
   }else
   if(C.keyCode==9){ // mijit tab
     C = do_an_e(C);
     if($D('#btn_preview')) $D('#btn_post').focus();
   } // end keyCode==9
   return false;
  } // end event C
}


// end event for every buttons


function isThisThread(){ return $D('#text_editor_textarea') }

//=====
// static routine
function isDefined(x)   { return !(x == null && x !== null); }
function isUndefined(x) { return x == null && x !== null; }
function isString(x) { return (typeof(x)!='object' && typeof(x)!='function'); }
function trimStr(x) { return (typeof(x)=='string' && x ? x.replace(/^\s+|\s+$/g,"") : '') };
function isLink(x) { return x.match(/((?:http(?:s|)|ftp):\/\/)(?:\w|\W)+(?:\.)(?:\w|\W)+/); }

function on(m,e,f,p){Dom.Ev(e,m,function(e){typeof(f)=='function'?f(e):void(0)},!p?false:true)}
function do_an_e(A) {
  if (!A) {
      window.event.returnValue = false;
      window.event.cancelBubble = true;
      return window.event
  } else {
      A.stopPropagation();
      A.preventDefault();
      return A
  }
}
function createEl(type, attrArray, html){
 var node = document.createElement(type);
 for (var attr in attrArray) 
   if (attrArray.hasOwnProperty(attr))
    node.setAttribute(attr, attrArray[attr]);
 if(html) node.innerHTML = html;
   return node;
}
function createTextEl(txt){
  return document.createTextNode(txt);
}
function getTag(name, parent){
  var ret = (typeof(parent)!='object' ? document.getElementsByTagName(name) : parent.getElementsByTagName(name) );
  return (isDefined(ret[0]) ? ret : false);
}
function addClass(cName, Obj){
  if(cName=="") return;
  var neocls = (Obj.className ? Obj.className : '');
  if(neocls.indexOf(cName)!=-1) return;
  neocls+=(neocls!=''?' ':'')+cName;
  Obj.setAttribute('class', neocls);
}
function removeClass(cName, Obj){
  if(cName=="") return;
  var neocls = (Obj.className ? Obj.className : '');
  neocls = trimStr ( neocls.replace(cName,"") ); // replace and trim
  Obj.setAttribute('class', neocls);
}
function SimulateMouse(elem,event,preventDef) {
  if(typeof(elem)!='object') return;
  var evObj = document.createEvent('MouseEvents');
  preventDef=(isDefined(preventDef) && preventDef ? true : false);
  evObj.initEvent(event, preventDef, true);
  try{elem.dispatchEvent(evObj);}
   catch(e){ clog('Error. elem.dispatchEvent is not function.'+e)}
}


// ----my ge-debug--------
function show_alert(msg, force) {
  if(arguments.callee.counter) { arguments.callee.counter++; } else { arguments.callee.counter=1; }
  GM_log('('+arguments.callee.counter+') '+msg);
  if(force==0) { return; }
}
function clog(msg) {
  if(!gvar.__DEBUG__) return;
  show_alert(msg);
}


//========= Global Var Init ====
var GM_addGlobalStyle=function(css, id, tobody) { // Redefine GM_addGlobalStyle with a better routine 
  var sel=createEl('style',{type:'text/css'});
  if(isDefined(id) && isString(id)) sel.setAttribute('id', id);
  sel.appendChild(createTextEl(css));
  if(isDefined(tobody) && tobody){
    document.body.insertBefore(sel,document.body.firstChild);
  }else{
    var hds = getTag('head');
    if( isDefined(hds[0]) && hds[0].nodeName=='HEAD' )
     window.setTimeout(function() { hds[0].appendChild(sel); }, 100);
    else
     document.body.insertBefore(sel,document.body.firstChild);
  }
  return sel;
};
// Get Elements
var $D=function (q, root, single) {
  if (root && typeof root == 'string') {
      root = $D(root, null, true);
      if (!root) { return null; }
  }
  if( !q ) return false;
  if ( typeof q == 'object') return q;
  root = root || document;
  if (q[0]=='/' || (q[0]=='.' && q[1]=='/')) {
      if (single) { return document.evaluate(q, root, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue; }
      return document.evaluate(q, root, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
  }
  else if (q[0]=='.') { return root.getElementsByClassName(q.substr(1)); }
  else { return root.getElementById( (q[0]=='#' ? q.substr(1):q.substr(0)) ); }
  return root.getElementsByTagName(q);
};
// utk add - remove element
var Dom = {
  g: function(el) {
   if(!el) return false;
   return ( isString(el) ? document.getElementById(el) : el );
  },
  add: function(el, dest) {    
    var el = this.g(el);
    var dest = this.g(dest);
    if(el && dest) dest.appendChild(el);
  },
  remove: function(el) {
    var el = this.g(el);
    if(el && el.parentNode)
      el.parentNode.removeChild(el);
  },
  Ev: function() {
    if (window.addEventListener) {
      return function(el, type, fn, ph) {
        if(typeof(el)=='object')
         this.g(el).addEventListener(type, function(e){fn(e);}, (isUndefined(ph) ? false : ph));
      };      
    }else if (window.attachEvent) {
      return function(el, type, fn) {
        var f = function() { fn.call(this.g(el), window.event); };
        this.g(el).attachEvent('on' + type, f);
      };
    }
  }()
};

var GM_XHR = {
  uri:null,
  returned:null,
  forceGM:false, // force with GM-XHR & avoid using Native-XHR when with multifox
  cached:false,
  events:false,
  request: function(cdata,met,callback){
    if(!GM_XHR.uri) return;
    met=(isDefined(met) && met ? met:'GET');
    cdata=(isDefined(cdata) && cdata ? cdata:null);
    if(typeof(callback)!='function') callback=null;
	var pReq_xhr = {
        method:met,
        url:GM_XHR.uri + (GM_XHR.cached ? '':(GM_XHR.uri.indexOf('?')==-1?'?':'&rnd=') + Math.random().toString().replace('0.','')),
        headers: {'Content-Type': 'application/x-www-form-urlencoded'},
        data:(isString(cdata) ? cdata : ''),
        onload: function(ret) {
          if(ret.status==503){
            show_alert('Reach 503, retrying...');
            setTimeout(GM_XHR.request(cdata,met,callback), 777);
          }else{
            var rets=ret;
            if(callback!=null)
               callback(rets);
            else
               GM_XHR.returned = rets;
          }
        }
    };	
    if( !GM_XHR.forceGM ) // always use this native; except update checker
      NAT_xmlhttpRequest( pReq_xhr );
    else
	  GM_xmlhttpRequest( pReq_xhr );
  }
};

// native/generic XHR needed for Multifox, failed using GM_xmlhttpRequest.
var NAT_xmlhttpRequest=function(obj) {
  var request=new XMLHttpRequest();
  request.onreadystatechange=function() { if(obj.onreadystatechange) { obj.onreadystatechange(request); }; if(request.readyState==4 && obj.onload) { obj.onload(request); } }
  request.onerror=function() { if(obj.onerror) { obj.onerror(request); } }
  try { request.open(obj.method,obj.url,true); } catch(e) { if(obj.onerror) { obj.onerror( {readyState:4,responseHeaders:'',responseText:'',responseXML:'',status:403,statusText:'Forbidden'} ); }; return; }
  if(obj.headers) { for(name in obj.headers) { request.setRequestHeader(name,obj.headers[name]); } }
  request.send(obj.data); return request;
};

var vB_textarea = {
  init: function(id) {
    this.Obj = (isUndefined(id) ? Dom.g(gvar.id_textarea) : Dom.g(id));
    this.content = (this.Obj ? this.Obj.value : "");
    this.cursorPos = this.rearmPos(); // [start, end]
    this.last_scrollTop = this.Obj.scrollTop; // last scrolltop pos
  },
  rearmPos: function(){ return [this.getCaretPos(), this.Obj.selectionEnd]; },
  clear: function (id){
    if(!this.Obj) this.Obj = (isUndefined(id) ? Dom.g(gvar.id_textarea) : Dom.g(id));
    this.set('');
    this.Obj.style.height='1px'; // min-height should be set before
    this.enabled();
    this.focus();
  },
  disabled: function(){ 
    this.Obj.setAttribute('disabled','disabled');
  },
  readonly: function(id){
    this.Obj = (isUndefined(id) ? Dom.g(gvar.id_textarea) : Dom.g(id));
    removeClass('txa_enable', this.Obj);
    addClass('txa_readonly', this.Obj);
    this.Obj.setAttribute('readonly',true);
  },
  enabled: function(id){
    if(!this.Obj) this.Obj = (isUndefined(id) ? Dom.g(gvar.id_textarea) : Dom.g(id));
    this.Obj.removeAttribute('disabled');
    this.Obj.removeAttribute('readonly');
    removeClass('txa_readonly', this.Obj);
    addClass('txa_enable', this.Obj);
  },
  focus: function(){
    if(!this.Obj)
      this.Obj = Dom.g(gvar.id_textarea);
    this.Obj.focus(); 
  },
  set: function(value){
    if(!this.Obj)
      this.Obj = Dom.g(gvar.id_textarea);
    this.Obj.value = this.content = value;
  },
  lastfocus: function (){
    var pos = Dom.g(gvar.id_textarea).value.length; // use the actual content
    if(this.Obj.setSelectionRange)    {
        this.focus();
        this.Obj.setSelectionRange(pos,pos);
    }
    this.focus();
  },
  add: function(text){ // used on fetch post only
   this.Obj.value+=text; this.enabled(); this.focus();
   // fix chrome weird
   var lastpos=(this.cursorPos[0] + text.length);
   this.setCaretPos( lastpos, lastpos );
  },
  subStr: function(start, end){ return this.content.substring(start, end);},
  getSelectedText : function() {    
    return (this.cursorPos[0]==this.cursorPos[1]? '': this.subStr(this.cursorPos[0], this.cursorPos[1]) );
  },
  getCaretPos : function() {
    this.enabled(); /* this.focus();*/
    var CaretPos = 0;
    //Mozilla/Firefox/Netscape 7+ support 
    if(this.Obj)
      if (this.Obj.selectionStart || this.Obj.selectionStart == '0')
        CaretPos = this.Obj.selectionStart;
    return CaretPos;
  },  
  setCaretPos : function (pos,end){
    if(isUndefined(end)) end = pos;
    if(this.Obj.setSelectionRange)    { // Firefox, Opera and Safari
        this.focus();
        this.Obj.setSelectionRange(pos,end);
    }
  },
  // ptpos stand to puretext position [start, end]
  setValue : function(text, ptpos){
    var start=this.cursorPos[0];
    var end=this.cursorPos[1];
    if(isUndefined(ptpos)) ptpos=[text.length,text.length];
    if(start!=end) {
      this.replaceSelected(text,ptpos);
      return;
    }
    var bufValue = this.subStr(0, start) + text + this.subStr(start, this.content.length);
    this.set(bufValue);
    // fix chrome weird
    this.setCaretPos( (start + ptpos[0]), (start+ptpos[1]) );
    if(vB_textarea.overflow!='hidden') this.Obj.scrollTop = (this.last_scrollTop+1);
    return bufValue; 
  },
  wrapValue : function(tag, title){
    var start=this.cursorPos[0], end=this.cursorPos[1],bufValue;
    tag = tag.toUpperCase();
    
    bufValue = this.subStr(0, start) + 
       '['+tag+(title?'='+title:'')+']' + 
        (start==end ? '' : this.subStr(start, end)) + 
       '[/'+tag+']' + this.subStr(end, this.content.length);
    
    this.set(bufValue);
    var st2 = (start + ('['+tag+(title?'='+title:'')+']').length);
    this.setCaretPos( st2, st2+this.subStr(start, end).length );    
    if(vB_textarea.overflow!='hidden') this.Obj.scrollTop = (this.last_scrollTop+1);
    return bufValue; 
  },
  replaceSelected : function(text, ptpos){
    var start=this.cursorPos[0];
    var end=this.cursorPos[1];
    if(start==end) return;    
    var bufValue = this.subStr(0, start) + text + this.subStr(end, this.content.length);
    this.set(bufValue);
    this.setCaretPos( (start + ptpos[0]), (start+ptpos[1]) );
    if(vB_textarea.overflow!='hidden') this.Obj.scrollTop = (this.last_scrollTop+1);
  },
};

var rSRC = {
  getSetOf: function(type){
   if(isUndefined(type)) return false;
   switch(type){
    case "color":
     return {
     "#000000": "Black",
     "#A0522D": "Sienna",
     "#556B2F": "DarkOliveGreen",
     "#006400": "DarkGreen",
     "#483D8B": "DarkSlateBlue",
     "#000080": "Navy",
     "#4B0082": "Indigo",
     "#2F4F4F": "DarkSlateGray",
     "#8B0000": "DarkRed",
     "#FF8C00": "DarkOrange",
     "#808000": "Olive",
     "#008000": "Green",
     "#008080": "Teal",
     "#0000FF": "Blue",
     "#708090": "SlateGray",
     "#696969": "DimGray",
     "#FF0000": "Red",
     "#F4A460": "SandyBrown",
     "#9ACD32": "YellowGreen",
     "#2E8B57": "SeaGreen",
     "#48D1CC": "MediumTurquoise",
     "#4169E1": "RoyalBlue",
     "#800080": "Purple",
     "#808080": "Gray",
     "#FF00FF": "Magenta",
     "#FFA500": "Orange",
     "#FFFF00": "Yellow",
     "#00FF00": "Lime",
     "#00FFFF": "Cyan",
     "#00BFFF": "DeepSkyBlue",
     "#9932CC": "DarkOrchid",
     "#C0C0C0": "Silver",
     "#FFC0CB": "Pink",
     "#F5DEB3": "Wheat",
     "#FFFACD": "LemonChiffon",
     "#98FB98": "PaleGreen",
     "#AFEEEE": "PaleTurquoise",
     "#ADD8E6": "LightBlue",
     "#DDA0DD": "Plum",
     "#FFFFFF": "White"
     };
    break;
    case "font":
     return ["Arial","Arial Black","Arial Narrow","Book Antiqua","Century Gothic","Comic Sans MS","Courier New","Fixedsys","Franklin Gothic Medium","Garamond","Georgia","Impact","Lucida Console","Lucida Sans Unicode","Microsoft Sans Serif","Palatino Linotype","System","Tahoma","Times New Roman","Trebuchet MS","Verdana"];
    break;
    case "size":
	 // name : [inner, value]
     return {
	   'tiny'   : ["1","7"]
	  ,'small'  : ["2","9"]
	  ,'normal' : ["3","12"]
	  ,'large'  : ["5","18"]
	  ,'huge'   : ["7","24"]
	 };
    break;
    case "pasangan":
     return {
       'addbbcode0' : 'Bold'
      ,'addbbcode2' : 'Ital.'
      ,'addbbcode4' : 'Underl.'
      ,'addbbcode34': 'Strike'
      ,'addbbcode52': 'Left'
      ,'addbbcode30': 'Center'
      ,'addbbcode32': 'Right'
      ,'addbbcode46': 'Justified'
      
      ,'addbbcode6' : 'Quote'
      ,'addbbcode8' : 'Code'
      ,'addbbcode14': 'Image'
      ,'addbbcode16': 'Link'
      ,'btn_video'  : 'Video'
   
      ,'addbbcode10':'dotlist'
      ,'addbbcode12':'numberlist'
      ,'addbbcode99':'line_break'
     };
    break;
   };
   return false;
 }

 ,getCSS: function(){
    return (''
  +'#'+gvar.id_textarea+'{min-height:'+(gvar.isQR?'125':'250')+'px}'
  +'.ofont:hover, .ocolor:hover, .osize:hover, .cdefault:hover {cursor:default!important;}'
  +'.ofont:hover, .osize:hover{border:1px solid #2085C1!important;background-color:#B0DAF2!important;}'
  +'.ofont, .osize, .ocolor {color:#000!important;background:#FFF!important;padding:1px!important;}'
  +'.ofont, .osize{border:1px solid transparent}'
  +'.ofont{text-align:left;}'
  +'div.vbmenu_popup table td {line-height:10px;width:13px!important;border:1px solid transparent;}'
  +'div.vbmenu_popup table td:hover {cursor:pointer!important;border:1px solid #2085C1;background-color:#B0DAF2;}'
  +'div.vbmenu_popup table td div {width:10px}'
  +'div.vbmenu_popup {z-index:99;position:absolute; background:#FFF; left:0; top:0; padding:3px; width:auto; height:auto; margin-top:21px!important;border:1px solid #DADADA;}'
  
  +'#text_edit button.button2{margin:0 1.5px!important}'
  +'.sepr{margin-left:1px;}'
  +'.vbmenu_option, .vbmenu_hilite{padding:1px 3px;}'
  +'.vbmenu_option:hover, .vbmenu_hilite:hover{background-color:#B0DAF2!important;color:blue;}'
  
  +'.vbmenu_option{background: #BBC7CE;color: #000000;font: 11px verdana, arial;white-space: nowrap;cursor: pointer;}'
  +'.vbmenu_hilite{background: #8A949E;color: #FFFFFF;font: 11px verdana, arial;white-space: nowrap;cursor: pointer;}'
  +''
	);
 }
 ,getTPL_qr_control: function(){
  return (''
    +'<table align="center" cellpadding="0" cellspacing="0" width="100%"><tbody><tr><td align="left"><span id="text_edit" style=""><button class="button2" type="button" id="addbbcode0" accesskey="b" title="Bold"><img title="Bold" src="'+gvar.img_path+'text_bold.png" alt="Bold"></button><button class="button2" type="button" id="addbbcode2" accesskey="i" title="Ital."><img title="Italic" src="'+gvar.img_path+'text_italic.png" alt="Ital."></button><button class="button2" type="button" id="addbbcode4" accesskey="u" title="Underline"><img title="Underl." src="'+gvar.img_path+'text_underline.png" alt="Underl."></button><button class="button2" type="button" id="addbbcode34" accesskey="x" title="Strike"><img title="Strike" src="'+gvar.img_path+'text_strikethrough.png" alt="Strike"></button>'	
	
	// [left,center,right,justified]
	+'<img src="'+gvar.img_path+'separator.png" style="vertical-align: middle;" alt="" class="sepr">'
    +'<button class="button2" type="button" id="addbbcode52" accesskey="m" title="Left"><img title="Left" src="'+gvar.img_path+'text_align_left.png" alt="Left"></button><button class="button2" type="button" id="addbbcode30" accesskey="t" title="Center"><img title="Center" src="'+gvar.img_path+'text_align_center.png" alt="Center"></button><button class="button2" type="button" id="addbbcode32" accesskey="g" title="Right"><img title="Right" src="'+gvar.img_path+'text_align_right.png" alt="Right"></button><button class="button2" type="button" id="addbbcode46" accesskey="jt" title="Justified"><img title="Justified" src="'+gvar.img_path+'text_align_justify.png" alt="Justified"></button>'
	
	
	// [list,numberlist,hr]
	+( !gvar.isQR ? ''
	 +'<img src="'+gvar.img_path+'separator.png" style="vertical-align: middle;" alt="" class="sepr">'
	 +'<button class="button2" type="button" id="addbbcode10" accesskey="l" title="dotlist"><img title="-List" src="'+gvar.img_path+'text_list_bullets.png" alt="-List"></button><button class="button2" type="button" id="addbbcode12" accesskey="o" title="Ordered List"><img title="Ordered List" src="'+gvar.img_path+'text_list_numbers.png" alt="numberlist"></button><button class="button2" type="button" id="addbbcode99" title="Insert a line break"><img title="Insert a line break" src="'+gvar.img_path+'text_horizontalrule.png" alt="line_break"></button>'
	: '')
    
	// [quote,code,table]
	+'<img src="'+gvar.img_path+'separator.png" style="vertical-align: middle;" alt="" class="sepr">'
    +'<button class="button2" type="button" id="addbbcode6" accesskey="q" title="Quote"><img title="Quote" src="'+gvar.img_path+'comments.png" alt="Quote"></button><button class="button2" type="button" id="addbbcode8" accesskey="c" title="Code"><img title="Code" src="'+gvar.img_path+'page_white_code.png" alt="Code"></button>'
	// table
	+( !gvar.isQR ? ''
	+'<button class="button2" onclick="selectWysiwyg(this,\'table_gui\')" onmouseover="helpline(\'tab\')" type="button" id="addbbcodetable" accesskey="" title="Insert a table"><img title="Insert a table" src="'+gvar.img_path+'table.png" alt="insert_table"></button>'
	:'')
    
	// [upload,image,link, flash,video]
	+'<img src="'+gvar.img_path+'separator.png" style="vertical-align: middle;" alt="" class="sepr">'
	+'<button class="button2" type="button" id="servimg" accesskey="y" title="Host an image" onclick="'+gvar.auth.func+'('+gvar.auth.obj+',\''+gvar.auth.email+'\',\''+gvar.auth.hash+'\',\''+gvar.auth.tid+'\')"><img title="Host an image" src="'+gvar.img_path+'picture_save.png" alt="hostupload"></button><button class="button2" type="button" id="addbbcode14" accesskey="p" title="Image"><img title="Image" src="'+gvar.img_path+'picture.png" alt="Image"></button><button class="button2" type="button" id="addbbcode16" accesskey="w" title="Link"><img title="Link" src="'+gvar.img_path+'link.png" alt="Link"></button>'
	+( !gvar.isQR ? ''
	 +'<button class="button2" onclick="selectWysiwyg(this,\'flash\')" onmouseover="helpline(\'fl\')" type="button" title="Flash"><img title="Flash" src="'+gvar.img_path+'page_white_flash.png" alt="Flash"></button><button id="btn_video" class="button2" type="button" title="Video"><img title="Video" src="'+gvar.img_path+'film.png" alt="Video"></button>'
	 :'')
	
    
	// [size,color,font]
	+'<img src="'+gvar.img_path+'separator.png" style="vertical-align: middle;" alt="" class="sepr">'
    +'<div class="imagebutton_color" id="vB_Editor_001_popup_fontsize" style="display:inline-block;position:relative">'
     +'<button id="pick_size" class="button2" type="button" title="Font size"><img title="Font size" src="'+gvar.img_path+'style.png" alt="Font size"></button>'
    +'</div>' // #vB_Editor_001_popup_fontsize
    +'<div class="imagebutton_color" id="vB_Editor_001_popup_forecolor" style="display:inline-block;position:relative">'
     +'<button id="pick_kolor" class="button2" type="button" title="Font color"><img src="'+gvar.img_path+'color_swatch.png" alt="Font color"></button>'
    +'</div>' // #vB_Editor_001_popup_forecolor	
    +'<div class="imagebutton_color" id="vB_Editor_001_popup_fontname" style="display:inline-block;position:relative">'
     +'<button id="pick_font" class="button2" type="button" title="Font"><img title="Font" src="'+gvar.img_path+'font.png" alt="Font"></button>'
    +'</div>' // #vB_Editor_001_popup_fontname
    
	+'<img src="'+gvar.img_path+'separator.png" style="vertical-align: middle;" alt="" class="sepr">'
    +'<div class="imagebutton_color" id="popup_btn_other" style="display:inline-block;position:relative">'
	 +'<input id="btn_other" class="button2" value="Others" style="height: 22px;" type="button">'
    +'</div>' // #btn_other
	
	+(gvar.isQR ? ''
	 +'<img src="'+gvar.img_path+'separator.png" style="vertical-align: middle;" alt="" class="sepr">'
     +'<button class="button2" style="width: 20px;" type="button" onclick="selectWysiwyg(this, \'sel_smilies\')"><img src="http://illiweb.com/fa/i/smiles/icon_smile.gif" alt=""></button>'
	 :'')
    
	+'</td>'
	+'<td align="right"><span class="gensmall"><a id="btn_clear" href="javascript:;">reset</a></span></td></tr></tbody></table>'
   +''
   );
 }
};

// -----------
if( isThisThread() ) init();
// -----------

})();
// script by ~Idx