Kaskus (vBulletin) Thread Preview - reCoded

By Idx Last update Jun 1, 2012 — Installed 160,614 times.

There are 17 previous versions of this script.

the source is over 100KB, syntax highlighting in the browser is too slow

// ==UserScript==
// @name          Kaskus Thread Preview - reCoded
// @namespace     http://userscripts.org/scripts/show/94448
// @version       1.1.4
// @dtversion     120601114
// @timestamp     1338571635221
// @description	  Preview vbuletin thread, without having to open the thread.
// @author        Indra Prasetya (http://www.socialenemy.com/)
// @moded         idx (http://userscripts.org/users/idx)
// @include       */forumdisplay.php?*
// @include       */usercp.php*
// @include       */subscription.php?*
// @include       */member.php?*
// @include       */search.php?do=finduser&u=*&starteronly=1
// @include       */search_result.php?*
// @include       *.kaskus.co.id/
// @include       *.kaskus.co.id/index.php
// @include       *.kaskus.co.id/come_inside.php
//
// -!--latestupdate
//
//  v1.1.4 - 2012-06-01
//		fix isKaskus flag uri (minor)
//
// -/!latestupdate---
// ==/UserScript==
/*
//
//  v1.1.3 - 2012-05-27
//		include domain .co.id
//
//  v1.1.2 - 2011-10-14
//    Improve minor CSS, -webkit-scrollbar
//
//  v1.1.1 - 2011-09-04
//    Improve scanBetmen with fixObfuscate2 ability
//
//  v1.1.0 - 2011-06-05
//    Fix freezed onclick menubwhjb navigation
//    Fix isOrigin (anti jebmen for vBulletin Thread Preview)
//    Fix Update Link. Thanks=[Ngentoad]
//
//
//  v1.0 - 2011-01-08
//    init recoded
*/
(function () {
// Initialize Global Variables
var gvar=function() {};

gvar.sversion = 'v' + '1.1.4';
gvar.scriptMeta = {
  timestamp: 1338571635221 // version.timestamp

 ,scriptID: 94448 // script-Id
};
/*
javascript:window.alert(new Date().getTime());
*/
//=-=-=-=--= 
//========-=-=-=-=--=========
gvar.__DEBUG__ = 0; // development debug| 
//========-=-=-=-=--=========
//=-=-=-=--=
//
OPTIONS_BOX = {
  // free set
  KEY_KTP_FIXED_PREVIEW:   ['1'] // fixed position or absolute
 ,KEY_KTP_THEN_GOTHREAD:   ['0'] // goto-thread after submit post
 
 ,KEY_KTP_UPDATES:         ['1'] // settings check update
 ,KEY_KTP_UPDATES_INTERVAL:['1'] // settings update interval, default: 1 day
 
 ,KEY_KTP_NODE_STATE:      ['#FF0000,#6B6BB6,#999999'] // node state coloring [ready, readed, invalid-thread]
 ,KEY_KTP_SCROLL_THREAD:   ['0'] // scroll to last opened-thread
 ,KEY_KTP_IMGLOAD:         ['2'] // 0:no-load, 1:load-smilies-only, 2:load-all
 ,KEY_KTP_RELOAD_AFTERSENT:['1'] // fresh reload after send reply
  
 ,KEY_KTP_SHOW_SMILE:      ['0,kecil']   // [flag,type] of autoshow_smiley
 ,KEY_KTP_LAYOUT_CONFIG:   ['']  // flag of [signature_on, template_on], 
 ,KEY_KTP_LAYOUT_SIGI:     [''] // signature layout, eg. [RIGHT]—[SIZE=1][b]QR[/b][/SIZE]™[/RIGHT]
 ,KEY_KTP_LAYOUT_TPL:      [''] // template layout, must contain: "{message}". eg. [B]{message}[/B]
 ,KEY_KTP_USE_RECAPTCHA:   ['1']   // state of using google captcha or original kaskus

 ,KEY_KTP_SCUSTOM_ALT:     ['0'] // use alt instead of thumbnail
 ,KEY_KTP_SCUSTOM_NOPARSE: ['0'] // dont parse custom smiley tag. eg. tag=babegenit. BBCODE=[[babegenit]
 ,KEY_KTP_CUSTOM_SMILEY:   [''] // custom smiley, value might be very large; limit is still unknown 

 ,KEY_KTP_LAST_UPDATE:     ['0'] // last update timestamp
};
GMSTORAGE_PATH      = 'GM_';
KEY_KTP = 'KEY_KTP_';
var _LOADING = '';


function init(){

  if(page_is_notloaded('Page is temporary not available')) show_alert('Page is not available', 0);
  
  //------------
    ApiBrowserCheck();
  //------------
  var kdomain = domainParse();  
  gvar.domain= kdomain.prot + '//' + kdomain.host + '/';
  gvar.domainstatic= kdomain.prot + '//' + kdomain.statics + '/';
  gvar.ktpKaskus = kdomain.prot + '//' + 'www.idkaskus.com/'
  
  gvar.isKaskus = /www\.kaskus\.\w+/i.test(gvar.domain);
  gvar.codename= (gvar.isKaskus ? 'Kaskus':'vBulletin') + ' Thread Preview';
  gvar.id_textarea= 'vB_Editor_001_textarea';
  _LOADING = '<div class="ktp-loading" style="display:inline-block;padding-left:15px;">loading...</div>';
  
  gvar.zIndex = 99997; // one level above KFTI
  gvar.offsetTop= -35; // buat scroll offset
  gvar.offsetMaxHeight= 155; // buat maxHeight adjust
   // min-height postbit assumed with OR w/o quote per singleline, [{adaQuote}, {ga_adaQuote}]
  gvar.offSet_SiGi= [5, 8];
  gvar.LastScrollTop = 0;
  
  gvar.meta_refresh = null;
  gvar.fixed_ktfi = false;
  gvar.isVBul4 = false;  
  
  gvar.user= tTRIT.getUserId(); // all about logged is user: {id:'',name:'',isDonat:[1,0]}
  gvar.settings = {};
  getSettings();
  //gvar.offsetLayer= (gvar.fixed_ktfi ? 38 : 20); // buat margin top Layer
  gvar.offsetLayer= 5; // buat margin top Layer
  
  gvar.B= rSRC.getSetOf('button');
  gvar.TS= {}; // all about TS: {id:'',name:'',tid:'',pid:'',urifetch:''}
  gvar.LPOST= {}; // all about LASTPOST: {id:'',name:'',pid:'',urifetch:''}  
  gvar.current= {}; // {cImg:'',cEmote:'',cSPL:'',content:'',isLastPost:'',QR_isLoaded:'',TRIT_isClosed:''}
  gvar.loc= location.href;

  GM_addGlobalStyle( rSRC.getCSS() );
  GM_addGlobalStyle( rSRC.getCSS_fixed(gvar.settings.fixed_preview), 'xcss_position', 1 ); // to body for css-fixed
  
  if( gvar.settings.recaptcha )
    GM_addGlobalScript('http:\/\/www.google.com\/recaptcha\/api\/js\/recaptcha_ajax\.js');
  else
    GM_addGlobalScript(gvar.domain + 'clientscript\/vbulletin_ajax_imagereg\.js?v=380');
  
  GM_addGlobalScript('','kaskus_capcay_trigger', true); // blank for trigger kaskus capcay
  GM_addGlobalScript( rSRC.getSCRIPT() );

  //-----Let's Roll-------
    start_Main();
  //----------------------
  if(!gvar.noCrossDomain && gvar.settings.updates)
    window.setTimeout(function(){ Updater.check(); }, 5000);
  
} // end-init
// populate settings value
function getSettings(){
  /** 
  eg. gvar.settings.fixed_preview
  */  
//  var hVal,hdc;
  gvar.settings = {
     fixed_preview:    (getValue(KEY_KTP+'FIXED_PREVIEW')=='1') // boolean
    ,then_goto_thread: (getValue(KEY_KTP+'THEN_GOTHREAD')=='1') // boolean
	
	//UPDATES UPDATES_INTERVAL
    ,updates: (getValue(KEY_KTP+'UPDATES')=='1') // boolean
    ,updates_interval: (getValue(KEY_KTP+'UPDATES_INTERVAL')) // int
    ,imgload: ( getValue(KEY_KTP + 'IMGLOAD') ) // [0,1,2]
    ,thread_lastscroll:(getValue(KEY_KTP+'SCROLL_THREAD')=='1') // boolean
    ,reload_aftersent: ( getValue(KEY_KTP + 'RELOAD_AFTERSENT')=='1' ) // boolean
	
	// QR
    ,scustom_alt: ( getValue(KEY_KTP + 'SCUSTOM_ALT')=='1' ) // boolean
    ,scustom_noparse: ( getValue(KEY_KTP + 'SCUSTOM_NOPARSE')=='1' ) // boolean
	,userLayout: {
       config: [], //[[1,0], [1,0]] [signature_on, template_on]    
       signature:getValue(KEY_KTP+'LAYOUT_SIGI'),
       template: getValue(KEY_KTP+'LAYOUT_TPL'),
    }
    // pick between capcay google or original kaskus 
    // conform capcay mode will be performed
    ,recaptcha: ( getValue(KEY_KTP + 'USE_RECAPTCHA')=='1' )
  };  
  //gvar.settings.recaptcha = false;
  
  //get layout config
  hVal=tSTORAGE.getValueForId(gvar.user.id, 'LAYOUT_CONFIG');
  if(!hVal) hVal = ['', '0,0'];
  gvar.settings.userLayout.config = hVal[1].split(',');
  
  hVal=tSTORAGE.getValueForId(gvar.user.id, 'LAYOUT_SIGI', ['<!>','::']);
  if(!hVal) hVal = ['', '[RIGHT]&#8212;[SIZE=1][b]QR[/b][/SIZE]&#8482;[/RIGHT]'];
  gvar.settings.userLayout.signature = decodeURIComponent(hVal[1]).replace(/\\([\!\:])/g, "$1");
  
  hVal=tSTORAGE.getValueForId(gvar.user.id, 'LAYOUT_TPL', ['<!>','::']);
  if(!hVal) hVal = ['', '[B]{message}[/B]'];  
  gvar.settings.userLayout.template = decodeURIComponent(hVal[1]).replace(/\\([\!\:])/g, "$1");

  // recheck updates interval
  hVal=gvar.settings.updates_interval;
  hVal=(isNaN(hVal)||hVal <= 0 ? 1 : (hVal > 99 ? 99 : hVal) );

  //SHOW_SMILE, autoload_smiley
  hVal=getValue(KEY_KTP+'SHOW_SMILE');
  gvar.settings.autoload_smiley=(!hVal.match(/^([01]{1}),(kecil|besar|custom)+/) ? ['0','kecil'] : hVal.split(',') );  

  //NODE_STATE gvar.color_state 
  hVal=getValue(KEY_KTP+'NODE_STATE');
  gvar.settings.color_state=(!hVal.match(/^(?:\#[0-9A-F]+|\w+)\,*/i) ? ['#FF0000','#6B6BB6','#999999'] : hVal.split(',') );  

  hVal = findHighestZIndex("*");
  if(hVal > gvar.zIndex) gvar.zIndex = (hVal+1);
  
  // check if kfti do sumthin like fixed itself	
  //chk_kfti_pos();
}
// end getSettings

// main starter
function start_Main(){
  // prep recreate clone meta-refresh | it will be killed/re-add when popup showed up
  var head = getTag('head');
  if( isDefined(head[0]) ) {
    nodes = $D("//meta[@http-equiv='refresh']", null, true);
	if(nodes) Dom.remove(nodes);
    gvar.meta_refresh = createEl('meta', {id:'meta_refresh',content:'600','http-equiv':'refresh'});
	head[0].appendChild( gvar.meta_refresh.cloneNode(true) );
	//Dom.add(gvar.meta_refresh, head[0]);
  }
  
  tTRIT.init();
  
} // end start_Main


// main Object

var LINK = {
  getTID: function(link){
    var cucok = link.match(/\.php\?t=(\d+)/im);
    return (cucok ? cucok[1] : false);
  }
 ,getPID: function(link){
    //showthread.php?p=340941629#post340941629   >>=become=>>   showpost.php?p=340941629
    var cucok = link.match(/\.php\?p=(\d+)/im);
    return (cucok ? cucok[1] : false);
  }
 ,fixDomain: function(link){
	var rx, incdom = gvar.domain.replace(/\w{3}\./,'')
	rx = new RegExp(incdom + '.+', '');
	if( link.match(rx) )
		return link.replace(/\:\/\//,'://www.');
  }
};

var tTRIT = {
  init: function(){
	var nodes, lnodes, node, href, tid, pid, par, Attr, el;
	
	var shiftedLeft = 'vertical-align:top;margin:0 5px 0 -18px;position:relative;';
	var styles = ['font-size:10px;'+shiftedLeft, 'font-size:10px;', 'font-size:12px;'+shiftedLeft];
	// we're givin properties at every places which has diff behaviour depend on its parent
	var areas_home = {
	     'navforumisi': {style:styles[0],pos:'first',parentLevel:2} // HT
	    ,'LingBawah': {style:styles[0],pos:'first',parentLevel:1} // Terkini / FJB | forumdisplay.php
	    ,'Conhomemidd': {style:styles[1],pos:'last',parentLevel:1} // LKL ; Lounge
	    ,'tabcontentcontainer': {style:styles[1],pos:'last',parentLevel:1} // FJB
	    ,'navigation': {style:styles[1],pos:'last',parentLevel:1} // beside hot-threads
		
	};
	var areas_forum = {
	     'tblForumBits': {style:'',pos:2,parentLevel:1} // @ forumdisplay.php
		,'LingBawah': {style:styles[0],pos:'first',parentLevel:1} // Terkini / FJB | forumdisplay.php
	};
	var areas_search = {
	   'searchResult': {style:styles[2],pos:'first',parentLevel:1} // search_result
	};
	var even_node = function(areas, field){
		var par, node, nodes, tid; // local var
		par = (field==='searchResult' ? document.body : $D('#'+field) );
		if( !par || isUndefined(areas[field]) ) return;
		
	    nodes = $D(".//a[contains(@href,'showthread.php?')]", par);
	    if(par && nodes.snapshotLength > 0){
	     for(var i=0, lg=nodes.snapshotLength; i<lg; i++) {
	      node = nodes.snapshotItem(i);
		  //fixDomain| add missing www.
		  if(field=='navigation')
		    node.href = LINK.fixDomain(node.href)
		  tid = LINK.getTID(node.href);
		  
	      Attr = {id:'remoteTID_'+tid,'class':'thread_preview',style:areas[field].style, rel:node.href,title:'Preview First Post'};
	      el = createEl('span',Attr,'[+]');
	      par = node.parentNode; // parenting level
		  if(areas[field].parentLevel==2)
		    par = par.parentNode;
	      
		  if(par.nodeName=='LI')
		    par.style.setProperty('list-style-type','none','');
		  
		  if(areas[field].pos=='first'){
		    par.insertBefore(el, par.firstChild);
		  }else if(!isNaN(areas[field].pos) ){
			par.insertBefore(el, par.childNodes[areas[field].pos] );
		  }else{
		    Dom.add(el, par);
		  }
		  // attach event-click
	      on('click',el,function(e){ tTRIT.clickNode(e); }); // end click event
	     }
	    }
	}; // end even_node

	var curpage = '/' + basename(gvar.loc, null, "\\?");
	clog('curpage='+curpage);
	switch(curpage){
	  case "/": case "/index.php": case "/come_inside.php":
	    clog('home');		
	     // Kaskus Home --
	    for(var field in areas_home)
	       even_node(areas_home, field);
	    
	    // menubwhjb | retrigger even_node after ajax done fetch links
	    par = $D('#menubwhjb');
	    nodes = $D(".//div[contains(@onclick,'getJBData')]", par);
	    if(par && nodes.snapshotLength > 0){
	      for(var i=0, lg=nodes.snapshotLength; i<lg; i++) {
	        node = nodes.snapshotItem(i);
	   	    // attach event-click
	        on('click', node, function(e){
	   	      if(gvar.sTryWaitLoader) clearInterval(gvar.sTryWaitLoader);
              gvar.sTryWaitLoader = window.setInterval(function() {
	   	        var loader = $D('#loaderani');
	   	    	if(loader && loader.style.display=='none'){
	   	    	  clearInterval(gvar.sTryWaitLoader);
	   	    	  even_node(areas_home, 'tabcontentcontainer');
	   	    	}else{
                  if($D('#hideshow'))
                    tPOP.closeLayerBox();
                }
	   	      }, 100);
	   	    }); // end click event
	      }
	    }
	  break;
	  
	  case "/member.php":
	    clog('member');
	    par = $D('#collapseobj_stats');
	    lnodes = $D(".//a[contains(@href,'showthread.php?')]", par, 1);
	    if(lnodes){
	      pid = LINK.getPID(lnodes.href);
		  Attr = {id:'remotePID_'+pid,'class':'thread_preview lastpost',style:'',rel:'showpost.php?p='+pid,title:'Preview Last Post'};
	    	el = createEl('span',Attr,'[+]');
	    	Dom.add(el, lnodes.parentNode);
		  // attach event-click
	      on('click', el, function(e){ tTRIT.clickNode(e); }); // end click event
	    }
	  break;
	  
	  case "/search_result.php":
	    clog('search_result');
	    even_node(areas_search, 'searchResult');
	  break;
	  
	  default:
	    // common location eg. forumdisplay; usercp
	    clog('default');
		
        // append icon [+] on all thread & lastpost link
        nodes = $D("//a[starts-with(@id,'thread_title')]");
        if(nodes.snapshotLength > 0){
         for(var i=0, lg=nodes.snapshotLength; i<lg; i++) {
          node = nodes.snapshotItem(i);
	      tid = LINK.getTID(node.href);
	      Attr = {id:'remoteTID_'+tid,'class':'thread_preview',style:'',rel:node.href,title:'Preview First Post'};
	      el = createEl('span',Attr,'[+]');
	      par = node.parentNode; // parent of cont (DIV)
	      par.insertBefore(el, par.firstChild);
	      // attach event-click
	      on('click', el, function(e){ tTRIT.clickNode(e); }); // end click event
	      
	      // lastpost nodes (single node)
	      lnodes = $D(".//a[contains(@href,'#p') and contains(@href,'?p=')]", nodes.snapshotItem(i).parentNode.parentNode.parentNode, true);
	      if(lnodes){
	          pid = LINK.getPID(lnodes.href);
	    	  Attr = {id:'remotePID_'+pid,'class':'thread_preview lastpost',style:'display:inline-block;',rel:'showpost.php?p='+pid,title:'Preview Last Post'};
	    	  el = createEl('span',Attr,'[+]');
	    	  Dom.add(el, lnodes.parentNode);
	        // attach event-click
	        on('click', el, function(e){ tTRIT.clickNode(e); }); // end click event
	      }
	     } // end-for
	    } // end-if
		
	    if( curpage== "/forumdisplay.php" ){
		  clog(curpage);
	       even_node(areas_forum, 'LingBawah');
	       even_node(areas_forum, 'tblForumBits');
	    }
	  break;
	} // end switch
	

	// event buat window
	on('keydown', window.document, function(e) { return tTRIT.is_keydown_ondocument(e); });
    
    if( !gvar.user.isDonatur && !gvar.settings.recaptcha ){
      // place kaskus capcay controller container
      el = createEl('div',{id:"capcay_container",style:"position:relative; display:none;"});    
      Dom.add(el, document.body);	
    }
	
  } // end tTRIT.init()
 ,collectRowInfo: function(e){
    var task = (e.getAttribute('class') && e.getAttribute('class').indexOf('lastpost')!=-1 ? 'lastpost' : 'firstpost');
	var trInner, inner, ret, cucok, isLast; 
	gvar.current.TRIT_isClosed = false;
	isLast = gvar.current.isLastPost = (task=='lastpost');
    trInner = gvar.current.cRow = tTRIT.findCurrentRow(e);
	if(!gvar.current.cRow) gvar.current.cRow = e.id;
	if(!trInner) trInner = e.parentNode;
	if(trInner.innerHTML.indexOf('member.php')==-1) trInner=trInner.parentNode;
	trInner = trInner.innerHTML;

    if(isLast){ // find its parent (TR)

      gvar.TS.tid = LINK.getTID(trInner);
      inner = e.parentNode.innerHTML;
    }else{
      gvar.TS.tid = LINK.getTID( e.getAttribute('rel') );
      inner = trInner;
    }
	// buat action form
	gvar.current.action = 'newreply.php?do=postreply&t='+gvar.TS.tid;
	gvar.current.tofetch = e.getAttribute('rel');
	
	// nyari TS.id & TS.name
	cucok = trInner.match(/member\.php\?u=(\d+)[^>]+.([^<]+).\//im);
	gvar.TS.id = (cucok ? cucok[1]:null); gvar.TS.name = (cucok ? cucok[2]:null);
	gvar.TS.pid = null; // ntar aj nyarinya.. abis fetch
	
	// nyari LPOST, actualy needed only on lastpost
	cucok = inner.match(/by\s*<[^>]+.([^<]+).\/a>/im);	
	gvar.LPOST = (cucok ? {id:'#', name:cucok[1]} : {id:null,name:null} ); // # dulu id-nya
	cucok = inner.match(/id=[\'\"]remotePID_(\d+)/m);
	gvar.LPOST.pid = (cucok ? cucok[1] : null);
	
	clog('TS.id:'+gvar.TS.id+'; TS.name:'+gvar.TS.name+'; TS.tid:'+gvar.TS.tid+'; TS.pid:'+gvar.TS.pid+'; ');
	clog('LPOST.id:'+gvar.LPOST.id+'; LPOST.name:'+gvar.LPOST.name+'; LPOST.pid:'+gvar.LPOST.pid+'; ');
	
 }
 ,findCurrentRow: function(e){
    var par = null;
	if(typeof(e)=='object'){
	  var maxJump= 5, i= 0, blinkArea=['forumdisplay','usercp','subscription'];
	  var isBlinkArea = function(L){
	    var r=false;
		for(var i=0;i<blinkArea.length;i++){
		  if(L.indexOf('/'+blinkArea[i]+'.php') != -1){ r=true; break;}
		}
		return r;
	  };
	  par = e.parentNode;	  
	  // abort find curent row object on several conditions
	  if( !isBlinkArea(gvar.loc) || par.nodeName=='LI' )
		return null;	  
	  while(i < maxJump && par.nodeName!='TR'){
		par = par.parentNode; i++;
	  }
	  par = (par.nodeName!='TR' ? null : par);
	}
	clog('findCurrentRow='+par)
	return par;
  }
 ,is_keydown_ondocument: function(e){
    var C = (!e ? window.event : e);
    var pressedCSA = (C.ctrlKey ? '1':'0')+','+(C.shiftKey ? '1':'0')+','+(C.altKey ? '1':'0');
    var A = C.keyCode ? C.keyCode : C.charCode;
    
    // without pressedCSA or just Shift | there's no hideshow layer ? forget it
    if( (pressedCSA=='0,0,0' || pressedCSA=='0,1,0') && !$D('#hideshow') )
      return;
    
    if(A===27){
	  if( !tQR.isLoaded() || (Dom.g(gvar.id_textarea) && Dom.g(gvar.id_textarea).value == '') ){
        tPOP.closeLayerBox('hideshow');
	  }else{
	    var yakin = confirm('Discard content text on Quick-Reply?');
		if(yakin)
		  tPOP.closeLayerBox('hideshow');
	  }
    }
  }
 ,is_closed_thread: function(text){ // text-mode
    // find first href with noquote OR 
    // there is a username textbox vBull4:
	return ( 
     text.match(/[\'\"]\s*alt=[\'\"]Closed\s*Thread[\'\"]/i) || /* vBul 3.6.8 closed thread */ /<input\s*(?:(?:type|class|id|size|accesskey|tabindex|value|style)=[\'\"][^\'\"]+[\'\"]\s*)*name=[\'\"]vb_login_username/i.test(text) || /* vBul 4 not login yet*/
     !gvar.isKaskus
    );
  }
 ,clickNode: function(e){
    e = e.target||e;	
	if($D('#hideshow')) {
	  gvar.LastScrollTop = getCurrentYPos();	  
	  if( typeof(gvar.current.cRow)!='string' ) removeClass('selected_row', gvar.current.cRow);
	  gvar.current = {};
	  tPOP.closeLayerBox('hideshow');
	  if($D('#prev_loader')) $D('#prev_loader').parentNode.innerHTML = '[+]';
	}
	if(gvar.sITryBlinkRow && typeof(gvar.current.cRow)==='string' ){
	    clearTimeout(gvar.sITryBlinkRow);
		if($D(gvar.current.cRow)) $D(gvar.current.cRow).innerHTML = '[+]';
	}
	tPOP.imediateStop(); // make sure blinking is stop at all
	
	// reset this current
	gvar.current= {};
	
	if( isUndefined(e.getAttribute('rel')) ) return;
	// kill the meta
	if($D('#meta_refresh')) Dom.remove($D('#meta_refresh'));
	
	tTRIT.collectRowInfo(e);

	e.innerHTML = '<div id="prev_loader" class="ktp-loading" style="border:0px solid #000;display:inline-block;'+(gvar.current.isLastPost ? (gvar.isOpera ? 'margin:-8px 2px 0 4px;':'margin:1px 2px 0 4px;'):'margin:1px 1px '+(gvar.current.isLastPost?'2px':'4px')+' 4px!important;')+'"></div>';
	
	
	// re-syncroning from storage avoid changed value when qr-click
	gvar.settings.fixed_preview = (getValue(KEY_KTP+'FIXED_PREVIEW')=='1');
	if(Dom.g('xcss_position')) Dom.g('xcss_position').innerHTML = rSRC.getCSS_fixed( gvar.settings.fixed_preview );
	
	// pre-check kfti position, walau udah di setting, this one is per-click.
	// user might resize / change the state of kfti
	//chk_kfti_pos();
	
	// fetching thread
	tTRIT.fetch();
  }
 
 ,fetch: function(){
    getFetch(gvar.current.tofetch, tTRIT.fetch_cb);
  }  
 ,is_fetch_expire: function(){
	var caller_id = (gvar.current.isLastPost ? 'remotePID_'+gvar.LPOST.pid : 'remoteTID_'+gvar.TS.tid);
    return ( !$D('#' + caller_id) );
  }
 ,fetch_cb: function(reply_html){
    // callback of fetch progress
	var caller = ($D('#prev_loader') ? $D('#prev_loader').parentNode : null);
	// tahap-1 yg bikin failed
	if( !reply_html || !caller ) tTRIT.fetch_failed('t1');
	
	reply_html = reply_html.responseText;
    var rets = tTRIT.parse_preview(reply_html);	
	
	if(gvar.isVBul4) {
		gvar.offsetMaxHeight = 125;
		if(Dom.g('xcss_position')) 
			Dom.g('xcss_position').innerHTML = rSRC.getCSS_fixed( gvar.settings.fixed_preview );
	}

	clog(gvar.current.tofetch);
	
	if(rets===null){
	  if(caller) {
	    caller.innerHTML = '<blink title="">[X]</blink>';
		caller.setAttribute('title', 'Page not Loaded');
	    window.setTimeout(function() { caller.innerHTML='[+]';}, 3500);
	  }
	  tTRIT.fetch_failed('t2, ' + 'Thread Not Loaded, might be `kepenuhan`'); // end of story
	  return;
	}else if(!rets){
	  if(caller) {
	    caller.innerHTML = '[-]';
		caller.setAttribute('title', 'Invalid Thread');
		removeClass('thread_preview', caller);
	    addClass('thread_preview-invalid', caller);
	  }
	  tTRIT.fetch_failed('invalid-thread'); // end of story
	  return;
	}
	
	// tahap-3 yg bikin failed
	if( tTRIT.is_fetch_expire() ) tTRIT.fetch_failed('t3');	
	
	// done let's restore loader
	if( caller ) tTRIT.fetch_done(caller);	
	
	// ready to next step
	gvar.current.newreply = rets.newreply;
    gvar.current.content= rets.content;
	
	// now tPOP object is starting..
	tPOP.init(rets);
	
  }
 ,fetch_failed: function(msg){
	clog('Fetch Failed::' + msg);	  
	return false;
  }
 ,fetch_done: function(caller){
	if(caller){
	 caller.innerHTML = '[+]';
	 addClass('thread_preview-readed', caller);
	 if(!isString(gvar.current.cRow)) addClass('selected_row', gvar.current.cRow);
	}
  }

 ,fixObfuscate2: function(text){
	/*
	# snippet from Kaskus Fix-ObfuscatorII
	# version:	0.7.12
	# src:		http://userscripts.org/scripts/show/90164
	# svn:		http://goo.gl/6scmO
	# author:	hermawanadhis
	*/
	var replacements, thenodes, node, s, regex={};
	var temp = createEl('div', {style:"display:none;"}, text);
	
	// You can customize the script by adding new pairs of words.
	// First, let's build the "obfuscated":"de-obfuscated" words list
	// To prevent inadvertently using some regexp control modifiers,
	// prepend symbols (i.e. non-alphanumerics) with two backslashes ( i.e. \\ )
	replacements = {
		"kimpoi": "kawin",
		"krack": "crack",
		"paypai": "paypal",
		"pocongk+": "pocong",
		"indo\\*web\\*ster\\.\\.":"indowebster",
		"\\*Forbidden\\*": ".co.cc",
	};
	
	// reusable func to perform & manipulating in wildcard links or data value 
	var fixme = function(s){
		for (key in replacements) 
			s = s.replace(regex[key], replacements[key]);
			
		if( /\w{1}\*\w{1}/.test(s) )
			s = s.replace(/(\w{1})\*(\w{1})/g, function(S,$1,$2){return (!$1 || !$2 ? S : ''+$1+$2)} );
			
		if( /\w{3,}\.{2,}(?:com|net|in|to|ly)\b/i.test(s) )        
			s = s.replace(/\.{2,}(com|net|in|to|ly)\b/g, '.$1' );
		return s;
	};
	for (key in replacements) 
		regex[key] = new RegExp(key, 'gi');
		
	// Now, retrieve the text nodes. default: //body//text()
	//thenodes = document.evaluate('//text()', temp, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null);
	thenodes = $D('.//text()', temp);
	
	// Perform a replacement over all the nodes
	for (var i = 0; i < thenodes.snapshotLength; i++) {
		node = thenodes.snapshotItem(i);
		s = node.data;
		if(!s || s.length<5 || !s.match(/[a-z0-9\.]/i) ) continue; // pre-check
		s = fixme( s );
		node.data = s;
	}
	
	// Now, retrieve the A nodes. default: //a
	// Optimized, we just need all this specified href links
	thenodes = $D('.//a[contains(@href,"http\:\/\/") and not(contains(@href,"\.kaskus\.co\.id")) and not(contains(@href,"\.kaskusnetworks\.com\/"))]', temp);
	
	// Finally, perform a replacement over all A nodes
	for (var i = 0; i < thenodes.snapshotLength; i++) {
		node = thenodes.snapshotItem(i);
		// Here's the key! We must replace the "href" instead of the "data"
		s = fixme( decodeURI( node.href ) );
		node.href = s;
	}
	// --end fix-obfuscate
	
	
	var isBatman = function(inner){
		return (inner.match(/<input\s*(?:(?:value|style|type)=[\'\"][^\'\"]+[\'\"]\s*)*onclick=[\'\"]/i));
	}, 
	newHref = function(href){
		var a = createEl('span', { 'rel':href, 'class':'smallfont','style':'color:red; cursor:pointer; margin-left:10px;', 'onclick':'var nW = window.open(this.getAttribute(\'rel\'), \'_blank\');nW.focus();return false;'}, 'Hidden Link &gt;&gt; '+href );
		return a; 
	};
	thenodes = $D('.//a', temp);
	if(thenodes.snapshotLength >0 ) for (var j = 0; j < thenodes.snapshotLength; j++) {
		node = thenodes.snapshotItem(j);
		if(node.innerHTML.indexOf(' onclick="')!=-1 && isBatman(node.innerHTML)){
			
			var inps, inerDiv=node.getElementsByTagName('div');
			if(inerDiv){
				inps = inerDiv[0].getElementsByTagName('input');
				if(inps.length)
					inps[0].parentNode.appendChild( newHref(node.href) );
			}
			node.removeAttribute('href');
		}else if(/^https?\:\/\/.+(\.\.\.).+/.test(node.innerHTML)){ // full linkify
			node.innerHTML = decodeURI(node.href);
		}
	}
	return (temp.innerHTML).toString(); 
 }
 ,parse_preview: function(text){
   var isVBul4 = function(itext){
       return (itext.indexOf('postbody')!=-1);
   };
   
   // sumthin like kepenuhan
   if(text.indexOf('td_post_')==-1) {
     if(text.indexOf('>Invalid Thread')!=-1){
	   return false; // thread is deleted or invalid
	 }else{
	   if(!isVBul4) return null; // page not loaded and it's not vBul4, maybe..
	   gvar.isVBul4 = true;
	 }
   }
   
   var dSpliter = (gvar.isVBul4 ? 'postbody':'td_post_');
   var cucok, wraper, poss, _ret, _tit, _nr;
   /*content*/
   _ret = text.split(dSpliter);
   _ret = _ret[1];
   
   wraper = (gvar.isVBul4 ? ['<div class="postrow','<div class="cleardiv"></div>'] : ['>', '<!-- / message -->']);
   poss = [_ret.indexOf(wraper[0]), _ret.indexOf(wraper[1])];
   if(!gvar.isVBul4) poss[0]=poss[0]+wraper[0].length;
   _ret = _ret.substring(poss[0], poss[1]);
   
   // a lil hack to strip this.innerText = '', which bring error on GC.
   _ret = _ret.replace(/<input(?:.*)onclick=\"(?:(?:[^;]+).\s*(this\.innerText\s*=\s*'';\s*)(?:[^;]+).(?:[^;]+).\s*(this\.innerText\s*=\s*'';\s*))[^\>]+./gim, function(str,$1,$2){ return( str.replace($1,'').replace($2,'') ) });
   
   // simple anti-batman-trap
   //_ret = tTRIT.scanBetmen(_ret);   
   _ret = tTRIT.fixObfuscate2(_ret);   
   _ret = tTRIT.parse_image(_ret);
   
   /*title*/
   cucok = text.match(/<title>(.+)<\/title>/);
   if(cucok) {
     _tit = cucok[1].replace(/\s*\-\s*Kaskus\s*\-\s*The Largest Indonesian Community/,"").trim();
     // step-two if it's single post
	 if(gvar.current.isLastPost){
	    _tit = _tit.replace(/^[^(?:P)]+.ost\s*\-\s*/,"").trim();
		cucok = text.match(/name[\'\"]\s*href=[\'\"][^\?]+.u=(\d+)[^\>]+.([^\<]+).\/a>/im);
		if(cucok){
		   gvar.LPOST.id = cucok[1];
		   gvar.LPOST.name = cucok[2];
		}
	 }else{
	    // store pid of TS
		cucok = text.match(/newreply\.php\?do=newreply([^\"\']+)/im);
		if(cucok) {
		  cucok = cucok[1].replace(/\&amp;/gi,'&').replace(/\&noquote=1/gi,'').replace(/\&/,'.php?');
		  gvar.TS.pid = (cucok ? LINK.getPID( cucok ) : false);
		}
		// updating user.is & user.name
		cucok = text.match(/ass=[\"\']bigusername[\'\"]\s*[^\?]+.u=(\d+).>(.+)<\/a>/i);
		if(cucok){
		   gvar.TS.id = cucok[1];
		   // for pejabat kaskus|strip coloring username
           var cl_Name=cucok[2];
           // clean TS.name if it's contain tag
           if(cl_Name && cl_Name.indexOf('"')!=-1){
             cucok = cl_Name.match(/<[^\>]+>([^<]+)<\//);
             if(cucok) cl_Name = cucok[1];
           }
		   gvar.TS.name = cl_Name;
		}
	 }
	 gvar.current.TRIT_isClosed = tTRIT.is_closed_thread(text);
	 
	 clog('(after) TS.id:'+gvar.TS.id+'; TS.name:'+gvar.TS.name+'; TS.tid:'+gvar.TS.tid+'; TS.pid:'+gvar.TS.pid+'; ');
	 clog('LPOST.id:'+gvar.LPOST.id+'; LPOST.name:'+gvar.LPOST.name+'; LPOST.pid:'+gvar.LPOST.pid+'; ');
   }
   /*newreply*/
   return {content:_ret, title:_tit, newreply:(gvar.current.isLastPost ? gvar.LPOST.pid : gvar.TS.pid) };
  }
  // param can be manualy supplied. mode=[0:hideall,1:emote,2:showall]; flag:[link, img];
 ,parse_image: function(text, flag, mode){
   if(isUndefined(flag)) flag = 'link';
   if(isUndefined(mode)) mode= gvar.settings.imgload;
   if(flag=='link'){
     var ori = text;
     if(mode=='0'){
       // no-load all 
	   text = text.replace(/<img\s*src=[\"\']([^\"|\']+).(?:\sborder=.0.)*(?:\salt=..)*\s*title=[\"\']([^\"|\']+)[^>]+./gim, function(str, $1, $2) { return('<a class="imgthumb" href="'+$1+'" title="'+$2+'">'+basename($1)+'</a> '); });
	   gvar.current.cEMOTE = (ori!=text);
     }
     if(mode != '2'){
	  ori = text
      text = text.replace(/<img\s*src=[\"\']([^\"|\']+).(?:\s*border=.0.)(?:\s*alt=..)(?:[\s*\/]+)>/gim, function(str, $1) { return('<a class="imgthumb" href="'+$1+'">'+$1+'</a> '); });
	  gvar.current.cIMG = (ori!=text);
     }
   }
   else if(flag=='img'){
     // reverse turn back to images
	 //emotes
	 if(mode=='1')
	  text = text.replace(/<a\s*class=\"imgthumb\"\s*href=[\"\']([^"|\']+).\s*title=[\"\']([^\"\']+).>(?:[^>]+).(?:\s|)/gim, function(str, $1, $2){ return('<img src="'+$1+'" border="0" alt="'+$2+'" title="'+$2+'" />'); });
	 // common-images
	 if(mode=='2')
	  text = text.replace(/<a\s*class=\"imgthumb\"\s*href=[\"\']([^"|\']+).>(?:[^>]+).(?:\s|)/gim, function(str, $1){ return('<img src="'+$1+'" border="0" alt="" />'); });
   }
   return text;
  }
 ,getUserId: function(){
    var uid,logusers = $D("//li[@class='welcomelink']", null, true),ret=false;	
    if(logusers){
	  // isVBul4=1
      uid = logusers.innerHTML.match(/member\.php\?u=([^\"\']+)[^>]+.([^<]+)/i);
	  ret = {id:(uid ? uid[1] : null), name:(uid ? uid[2] : null)};
    }else{
	  logusers = $D("//a[contains(@href, 'member.php')]", null, true);
	  if(logusers){
	    uid = logusers.href.match(/member\.php\?u=([^\"\']+)/i);
        ret = {id:(uid ? uid[1] : null), name:(logusers ? logusers.innerHTML : null) };
	  }
	}
    return ret;
  }

}; // end tTRIT

var tPOP = {
  init: function(rets){
    gvar.LastScrollTop = getCurrentYPos();
	gvar.isExpanded = true;	
	
	tPOP.loadLayer();
	showhide($D('#hideshow'), true);
	if(!$D('#hideshow')) return;
	tPOP.fillLayer(rets);
	
	tPOP.cont = $D('#preview_content');	
	tPOP.bodySnowBox();	
  } 
 ,loadLayer: function(){
    var Attr = {id:'hideshow',style:'display:none;'};
    var el = createEl('div', Attr, rSRC.getTPL_preview() );
    getTag('body')[0].insertBefore(el, getTag('body')[0].firstChild);
	tPOP.event_Static();
 }
 ,fillLayer: function(rets){
	$D('#preview_content').innerHTML = rets.content;
	
	if($D('#btn_quote_reply')){
	  $D('#btn_quote_reply').setAttribute('href', 'newreply.php?do=newreply&p='+rets.newreply );
	  on('click', $D('#btn_quote_reply'), function(){
		tPOP.toggleQuoting(true);
		var uri = gvar.current.newreply;
		if( gvar.current.QR_isLoaded ){
		  tQR.fetch(uri);
		}else{
		  tPOP.openQR();
		  tQR.init(uri);
		}
	  });
	}
	if($D('#prev_title')) $D('#prev_title').innerHTML = '<a href="showthread.php?t='+gvar.TS.tid+'" target="_blank" title="Goto Thread - '+(rets.title)+'">'+rets.title+'</a>';
	
	// recalibrate top position only if not in fixed_preview
    if($D('#popup_container')) $D('#popup_container').style.setProperty('top', (gvar.settings.fixed_preview ? gvar.offsetLayer : ss.getCurrentYPos()+gvar.offsetLayer ) +'px','');
	
	//gvar.LPOST.id poster_userlink
	if($D('#poster_userlink')) {
	  $D('#poster_userlink').innerHTML = '<a onclick="return '+(!gvar.isKaskus ? 'true':'false')+'" target="_blank" href="./member.php?u='+gvar.LPOST.id+'" class="ktp-user_link cyellow"><b>'+gvar.LPOST.name+'</b></a>';
	}
	//ts_userlink poster_userlink
	if(gvar.isKaskus)
	  tPOP.event_Userlink();
	
	// event_Additional
	tPOP.event_Additional();
	
 }
 ,settings: {
    init: function(){
	  if($D('#setting_container')) {
       $D('#setting_container').innerHTML = rSRC.getTPL_setting();
       $D('#setting_container').style.display='';
      }
	  tPOP.settings.event_set();
   }
   ,toggle_partial: function(){
	  show = ($D('#row_content').style.display!='none');	  
	  var el = $D('#setting_container');
	  if(isUndefined(el)) return;
	  if(el.style.display!='none'){
		if(gvar.current.row_content_last_isShow)
		  tPOP.toggleCollapse();
		else
		  tPOP.toggleCollapse(true); // partial collapse
	  }else{
	    tPOP.settings.init();
		gvar.current.row_content_last_isShow = show;
	    if(show) tPOP.toggleCollapse();
	  }
   }
   ,event_set: function(){
    // #save_settings #cancel_settings
	if($D('#cancel_settings')) on('click', $D('#cancel_settings'), function(){ tPOP.settings.toggle_partial(); });
	if($D('#save_settings')) on('click', $D('#save_settings'), function(){ tPOP.settings.save(); });
	if($D('#reset_default')) on('click', $D('#reset_default'), function(){ tPOP.settings.reset(); });
      
	if($D('#edit_sigi')) on('click', $D('#edit_sigi'), function(e){ tPOP.settings.toggle_editLayout(e); });
    if($D('#edit_tpl')) on('click',  $D('#edit_tpl'), function(e){ tPOP.settings.toggle_editLayout(e); });
	
    // better do this instead of check noCrossDomain and/or isOpera
      try {
       if(!gvar.noCrossDomain && $D('#chk_upd_now') ) // unavailable on Chrome|Opera T_T
        on('click', $D('#chk_upd_now'), function(e){
          if($D('#fetch_update')) return; // there is a fetch update in progress        
          if($D('#upd_cnt')) Dom.remove($D('#upd_cnt'));
          Updater.notify_progres('chk_upd_now');
          Updater.check(true);
        });
      }catch(e){ show_alert(e);};
   }
   ,layout_Edit: function(e, task){
      if(isUndefined(e) || isUndefined(task)) return;
	  var el_cancel = Dom.g(task+'_cancel');
      var genTxta = function(_task, value){
        var tgt = Dom.g(_task+'_Editor'); tgt.innerHTML='';
        var el = createEl('textarea',{id:_task+'_txta'}, value);
        Dom.add(el, tgt); tgt.style.display='';
        window.setTimeout(function(e) { try{Dom.g(_task+'_txta').focus();}catch(e){} }, 100);
      };
      var uLayout = gvar.settings.userLayout;
      switch(task){
      case "edit_sigi":
        genTxta(task, uLayout.signature);
      break;
      case "edit_tpl":
        genTxta(task, uLayout.template);
      break;
      };
      removeClass('cancel_layout-invi', el_cancel );
   }
   ,layout_Set: function(e, task){
      if(isUndefined(e) || isUndefined(task)) return;
      value = Dom.g(task+'_txta').value;
      if(task=='edit_tpl'){
        if(!value.match(/\{message\}/i)) {
          alert('Invalid Layout format.\nCan\'t find "{message}" in template.\n\neg. [B]{message}[/B]');
          return false;
        }else{
          value = value.replace(/\{message\}/i, '{MESSAGE}');
          Dom.g(task+'_txta').value = value;
        }
      }
      value = value.replace(/([\!\:])/g, "\\$1");
      var keyName=(task=='edit_sigi' ? 'LAYOUT_SIGI' :'LAYOUT_TPL');
      
      tSTORAGE.setValueForId (gvar.user.id, encodeURIComponent(value), keyName, ['<!>','::']); //save layout
      window.setTimeout(function() { SimulateMouse(Dom.g(task+'_cancel'), 'click', true); }, 50);
      if(task=='edit_sigi')
        gvar.settings.userLayout.signature=value.replace(/\\([\!\:])/g, "$1");
      else
        gvar.settings.userLayout.template=value.replace(/\\([\!\:])/g, "$1");
   }
   ,toggle_editLayout: function(e){
    e=e.target||e;
    if(typeof(e)!='object') return;
    var todo=e.innerHTML; // edit | set
    var value, task=e.id; // sigi | tpl
    var el_cancel = Dom.g(task+'_cancel');
    if(todo=='edit'){
      tPOP.settings.layout_Edit(e, task);
    }else{ // set
      tPOP.settings.layout_Set(e, task);
    }    
    e.innerHTML = (todo=='edit' ? 'set' : 'edit');
    // using onclick attribute identify that cancel event has been attached
    if(!el_cancel.getAttribute('onclick')){
      el_cancel.setAttribute('onclick','return false;');
      on('click', el_cancel, function(ec){ 
       ec=ec.target||ec; var tgt = ec.id.replace('_cancel','')+'_Editor';
       Dom.g(tgt).innerHTML=''; addClass('cancel_layout-invi', ec );
       e.innerHTML='edit';
      });
    }
   }
   ,save: function(){
    //UPDATES UPDATES_INTERVAL IMGLOAD THEN_GOTHREAD RELOAD_AFTERSENT
    // single chkbox 
	// , 'stg_autolayout_sigi', 'stg_autolayout_tpl', 'stg_autoshow_smile'
	// stg_state_color_ready stg_state_color_readed  stg_state_color_invalid
	var cnt, value, sets, cucok;
	sets ={
	  'stg_reload_afterpost': 'RELOAD_AFTERSENT'
	 ,'stg_scrollto_lastrow': 'SCROLL_THREAD'
	 ,'stg_updates': 'UPDATES'	 
	 ,'stg_recaptcha_mode': 'USE_RECAPTCHA'	 
	};
	for(var field in sets){
	  if( isString(sets[field]) && $D('#'+field) ){
	    setValue(KEY_KTP+sets[field], ($D('#'+field).checked ? '1':'0') );
	  }
	}
	// saving autoshow_smiley
    value = [];
    misc = ['kecil','besar','custom'];
    par = $D('#stg_autoshow_smile');
    if(par) value.push(par.checked ? '1':'0');
    for(var id in misc){
      if(!isString(misc[id])) continue;
      par = $D('#stg_autoshow_smile'+'_'+misc[id]);
      if(par && par.checked){
        value.push(misc[id]);
        break;
      }
    }
    setValue(KEY_KTP+'SHOW_SMILE', value.toString());
	
	// saving autolayout
    misc = ['stg_autolayout_sigi','stg_autolayout_tpl'];
    value = [];
    for(var i in misc){
      if(!isString(misc[i])) continue;
      value.push(Dom.g(misc[i]).checked ? '1' : '0');
    }
    tSTORAGE.setValueForId(gvar.user.id, value.toString(), 'LAYOUT_CONFIG'); //save layout
	
	// saving update interval
    if( $D('#stg_updates_interval') ){
      value = Math.abs($D('#stg_updates_interval').value);
      value = (isNaN(value)||value <= 0 ? 1 : (value > 99 ? 99 : value) );
      setValue(KEY_KTP+'UPDATES_INTERVAL', value.toString());
    }		
	
    // images policy 
    sets = ['stg_showimages_none', 'stg_showimages_emot', 'stg_showimages_alll'];
	cnt = sets.length;
	value = 0;
	//for(var i in sets){
	for(var i=0; i<cnt; i++){
	  if( isString(sets[i]) && $D('#'+sets[i]) && $D('#'+sets[i]).checked ){	    
		  value=$D('#'+sets[i]).value;
		  break;		
	  }
	}
	setValue(KEY_KTP+'IMGLOAD', value.toString());
	
    // node state color
    sets = ['stg_state_color_ready', 'stg_state_color_readed', 'stg_state_color_invalid'];
	cnt = sets.length;
	value = '';
	for(var i=0; i<cnt; i++){
	  if( isString(sets[i]) ){
		  var tmpVal= trimStr($D('#'+sets[i]).value);
		  cucok=tmpVal.match(/^(?:\#[0-9A-F]|\w)+$/i);
		  value+=(cucok ? cucok[0] : gvar.settings.color_state[i]) + ',';
	  }
	}
	value = value.substring(0, value.length-1);
	setValue(KEY_KTP+'NODE_STATE', value.toString());
	
	// reload settings for gvar
	getSettings();
	
	// reload css to body
	GM_addGlobalStyle( rSRC.getCSS_fixed(gvar.settings.fixed_preview), 'xcss_position', 1 );
	
    // done save then close layer
	tPOP.closeLayerBox('hideshow');
   }
   
   ,reset: function(){
    var home=['http:/'+'/www.kaskus.co.id/showthread.php?t=3170414','http:/'+'/userscripts.org/topics/???'];
	var space='';for(var i=0;i<20;i++)space+=' ';
	var msg = ''
     +'This will delete/reset all saved data.\nThings that might be conflict with your Kaskus Thread Preview.'     
     +'\nPlease report any bug or some bad side effects here:'+space+'\n'+home[1]+'\nor\n'+home[0]+
     '\n\n'+HtmlUnicodeDecode('&#187;')+' Continue with Reset?';
    if( confirm(msg) ) {
	    var keys = ['FIXED_PREVIEW','THEN_GOTHREAD','UPDATES','UPDATES_INTERVAL'
                    ,'NODE_STATE','SCROLL_THREAD','IMGLOAD','RELOAD_AFTERSENT'
                    ,'SHOW_SMILE','LAYOUT_CONFIG','LAYOUT_SIGI','LAYOUT_TPL'
                    ,'USE_RECAPTCHA'
                    ,'SCUSTOM_ALT','SCUSTOM_NOPARSE','CUSTOM_SMILEY'
				  ];
        for(var i in keys)
          try{ if(isString(keys[i])) GM_deleteValue(KEY_KTP + keys[i]); }catch(e){};		
        window.setTimeout(function() { location.reload(false); }, 300);
	}
   }
 }
 ,event_Static: function(){

    // sticky toggle
    on('click', $D("#imgsticky"), function(){ tPOP.toggleSticky(); });

	// close button
    on('click', $D("#imghideshow"), function(){ tPOP.closeLayerBox('hideshow'); });	
    // cancel preview
    on('click', $D('#preview_cancel'), function(){ SimulateMouse($D('#imghideshow'), 'click', true); } );
	
	// #head_layer; #atoggle
    if($D('#head_layer')) on('dblclick',$D('#head_layer'),function(){ tPOP.toggleCollapse(); $D('#atoggle').focus(); });
    if($D('#atoggle')) on('click',$D('#atoggle'),function(){ tPOP.toggleCollapse(); });

	// detect window resize to resize textbox and controler wraper
    on('resize', window, function() { controler_resizer() });	
	
	// qr_button
	if(gvar.user.id && $D('#qr_button'))
     on('click', $D('#qr_button'), function(){
	  if(tPOP.cont && tPOP.cont.scrollHeight > tPOP.cont.clientHeight){
		var cs = getCurrentYPos() + 40;
		ss.smoothScroll( cs, null );
	  }
	  tPOP.openQR();	  
	  tQR.init(gvar.current.newreply+'&noquote=1');
	 });
    
	// #preview_setting
    if($D('#preview_setting')) on('click', $D('#preview_setting'), function(e){ tPOP.settings.toggle_partial() });
  }
 ,event_Userlink: function(){
    var nodes = $D('//a[contains(@class,"ktp-user_link")]');
    if(nodes.snapshotLength > 0){
     for(var i=0, lg=nodes.snapshotLength; i<lg; i++) {
	    node = nodes.snapshotItem(i);
	    on('click', node, function(e){
		  var cucok, uid, prev;		  
		  var par, el_img, el, Attr, sp_1, sp_par, dumy_el_img;
	      e=e.target||e;
		  if(e.nodeName!='A') e = e.parentNode;
		  if(e.href){
		    cucok = e.href.match(/\?u=(\d+)/);
			uid = (cucok ? cucok[1]:false);
			if($D('#img_ngaskuser')){
		      prev = $D('#img_ngaskuser').getAttribute('rel');
		 	  if(prev == uid) {
			    if($D('#post_detail')){
			     $D('#post_detail').innerHTML = '';
				 $D('#post_detail').style.setProperty('display','none','');
				 return;
				}
			  }
		    }
			var loaduser = function(uid){
			   
			   par = createEl('div', {});
			   Attr = {id:'dumy_img_ngaskuser',border:'0',src:gvar.ktpKaskus+'kaskus.php?u='+uid,style:"display:none;"};
			   dumy_el_img = createEl('img', Attr);			   
			   
			   Attr = {id:'img_ngaskuser',border:'0', style:"display:none;",rel:uid,title:'Powered by '+gvar.ktpKaskus.replace(/(?:http|www\.|[\:\/])/g,'')};
			   el_img = createEl('div', Attr);
			   sp_par = createEl('span', {id:'powby','class':'powby',style:'visibility:hidden;'}, '&#8471; &#183; ');
			   sp_1 = createEl('span', {'class':'b'}, 'kaskus'); Dom.add(sp_1, sp_par);
			   sp_1 = createEl('span', {'class':'or'}, 'badge'); Dom.add(sp_1, sp_par);
			   //sp_1 = createTextEl('.us'); Dom.add(sp_1, sp_par);
			   Dom.add(sp_par, el_img);
			   Dom.add(el_img, par);			   
			   
			   if($D('#post_detail')){
			     $D('#post_detail').innerHTML = '';
				 Dom.add(par, $D('#post_detail'));
				 $D('#post_detail').innerHTML+=''
				  +"\n\n"+'<style type="text/css">'
				  +'#img_ngaskuser{background:transparent url("'+gvar.ktpKaskus+'kaskus.php?u='+uid+'") no-repeat 0 0;}'
				  +'</style>';
			   }
			};
		    loaduser(uid);
			if($D('#post_detail')) {
			  $D('#post_detail').style.setProperty('display','block','');
			  $D('#post_detail').innerHTML+= '<div id="wait_userlink">'+_LOADING+'</div>';
			}
	        gvar.sITryLoadCard = window.setInterval(function() {
              var img = dumy_el_img;
		      if(img && img.height || img.width){
	            clearInterval(gvar.sITryLoadCard);
		        if($D('#img_ngaskuser')) $D('#img_ngaskuser').style.display = 'block';
		        if($D('#powby')) $D('#powby').style.visibility = 'visible';
				if($D('#wait_userlink')) Dom.remove($D('#wait_userlink'));
				dumy_el_img = null;
	        	return;
	          }
            }, 150);
			
		  }
	    });
	 }
    }

  }
 ,event_Additional: function(){
    // additional events 
    // #show_images #show_emotes #open_spoilers
    if(gvar.current.cEMOTE && $D('#show_emotes')){
      on('click', $D('#show_emotes'), function(e){
        e=e.target||e;
    	var _ret = tTRIT.parse_image(gvar.current.content, 'img', 1);
    	$D('#preview_content').innerHTML = gvar.current.content = _ret;
    	Dom.remove(e);
      });
      $D('#show_emotes').style.setProperty('display','inline','important');
    }
    if(gvar.current.cIMG && $D('#show_images')){
        on('click', $D('#show_images'), function(e){
           e=e.target||e;
           var _ret = tTRIT.parse_image(gvar.current.content, 'img', 2);
           $D('#preview_content').innerHTML = gvar.current.content = _ret;
    	   Dom.remove(e);
        });
        $D('#show_images').style.setProperty('display','inline','important');
    }
    // re-evaluate for spoiler button 
    var nodes = $D('//input[@type="button" and @value and @onclick]', $D('#preview_content'));
    gvar.current.cSPL = (nodes.snapshotLength > 0);
    if( gvar.current.cSPL ){
       if($D('#open_spoilers')){
        on('click', $D('#open_spoilers'), function(e){
    	  e = e.target||e;
    	  var inode, show = (e.value.indexOf("Show")!=-1);
    	  inode = getTag('input');
    	  if(inode.length > 0)
    	    for(var i=0; i<inode.length; i++){
    	      if(show && inode[i].value=="Show") {
    			  inode[i].click();
    			  inode[i].value = "Hide";					
    		  }else if(inode[i].value=="Hide") {
    			  inode[i].click();
    			  inode[i].value = "Show";
    		  }				  
    	    }
    	  e.blur();
    	  e.value = (show ? 'Hide':'Show')+' Spoilers';
    	  inode = $D('//div[@id="preview_content"]', null, true);
    	  if(inode)
    	    gvar.current.content= inode.innerHTML;
    	  else
    	    gvar.current.content= $D('#preview_content').innerHTML;
    	});
       }
       $D('#open_spoilers').style.setProperty('display','inline','important');
    }

    if( !gvar.current.isLastPost && $D('#last_post') && $D('#remotePID_'+gvar.LPOST.pid) ){	  
		on('click', $D('#last_post'), function(){ 			
			SimulateMouse($D('#remotePID_'+gvar.LPOST.pid), 'click', true);
		});
	}
 
  } // end addition events
 
 ,openQR: function(){
    $D('#qr_container_head').style.display='';
	$D('#collapseobj_quickreply').style.display='';
	
	// change from fixed to absolute is a must..!!	
	tPOP.toggleSticky(false, 'quickreply');
	Dom.remove($D("#imgsticky"));
	
	// moving link to #button_preview
	if( $D('#button_preview') && $D('#preview_cancel') ){
		$D('#button_preview').insertBefore($D('#preview_cancel'), $D('#button_preview').firstChild);
		$D('#preview_cancel').style.setProperty('float','left','important');
		removeClass('cyellow', $D('#preview_cancel')); 
	}
	
	if($D('#tr_qr_button')) Dom.remove('tr_qr_button');
	if($D('#qr_container'))
	   $D('#qr_container').innerHTML = '<div id="preview_loading">'+_LOADING+'</div>';
  }
 ,toggleQuoting: function(isFetching){
    if(isUndefined(isFetching)) isFetching = false;
     if($D('#quote_loading')) $D('#quote_loading').style.display=(isFetching ? '' : 'none');
	 if($D('#btn_quote_reply')) $D('#btn_quote_reply').style.display=(isFetching ? 'none' : '');

 }
 ,toggleSticky: function(flag, caller){
    var obj= $D('#popup_container');
    // flag ? doFixed :doAbs
    if(isUndefined(flag))
      flag = (gvar.settings.fixed_preview === false);
    if(Dom.g('xcss_position')) Dom.g('xcss_position').innerHTML = rSRC.getCSS_fixed(flag);
    var yNow = parseInt(ss.getCurrentYPos());
    var newOfset = (yNow==0 ? gvar.offsetLayer : yNow+( ($D('#preview_content').clientHeight+$D('#qr_container').clientHeight) > (parseInt(getScreenHeight())-gvar.offsetMaxHeight-gvar.offsetLayer) ? 0 : gvar.offsetLayer) );
    var vnewtop = (flag ? gvar.offsetLayer : newOfset);
    obj.style.setProperty('top', vnewtop+'px', '');
    if($D("#imgsticky"))
      $D("#imgsticky").src = (flag ? gvar.B.sticky1_png : gvar.B.sticky2_png );
    
    if( isUndefined(caller) ){  // dont save the state when caller is define | asumed from quickreply
      setValue(KEY_KTP+'FIXED_PREVIEW', (flag ? '1' : '0') );
    }
    gvar.settings.fixed_preview = (flag);
	
	// going to no longer fixed?
	if(!flag) 
		tPOP.bodySnowBox( false );
	else 
		tPOP.bodySnowBox();
  }
 ,toggleCollapse: function(partial){
    var el, show, tohide = ['vbform','thread_tools','threadpost_navi','tbl_separator'];
    show = ($D('#row_content').style.display!='none');
	gvar.isExpanded = !show;
	if(isUndefined(partial)){
	    $D('#row_content').style.display = (show ? 'none' : '');
        for(var i=0; i<tohide.length; i++){
           if(!isString(tohide[i])) continue;
           el = Dom.g( tohide[i] );
           if(el) el.style.display = (show ? 'none' : '');
        }
        if($D('#qr_container_head').style.display!='none') Dom.g('button_preview').style.display = (show ? 'none' : '');
	    var img = $D('#collapseimg_quickreply');
	    if(img){
	      var src = img.getAttribute('src');
	      img.setAttribute('src', (src && show ? src.replace('.gif','_collapsed') : src.replace('_collapsed.gif','') ) + '.gif' );
	    }		
	}
	if(!show && $D('#setting_container') && $D('#setting_container').style.display!='none'){
	  $D('#setting_container').innerHTML = '';
	  $D('#setting_container').style.display='none';
	}
	// going to no longer fixed?
	if(show) 
		tPOP.bodySnowBox(false);
	else 
		tPOP.bodySnowBox();	
  }

 ,imediateStop: function(){
    if(gvar.sITryBlinkRow) clearInterval(gvar.sITryBlinkRow);
	if(!isString(gvar.current.cRow)) removeClass('selected_row', gvar.current.cRow);
 }
 ,bodySnowBox: function( activate ){
	if(isUndefined(activate)) 
		window.setTimeout(function(e) {
			if(tPOP.cont && tPOP.cont.scrollHeight > tPOP.cont.clientHeight)
				addClass('ktpSnowBox', document.body);
		}, 250);		
	else
		removeClass('ktpSnowBox', document.body);
		
 }
 ,closeLayerBox: function(tgt){
	if(window.stop !== undefined){window.stop();}
	else if(document.execCommand !== undefined){document.execCommand("Stop", false);}

	gvar.blinkRow=0;
	if(!isString(gvar.current.cRow)) {
	  var lastRow = gvar.current.cRow;
	  if(gvar.settings.thread_lastscroll && gvar.settings.fixed_preview){
	    ss.STEPS = 21;
	    ss.smoothScroll( lastRow, null );
	  }	  
	  gvar.sITryBlinkRow = window.setInterval(function() {
	    var iLastRow = gvar.current.cRow;
        if(gvar.blinkRow >= 5){
	      clearInterval(gvar.sITryBlinkRow);
	  	  removeClass('selected_row', iLastRow);
		  gvar.current = {};
	  	  return;
	    }
	    gvar.blinkRow++;
		if(typeof(iLastRow.getAttribute('class'))=='string' && iLastRow.getAttribute('class').trim()!=""){
	      if(iLastRow.getAttribute('class').indexOf('selected_row')!=-1)
	        removeClass('selected_row', iLastRow);
	      else
			addClass('selected_row', iLastRow);
		}else{
		  iLastRow.setAttribute('class', 'selected_row');
		}
      }, 300);
	  
	}else{
	  // blink|after-load the node
	  var cNode = $D(gvar.current.cRow);
	  if(cNode){
	    cNode.innerHTML = '<div class="ktp-loading" style="display:inline-block;padding:0 0 2px 5px;"></div>';
		gvar.sITryBlinkRow = window.setTimeout(function() {
		  clearTimeout(gvar.sITryBlinkRow);
		  cNode.innerHTML = '[+]';
		}, 900);
	  }
	}
	//restore the meta refresh
	var head = getTag('head');
	if( isDefined(head[0]) && gvar.meta_refresh ){
	  //Dom.add(gvar.meta_refresh, head[0]);
	  head[0].appendChild( gvar.meta_refresh.cloneNode(true) );
	}
	tPOP.bodySnowBox( false );
	Dom.remove( Dom.g(tgt) );
	if( gvar.isExpanded && !gvar.settings.thread_lastscroll ) 
	  window.scrollTo(0,(isDefined(gvar.LastScrollTop) ? gvar.LastScrollTop:0) );
  }
}; // end tPOP

var tQR = {
  init: function(fetch_uri){
    var el;
    if(gvar.isKaskus){
        if( !gvar.user.isDonatur )
          if( gvar.settings.recaptcha ){
            gvar.sITryFocusOnLoad = window.setInterval(function() {
                if ($D('#recaptcha_response_field')) {
                    clearInterval(gvar.sITryFocusOnLoad);
                    tQR.waitload_reCaptcha();
                }
            }, 200); // end sITryFocusOnLoad
          }else{
            el=$D('#capcay_container');
            if(el && el.innerHTML=='')
          		$D('#capcay_container').innerHTML = ''
                 +'<fieldset class="fieldset" style="display:none;">'
                 +'<span id="refresh_imagereg" class="qrsmallfont" style="display:none;">'
                 +  '<a id="refresh_capcay" href="javascript:;"></a>'
                 +'</span>'
                 +'</fieldset>'
          }
    }else{
        if(Dom.g(gvar.id_textarea)) Dom.g(gvar.id_textarea).removeAttribute('disabled');
    }
    tQR.fetch(fetch_uri);
  }

 ,isLoaded: function(){
    return ($D('#loggedin_as') && $D('#loggedin_as').innerHTML!='');
  }
  
 ,waitload_reCaptcha: function(){
    tQR.event_inputCapcay('recaptcha_response_field','preview_submit','hidrecap_reload_btn');
    
    // reorder tabindex // 'recaptcha_response_field',
	Dom.g('recaptcha_response_field').setAttribute('tabindex', '202');
	var reCp_field=['recaptcha_reload_btn','recaptcha_switch_audio_btn','recaptcha_switch_img_btn','recaptcha_whatsthis_btn'];
	for(var i=0; i<reCp_field.length; i++)
	  if( $D('#'+reCp_field[i]) ) $D('#'+reCp_field[i]).setAttribute('tabindex', '21'+(i+1) + '');
	
	Dom.g(gvar.id_textarea).removeAttribute('disabled');

 }
 ,clickIt: function(nofocus){
    window.setTimeout(function() {
      SimulateMouse($D('#refresh_capcay'), 'click', true);
      var hi = $D('#humaninput');
      if( hi && (isUndefined(nofocus) || isDefined(nofocus) && !nofocus) ) 
        hi.focus();
    }, 250);   
 }
 // fetch only the hash of humaninput (ordinary kaskuscapcay)
 ,capcay_parser: function (page){
    var rets = [false,false], match = /id=\"hash\".*value=\"(\w+)/im.exec(page);
    if(match){
      if(gvar.settings.recaptcha)
          $D('#imgcapcay').innerHTML = '<input id="hash" name="humanverify[hash]" value="'+match[1]+'" type="hidden">\n';
      rets[0] = match[1];
    }
    match = /SECURITYTOKEN(?:[\s\=]+)\"([\w\-]+)/.exec(page);
    if(match) rets[1] = (match[1]);
    return rets;
  }
 ,waitload_kaskusCaptcha: function(rets){
    var Attr, el;
    // pre tpl
    if($D('#recaptcha_container')) $D('#recaptcha_container').innerHTML = ''        
        +'<div id="imgcapcay" style="margin:1px 0;min-height:65px;height:65px;"><div class="g_notice normal_notice" style="display:block; margin-right:3px; width:200px; font-size:9px; text-align:center;">[capcay-space]</div></div>'
        +'<div id="progress_imagereg" style="display:none;position:absolute;margin:-20px auto;"><img src="'+gvar.B.loading_gif+'" /></div>'
        +'<div><a tabindex="205" id="remote_refresh_capcay" href="javascript:;" class="qrsmallfont" >Refresh-Capcay</a></div>'
        +'<div style="position:absolute;margin:7px 0 0 100px;width:16px;display:inline;"><img id="captcha_submit_load" src="'+gvar.B.loading_gif+'" border="0" style="display:none;"/></div>'
        +'<input type="text" tabindex="202" title="insert capcay here" class="bginput" name="humanverify[input]" id="humaninput" size="4" maxlength="3" disabled="disabled" autocomplete="off"/>';
        //is_keydown_pressed
    
    Attr = {id:'imagereg',alt:'capcay',title:'capcay',width:'200',height:'61',border:'0',style:'cursor:pointer',
                src:(gvar.settings.qrtoggle==1 ? 'image.php?type=hv&hash='+rets[0]:'')};
    el=createEl('img',Attr);    
    $D('#imgcapcay').innerHTML='';
    Dom.add(el, $D('#imgcapcay'));
    if(rets[1]) gvar.securitytoken = rets[1]; // update token
    if( !$D('#hash') ){
        el=createEl('input',{id:'hash',type:'hidden',name:'humanverify[hash]',value:rets[0]});
        Dom.add(el, $D('#button_preview')); //#fieldset_capcay    
    }else{
        $D('#hash').value = rets[0];
    }
    
    el = $D('#kaskus_capcay_trigger');
    if( el && el.innerHTML=='' ) {
        $D('#kaskus_capcay_trigger').innerHTML = ''
            +'if(document.getElementById("refresh_imagereg").style.display==\'none\' && typeof(vB_AJAX_ImageReg_Init)==\'function\'){window.setTimeout(vB_AJAX_ImageReg_Init,200);}else{var cp=document.getElementById("refresh_imagereg");cp.innerHTML="<span title=\'vB_AJAX_ImageReg_Init failed to load. Unable to refresh capcay.\'>LoadCapcay-Failed</span>";cp.style.display="";alert("Ups, load vB_AJAX_ImageReg_Init failed, please refresh page.")}';
    }
    
    var hi = $D('#humaninput');
    if(hi) {
        hi.removeAttribute('disabled');
        addClass('idleinput', hi);
        on('focus', hi, function(){removeClass('idleinput', hi);addClass('activeField', hi);});
        on('blur', hi, function(){removeClass('activeField', hi);addClass('idleinput', hi);});
        on('keydown', hi, function(e){
          var C = (!e ? window.event : e ), A = C.keyCode ? C.keyCode : C.charCode;
          if( A===9 ){ // mijit tab            
	        $D('#preview_submit').focus();
            C = do_an_e(C);
          }
        });
        
        on('click', $D('#refresh_capcay'), function(){ hi.value='';});
        on('click', $D('#remote_refresh_capcay'), function(){ 
            SimulateMouse($D('#refresh_capcay'),'click',true); hi.focus(); hi.select();
        });
        on('click', $D('#imagereg'), function(){hi.value='';hi.focus();});
        
        tQR.event_inputCapcay('humaninput','preview_submit','remote_refresh_capcay');
        $D('#humaninput').setAttribute('tabindex', '202');

        // order tabindex
        var reCp_field=['preview_submit','captcha_cancel', 'remote_refresh_capcay'];
        for(var i=0; i<reCp_field.length; i++)
          if( $D('#'+reCp_field[i]) ) $D('#'+reCp_field[i]).setAttribute('tabindex', '21'+(i+1) + '');          
    }

    window.setTimeout(function() {        
        if( $D('#imagereg').getAttribute('src')=='' || isDefined(gvar.cache_rets_capcay) ){
            tQR.clickIt(true); // nofocus
            if( isDefined(gvar.cache_rets_capcay) && $D('#imagereg') ) 
                on("click", $D('#imagereg'), function(){ tQR.clickIt(true) });    
        }        
        gvar.cache_rets_capcay = rets;
    }, 201);

    /*
    if($D('#rating_onpop') && $D('#rating_onpop').innerHTML=='' && $D('#rate_thread')){
        Dom.add($D('#rate_thread'), $D('#rating_onpop'));
        $D('#rate_thread').style.display = '';
    }
    
    $D('#button_preview').style.display = '';
    */
  }
 ,event_inputCapcay: function(txfield, btnsubmit, btn_reload){
    if( $D(txfield) )
    on('keydown',$D(txfield),function(e){
        var C = (!e ? window.event : e ), ab=false;
        var A = C.keyCode ? C.keyCode : C.charCode;
        if( A == 13 ){ // mijit enter
            if($D(btnsubmit)) SimulateMouse($D(btnsubmit), 'click', true);
            ab=true;
        }else if( (C.altKey && A===82) || (A===33||A===34) ) { //** Alt+R(82) | Pg-Up(33) | Pg-Down(34)
            if($D(btn_reload)) SimulateMouse($D(btn_reload), 'click', true);
            ab=true;
        }
        if(ab){
         C = do_an_e(C); return false;
		}
    });
  }
 ,event_TPL_vB: function(){
	on('click', $D('#textarea_clear'), function(){ vB_textarea.clear(); });	
	//#preview_submit
    if($D('#preview_submit'))
      on('click', $D('#preview_submit'), function(){
        var validate= ( !gvar.user.isDonatur && gvar.isKaskus ? tQR.prepost_QR() : true );
		if(validate) tQR.post();
      });
	//#then_gotothread
	if($D('#then_gotothread'))
	  on('click',$D('#then_gotothread'),function(e){
	    e = e.target||e;
		setValue(KEY_KTP+'THEN_GOTHREAD', (e.checked ? '1':'0'));
		gvar.settings.then_goto_thread = ( e.checked );
	  });		
	if($D('#vbform')) on('submit',$D('#vbform'),function(e){
	  var C = (!e ? window.event : e ); C = do_an_e(C);
	});
		
	// #atitle
	if($D('#atitle'))
	 on('click', $D('#atitle'), function() {
      $D('#input_title').style.width=(Dom.g(gvar.id_textarea).clientWidth-80)+'px';
      var disp=$D('#titlecont');
      disp.style.display=(disp.style.display=='none' ? 'block':'none');
      $D('#atitle').innerHTML = '['+(disp.style.display=='none'?'+':'-')+']';
	  if(disp.style.display!='none')
        window.setTimeout(function() { try{$D('#input_title').focus();}catch(e){}; }, 100);
      else
        window.setTimeout(function() { try{Dom.g(gvar.id_textarea).focus();}catch(e){}; $D('#input_title').value=''; }, 100);
     }); // #atitle
	// #gvar.id_textarea textarea
	if(Dom.g(gvar.id_textarea))
	 on('keydown', Dom.g(gvar.id_textarea), function(e){
	    var C = (!e ? window.event : e ), tgt;
		var CSA = (C.ctrlKey ? '1':'0')+','+(C.shiftKey ? '1':'0')+','+(C.altKey ? '1':'0');
		var A = C.keyCode ? C.keyCode : C.charCode;
		if( A===9 ){ // mijit tab
            C = do_an_e(C);
            if($D('#recaptcha_response_field')){
              window.setTimeout(function() { try{$D('#recaptcha_response_field').focus()}catch(e){}; }, 150);
            }else if($D('#humaninput')){
              window.setTimeout(function() { try{$D('#humaninput').focus()}catch(e){}; }, 150);
            }else{
	          $D('#preview_submit').focus();
            }
        }else if(CSA=='1,0,0' && A===13){ // Ctrl + Enter
		    SimulateMouse($D('#preview_submit'), 'click', true);		
            C = do_an_e(C);
		}
	 });

	// smile event
    par = $D('#vB_Editor_001_cmd_insertsmile');   
    if(par) {
      on('click', par, function(e){ tQR.create_smile_tab(e); });
      on('mouseout', par, function(e){
        e.target||e;
        window.setTimeout(function() {
          obj = $D('#vB_Editor_001_cmd_insertsmile_img');
          if(obj && $D('#smile_cont').style.display!=''){
			obj.style.backgroundColor='transparent';
            obj.style.border='1px solid transparent';
          }
        }, 10);
      });     
      on('mouseover', par, function(e){
        e.target||e;
        window.setTimeout(function() {
          obj = $D('#vB_Editor_001_cmd_insertsmile_img');
          if(obj && $D('#smile_cont').style.display!=''){
			obj.style.backgroundColor='#B0DAF2';
            obj.style.border='1px solid #2085C1';
          }
        }, 10);
      });     
    } // end #vB_Editor_001_cmd_insertsmile

  }
 ,fetch: function(pid){
    // colecting necessary hidden value
	// no need supply domain for multi-site support
	//tQR.uri_lastFetch = gvar.domain+'newreply.php?do=newreply&p='+pid;
	tQR.uri_lastFetch = './newreply.php?do=newreply&p='+pid;
    getFetch(tQR.uri_lastFetch, tQR.fetch_cb, true);
  }
 ,fetch_cb: function(reply_html){
	if( !reply_html ) return;
	reply_html = reply_html.responseText;
	tPOP.toggleQuoting(false);
	// parse response then fill hidden values
	gvar.current.qr_fetch = tQR.parse_fetch(reply_html);
	

	if(gvar.current.qr_fetch === null){
	   tQR.fetch_error();
	}else if(gvar.current.qr_fetch[0]==false){
	   
	   tQR.fetch_error(false, gvar.current.qr_fetch[1]);
	   
	}else{
	   var snapTo = function(){
	    if(gvar.current.qr_fetch === null)
		  tQR.fetch_error(true);
	    vB_textarea.focus();
		if(gvar.settings.autoload_smiley[0]=='1')
         tQR.create_smile_tab( $D('#vB_Editor_001_cmd_insertsmile') );
		vB_textarea.setElastic(gvar.id_textarea, gvar.maxH_editor);
	  };
	
	  if( !gvar.current.QR_isLoaded ){
	    $D('#qr_container').innerHTML = rSRC.getTPL_qr();	
	    tQR.event_TPL_vB();
	    $D('#loggedin_as').innerHTML = '&nbsp;'
	     +HtmlUnicodeDecode('&#8592;')+'[<small>Logged in as</small>&nbsp;<a class="cyellow" href="./member.php?u='+gvar.user.id+'">'
	     +gvar.user.name+'</a>'+(gvar.user.isDonatur ? ' <b class="cred">$</b>':'')+']';
	    $D('#button_preview').style.display = '';
	    gvar.current.QR_isLoaded = 1;
	  }
	  vB_textarea.init();
	  vB_textarea.Obj.style.height='100px';
	  if( gvar.current.qr_fetch!=vB_textarea.content )
	    vB_textarea.add(gvar.current.qr_fetch);
      
      // bukan di kaskus atao adalah donatur kaskus
	  if(gvar.user.isDonatur || !gvar.isKaskus){
	      // kill capcay container
	      Dom.remove('recapctha_header');
	      Dom.remove('recaptcha_cont');
		  
	  }else if( gvar.settings.recaptcha ){
	  
		// click to build recapctha & keep click to reload
        if(!$D('#recaptcha_response_field') ) SimulateMouse($D('#hidrecap_btn'), 'click', true);
        
	  }else{
        // kaskus capcay
        var rets = tQR.capcay_parser(reply_html);
        tQR.waitload_kaskusCaptcha( rets );
        
      }
	  ss.STEPS = 10; // scroll speed; smaller is faster
      ss.smoothScroll( Dom.g(gvar.id_textarea), function(){ snapTo() } );
	}
  }

 ,fetch_error: function(isQuote, msg){
    var el1,el0, notice, msg = (!msg ? 'Fetch failed, server might be busy. You might need to <a href="javascript:;" id="reload_this_page">reload this page</a> or <a href="javascript:;" id="try_again_now">Try again</a>' : msg);
	isQuote = (isUndefined(isQuote) ? false : isQuote);
	if( !isQuote ){
      notice = $D('#qr_container');	
	  notice.innerHTML = '<div class="g_notice-error g_notice" style="display:block;">'+msg+'</div>';
	}else{
      notice = $D('#quoted_notice');
	  addClass('g_notice-error', notice);
	  notice.innerHTML = msg;
	  notice.setAttribute('style','display:block;');	  
	}
	el0 = createEl('div',{style:'clear:both; margin-top:3px;'});
	el1 = createEl('a',{href:'javascript:;',title:'Close',style:'font-weight:bold'}, 'Close');
	on('click', function(){ tPOP.closeLayerBox() });
	Dom.add(el1, el0); Dom.add(el0, notice);	
	
	if($D('#reload_this_page')) on('click', $D('#reload_this_page'), function(){
		window.setTimeout(function() { location.reload(false); }, 100);
	});
	if($D('#try_again_now')) on('click', $D('#try_again_now'), function(){
	  if(notice) notice.innerHTML = '<div>' + _LOADING + '</div>';	  
	  window.setTimeout(function() { tQR.fetch(tQR.uri_lastFetch) }, 200);
	});
  }
 ,unescapeHtml: function(text){
    if(!text) return '';
    var temp = createEl('div',{},text);
    var cleanRet='', tL=temp.childNodes.length;
    for(var i=0; i<tL; i++){
       if(typeof(temp.childNodes[i])!='object') continue;
       cleanRet += temp.childNodes[i].nodeValue;
    }
    try{temp.removeChild(temp.firstChild);}catch(e){}
    return cleanRet;
  }
 ,parse_fetch: function(text){
    var cucok, re, ret={};
	if(text.indexOf('vbform')==-1) {
	   if(cucok = text.match(/<div\s*style=[\'\"]margin\:\s*10px[\'\"]>([^<]+)/im)){
	     return [false, cucok[1].replace(/\n|\r/,' ')];
	   }else{
	     return null;
	   }
	}
    var hidden_name = {
      "hash": "humanverify\\\[hash\\\]"
     ,"qr_securitytoken": "securitytoken"
     ,"qr_do":"do","qr_t":"t","qr_p":"p"
     ,"qr_specifiedpost": "specifiedpost"
     ,"qr_loggedinuser": "loggedinuser"
    };
    
    for(var hid in hidden_name){
      if(!isString(hidden_name[hid])) continue;
	  
	  re = new RegExp('name=\\\"'+hidden_name[hid]+'\\\"\\\svalue=\\\"([^\\\"]+)', "i");
	  if( cucok = text.match(re) )
	     if( Dom.g(hid) ) Dom.g(hid).value = cucok[1];
    } // end for   
    
    // conform capcay mode
    if(gvar.isKaskus && text.indexOf('recaptcha_response_field')!=-1 && text.indexOf('humanverify[input]')!=-1){
        if( /<input\s*(?:(?:type|value|style|id)=[\'\"][^\'\"]+[\'\"]\s*)*name=[\'\"]recaptcha_response_field/i.test(text) )
            gvar.settings.recaptcha = true;
        else if( /<input\s*(?:(?:type|value|style|id)=[\'\"][^\'\"]+[\'\"]\s*)*name=[\'\"]humanverify\[input\]/i.test(text) )
            gvar.settings.recaptcha = false;
    }
    // isDonatur check
    gvar.user.isDonatur = (gvar.isKaskus && 
            (gvar.settings.recaptcha ? (text.indexOf('recaptcha_response_field')==-1) : (text.indexOf('humanverify[hash]')==-1))
        );
    
	// additional opt
	tQR.build_additional_opt(text);
	
	// get textarea
    // this regexp failed on symbolize userid : http://bit.ly/9A9GMg
    //match = /<textarea\sname=\"message\"(?:[^>]+.)([^<]+)*</i.exec(text);    
    var parts, pos;   
    // back to stone-age method :hammer:
    if(text.indexOf(gvar.id_textarea)==-1) return null;
    pos = [ text.indexOf(gvar.id_textarea), text.lastIndexOf('</textarea') ];
    parts = text.substring(pos[0], pos[1]);
    pos[0] = parts.indexOf('>');
    parts = parts.substring( (pos[0]+1), parts.length);
	
	
    return (parts ? tQR.unescapeHtml(parts) : '');   
  }
 ,additional_opt_parser: function(html){   
   var pos = [html.indexOf('collapseobj_newpost_options'), html.lastIndexOf('</select')];
   var rets = html.substring(pos[0], pos[1]);
   var par_adt_opt = $D('#button_preview');
   pos[0] = rets.indexOf('<select');
   rets = rets.substring(pos[0], pos[1]);
   var selects = rets.split('</select'), sL=selects.length;
   for(var i=0;i<sL;i++){
     if(!isString(selects[i]) || !selects[i].match(/<select\sname\=/)  ) continue;
     var fdname, el, cucok = /<select\sname\=\"([^\"]+)/.exec(selects[i]);
     if(cucok && cucok[1]!='rating'){ // rating will be showed-up on qr-optional dropdown
       fdname = cucok[1];
       cucok = /<option\svalue\=\"([^\"]+)\"\sselected\=/.exec(selects[i]);
       opt_val = (cucok ? cucok[1] : '0');
       el = createEl('input', {name:fdname, value:opt_val, type:'hidden'});
       Dom.add(el, par_adt_opt);
     }
   }
  }
 ,buildRate: function(){
   var el,par,sel;
   var rates = { '5':'5: Excellent', '4':'4: Good', '3':'3: Average', '2':'2: Bad', '1':'1: Terrible' };
   par = createEl('div', {style:'float:left'}, ' '+HtmlUnicodeDecode('&#8212;') + ' Rating:&nbsp;');
   sel = createEl('select', {name:'rating',tabindex:'6'});
    Dom.add(sel, par);
   el=createEl('option', {value:0},'Choose a rating');
    Dom.add(el, sel);
   el=createEl('optgroup', {label:' '});
    Dom.add(el, sel);
   sel=el;
   for(var i in rates){
     if(!isString(rates[i])) continue;
     el=createEl('option', {value:i},rates[i]);
     Dom.add(el, sel);
   }
   return par;
  }
 ,build_additional_opt: function(html){
	// create rating, and hidden element of additional options
    tQR.additional_opt_parser(html);
    var rate = (html.indexOf('Rate this Thread..')!=-1 ? tQR.buildRate() : false);
    if($D('#rate_thread')){
      $D('#rate_thread').innerHTML= '';
      Dom.add(rate ? rate : createTextEl('Thread Rated'), $D('#rate_thread'));
	  $D('#rate_thread').style.display='';
    }
  }
 ,prepost_QR: function(){
    var ret, cp = ( gvar.settings.recaptcha ? $D('#recaptcha_response_field') : $D('#humaninput') );
    if(!cp) return;
    ret = (!cp || (cp && cp.value.trim()=='') ? false : true );
    if( !ret ){
      alert('Belum mengisi reCapcay, coy!');
      window.setTimeout(function() { cp.focus() }, 200)	 
    }
    return ret;
  }
 ,lockInput: function(flaglock){
    var el;
    if(isUndefined(flaglock)) flaglock = true; // do lock is default
    if(flaglock){
        vB_textarea.readonly();
        el = ( gvar.settings.recaptcha ? $D('#recaptcha_response_field') : $D('#humaninput') );
        if(el) {
          el.setAttribute('readonly',true);
          addClass('txa_readonly', el);
        }
        el = $D('#preview_submit');
        if(el) {
          el.setAttribute('disabled','disabled');
          addClass('gbtn-disabled', el);
          el.value='Posting...';
        }
        el = $D('#then_gotothread');
        if(el) {
          el.setAttribute('disabled','disabled');
          //addClass('gbtn-disabled', el);
        }
    } else {
        vB_textarea.enabled();
        el = ( gvar.settings.recaptcha ? $D('#recaptcha_response_field') : $D('#humaninput') );
        if(el) {
          el.removeAttribute('readonly');
          removeClass('txa_readonly', el);
        }
        el = $D('#preview_submit');
        if(el) {
          el.removeAttribute('disabled');
          removeClass('gbtn-disabled', el);
          el.value=' Post ';
        }
        el = $D('#then_gotothread');
        if(el) {
          el.removeAttribute('disabled');
          //addClass('gbtn-disabled', el);
        }
		if(gvar.current.oriText) {
		  Dom.g(gvar.id_textarea).value=gvar.current.oriText + "\n\n";
		  gvar.current.oriText = null;
		}
    }
	if($D('#tab_close')) SimulateMouse($D('#tab_close'), 'click', true);
  }
 ,buildQuery: function(){
    var hidden = getTag( 'input', $D('#vbform') );
    var ce,fld, el, q='';
	if(!gvar.isKaskus && $D('#qr_do'))
	   $D('#qr_do').value = 'postreply';
	   
    for(var h in hidden)
      if( typeof(hidden[h].getAttribute)!='undefined' && hidden[h].getAttribute('type')=='hidden' )
        q+='&' + hidden[h].getAttribute('name') + '=' + encodeURIComponent(hidden[h].value);
    q+= '&sbutton='+(!gvar.isKaskus?'Submit+Reply':'Reply+Post');
      
    if( gvar.settings.recaptcha ){
        ce,fld = ["recaptcha_challenge_field","recaptcha_response_field"];
        for(var i=0; i<fld.length; i++){
            ce=$D(fld[i]);
            if(ce) q ='&'+ce.getAttribute('name')+'='+encodeURIComponent(ce.value) + q;
        }
    }else{
        ce,fld = ["hash","humaninput"];
        for(var i=0; i<fld.length; i++){
            ce=$D(fld[i]);
            if(ce) q ='&'+ce.getAttribute('name')+'='+encodeURIComponent(ce.value) + q;
        }
    }
    
    var adtnl = [gvar.id_textarea, 'input_title']; // ids of textarea message and title and recaptcha
    el = Dom.g(adtnl[0]);
    if( el && el.value!='' && el.value!=gvar.silahken ){
      var msg = trimStr(el.value);
      msg = tQR.sCustom.parser(msg); // smiley parser...
      msg = tQR.template_wrapper(msg); // template & SiGi ntar ajah...
      q = '&' + el.getAttribute('name') + '=' + encodeURIComponent( toCharRef(msg) )  + q;
    }
    el = Dom.g(adtnl[1]);
    if( el && el.value!='' )
      q = '&' + el.getAttribute('name') + '=' + encodeURIComponent(el.value) + q;
    return q;
  }
 ,post: function(){
    var spost = tQR.buildQuery();
    clog(spost);
	tQR.lockInput(true);

	if(spost===false) {
	  show_alert('Upss, halted..::..e.3278', 0);
      return false;
    }
	GM_XHR.uri = gvar.current.action;
    GM_XHR.cached = true;
    GM_XHR.request(spost.toString(), 'POST', tQR.post_cb);
 }
 ,post_cb: function(reply_html){
    if( !reply_html ) return;
	reply_html = reply_html.responseText;
	
	var retpost = tQR.parse_post(reply_html);
	
	var notice = $D('#quoted_notice');
	if(retpost.error != 0){
	   addClass('g_notice-error', notice);
	   notice.innerHTML = retpost.msg.replace(/The\s*string/,'The '+(gvar.settings.recaptcha ? 're':'')+'Capcay');
	   notice.setAttribute('style','display:block;');
	   
	   tQR.parse_fetch(reply_html); // updating hidden value
	   tQR.lockInput(false); // reopen the hive :D
	   // reload capcay
	   SimulateMouse($D('#hidrecap_reload_btn'), 'click', true);
       return;
    }else{
	   var msg = 'Thank you for posting!';
	   Dom.remove( $D('#preview_submit') );
	   if(gvar.settings.then_goto_thread && isDefined(retpost.redirect) ){
	     msg+= ' Redirecting...';
		 tQR.after_post('redirect', function(){ location.href=retpost.redirect; });
	   }else{
	     msg+= ' Closing...';
		 tQR.after_post('close', function(){ 
		   tPOP.closeLayerBox('hideshow');
		   if(gvar.settings.reload_aftersent) window.setTimeout(function() { location.href = (location.href.replace(/\&page=\d+/,'')); }, 50);
		 });
	   }
	   $D('#qr_container').innerHTML = '<div id="quoted_notice" class="g_notice" style="display:block;">'+msg+'</div>';
	}

  }
 ,parse_post: function(text){
   var cucok, ret={error:0,msg:''};
   if(text.indexOf('POSTERROR')!=-1){
    // there's some error
	cucok = text.match(/<ol><li>([^\<]+)<\/li><\/ol>/i);
	if(cucok) ret = {error: 1, msg:cucok[1] };
   }else if( cucok = text.match(/<meta\s*http\-equiv=[\"\']Refresh[\"\']\s*content=[\"\']\d+;\s*URL=([^\"\']+)/i) ){
     // success
	 ret = {error: 0, redirect:cucok[1] };
   }
   return ret;
  }
 ,after_post: function(mode, fn){
    if(isUndefined(mode)) mode = 'close';
    gvar.blinkRow=5;
    var myvar = "";
    var mcallback = (typeof(fn)=='function' ? fn : null);
	window.status = (mode=='close' ? "Closing..." : "Redirecting...");
    gvar.sITryDonePost = window.setInterval(function() {
      myvar+= " .";
      window.status+= myvar;
      if(gvar.blinkRow > 0){
        gvar.blinkRow -= 1;
      }else{
   	    clearInterval(gvar.sITryDonePost);
        if(mcallback) mcallback();
      }
    }, 150); 
  }

// smilies
 ,create_smile_tab: function(caller){
  var parent = $D('#smile_cont');
  if(parent.innerHTML!='') {
    parent.style.display=(parent.style.display=='none' ? '':'none');
    force_focus(10);
    return;
  }
  var cont,el,el2,Attr,img,imgEl;
  var scontent = ['skecil_container','sbesar_container','scustom_container'];
  
  // create tabsmile
  cont = createEl('ul',{id:'tab_parent','class':'ul_tabsmile'});  
  // tab skecil
  el2 = createEl('a',{href:'javascript:;','class':'current',id:'remote_'+scontent[0]},'kecil');
  on('click', el2, function(e){ 
    tQR.toggle_tabsmile(e); 
    var tgt = Dom.g(scontent[0]);
    if(tgt && tgt.innerHTML=='')
        tQR.insert_smile_content(scontent[0],gvar.smiliekecil);
  });
  el = createEl('li',{'class':'li_tabsmile'});
  Dom.add(el2,el); Dom.add(el,cont);
  // tab sbesar
  el2 = createEl('a',{href:'javascript:;','class':'',id:'remote_'+scontent[1]},'besar');
  on('click', el2, function(e){
    tQR.toggle_tabsmile(e);
    var tgt = Dom.g(scontent[1]);
    if(tgt && tgt.innerHTML=='')
        tQR.insert_smile_content(scontent[1],gvar.smiliebesar);
  });
  el = createEl('li',{'class':'li_tabsmile'});
  Dom.add(el2,el); Dom.add(el,cont);
  // tab custom
  el2 = createEl('a',{href:'javascript:;','class':'',id:'remote_'+scontent[2]},'[+] ');
  on('click', el2, function(e){
    tQR.toggle_tabsmile(e);
    var tgt = Dom.g(scontent[2]);
    if(tgt && tgt.innerHTML=='')
        tQR.insert_smile_content(scontent[2],gvar.smiliecustom);
  });
  el = createEl('li',{'class':'li_tabsmile'});
  Dom.add(el2,el); Dom.add(el,cont);
  // tab close
  el2 = createEl('a',{href:'javascript:;',id:'tab_close',title:'Close Smiley'},'&nbsp;<b>X</b>&nbsp;');
  on('click', el2, function(){
    $D('#smile_cont').style.display='none';
	force_focus(10); 
    var obj = $D('#vB_Editor_001_cmd_insertsmile_img');
	if(obj){
      obj.style.backgroundColor='transparent';
      obj.style.border='1px solid transparent';
	}
    return; 
  });
  el = createEl('li',{'class':'li_tabsmile tab_close'});
  Dom.add(el2,el); Dom.add(el,cont);
  // tab more
  el = createEl('li',{'class':'li_tabsmile tab_close'},'<a href="javascript:;" onclick="open_win_smiley();" title="Show all smilie">[ More ]</a>');
  Dom.add(el,cont);
  
  Dom.add(cont,parent);
  // --- end tab creation ---
  
  // populate smiley set | custom smiley will also loaded from here
  rSRC.getSmileySet();  

  // (blank) container for smiley contents
  for(var i=0; i<scontent.length; i++){
    Attr={id:scontent[i], 'class':'smallfont', style:'display:none;' };
    cont = createEl('div',Attr);
    Dom.add(cont,parent);
  }
  
  if(gvar.settings.autoload_smiley[0]=='1'){
    var id= ('s'+gvar.settings.autoload_smiley[1]+'_container');
	var tS=gvar.settings.autoload_smiley[1], S=(tS=='besar' ? gvar.smiliebesar : (tS=='kecil' ? gvar.smiliekecil : (tS=='custom' ? gvar.smiliecustom : null) ));
	tQR.insert_smile_content(id, S);
    window.setTimeout(function() { SimulateMouse($D('#remote_'+id), 'click', true); }, 50);
  }else{
    tQR.toggle_tabsmile(Dom.g(scontent[0]));
    window.setTimeout(function(){
      SimulateMouse($D('#remote_'+scontent[0]), 'click', true); // trigger click tab for smiley kecil
      force_focus(10);
    }, 50);
  }
  parent.style.display='';
  
 }
 ,insert_smile_content: function(scontent_Id, smileyset){
  var target,dumycont,Attr,img,imgEl2,imgEl=false;
  var countSmiley=0;
  if(!scontent_Id || !smileyset) return;
  target = Dom.g(scontent_Id);
  target.innerHTML='';
  
  dumycont = createEl('div',{id:'loader_'+scontent_Id}, _LOADING);
  realcont = createEl('div',{id:'content_'+scontent_Id,style:'display:none;'});
  Dom.add(dumycont,target);
  Dom.add(realcont,target);
  if(smileyset){
    var adclass = (gvar.settings.scustom_alt ? 'ofont qrsmallfont nothumb' : 'scustom-thumb');
    for (var i in smileyset) {
     img=smileyset[i];
     if( !isString(img) ){
       if(scontent_Id=='scustom_container'){
          Attr={href:encodeURI(img[0]),title:'[['+img[1]+'] '+HtmlUnicodeDecode('&#8212;')+img[0],
		        src:img[0], alt:'_alt_'+img[1],'class':adclass };
          // gak pake thumbnail ?
          if(gvar.settings.scustom_alt) {
            imgEl = createEl('a',Attr,'[['+img[1]+']');
          }else{
            imgEl = createEl('a',Attr);
            Attr = {src:img[0], alt:'_alt_'+img[1]};
            imgEl2 = createEl('img',Attr);
            Dom.add(imgEl2,imgEl);
          }
       }else{
          Attr = {title:img[1]+' '+HtmlUnicodeDecode('&#8212;')+img[2],src:img[0],alt:img[1]};
          imgEl = createEl('img',Attr);
       }
       on('click', imgEl, function(e){ 
	      var C = e; e=e.target||e; tQR.do_smile(e); 
		  // stop default action
		  try{do_an_e(C);return false;}catch(ev){} 
	   });
       Dom.add(imgEl,realcont);
       countSmiley++;
     }else { // this is string and do replace to suitable value
       var sep, retEl= tQR.sCustom.validTag(img, true, 'view');
       if(!retEl) continue;
       if(retEl.nodeName=='B'){
         if(realcont.innerHTML!='') {
          sep = createEl('br', {});
          Dom.add(sep,realcont);
         }
         Dom.add(retEl,realcont);
         sep = createEl('br', {});
         Dom.add(sep,realcont);
       }else{
         Dom.add(retEl,realcont);
       }
     }
    }
	// make a dummy last-img that, avoid bad img on last element
	if( scontent_Id=='scustom_container' && !gvar.settings.scustom_alt) {
	    imgEl = createEl('a',{href:'javascript:;',style:'display:none;'});
        Attr = {alt:'dummy_last_img', src:gvar.domainstatic + 'images/editor/separator.gif' + '?'+String( Math.random() ).replace('0.','')};
        imgEl2 = createEl('img',Attr);
        Dom.add(imgEl2,imgEl);
		Dom.add(imgEl,realcont);
	}
  }

  if(countSmiley<=0){
    var el = $D('#loader_'+scontent_Id);
    if(el) try{ Dom.remove(el); } catch(e){el.style.display='none';};
    realcont.innerHTML = 'No Images found ';
    realcont.style.display='';
  } else {
    if(imgEl){
     // find last element
     var showContent = function(){
        el=$D('#loader_'+scontent_Id);
        if(el) el.style.display='none';
        el = $D('#content_'+scontent_Id);
        if(el) el.style.display='';
     };
     if( imgEl.firstChild && imgEl.firstChild.nodeName=='#text' || imgEl.height){
        showContent();
     }else{
        // imgEl will be IMG when scustom_alt=0, and TEXT when scustom_alt=1 
        if(imgEl.nodeName=='A') imgEl=imgEl.firstChild;
        on('load', imgEl, function(){ showContent() });
        // obj has beed loaded before this line executed
		if(imgEl.height) showContent();
     }
    }
  }
   
  // custom images ?
  if(scontent_Id=='scustom_container'){
    var el,cont;
    cont = createEl('div',{style:'margin-top:10px;padding:8px 0;border-top:1px solid #BBC7CE;'});
    el = createEl('a',{href:'javascript:;','class':'gbtn lilbutton',style:'padding:1px 5px;'},'Manage');
    Dom.add(el,cont);
    on('click', el, function(e){
      var imgtxta,obj,obj2,task,buff,cont_id = 'scustom_container';
      var mcPar=$D('#manage_container');
      e=e.target||e;
      task = e.innerHTML;	  
      if(task=='Manage'){
        if($D('#help_manage')) $D('#help_manage').style.display='';
        if(mcPar){
          mcPar.style.display=(mcPar.style.display=='none' ? '':'none');          
        }else{
          buff='';
          if(smileyset){
            var ret;
            for (var i in smileyset) {
             img=smileyset[i]; ret='';
             if( !isString(img) )
               buff+=img[1]+'|'+img[0]+'\n';
             else if(ret= tQR.sCustom.validTag(img, false, 'editor') )
               buff+=ret;
            }
          }
          mcPar = createEl('div',{id:'manage_container',style:'margin:0 3px 0 1px;'});
          Attr = {id:'textarea_'+cont_id,'class':'textarea txta_smileyset'};
          imgtxta = createEl('textarea',Attr,buff);
          Dom.add(imgtxta,mcPar);
          
          Attr = {'for':'scustom_alt',title:'Checked: Use tag instead of thumbnail'};
          obj = createEl('label',Attr,'Don\'t create thumbnail');
          Attr = {id:'scustom_alt',type:'checkbox'};
          if(gvar.settings.scustom_alt) Attr.checked = 'checked';
          obj2 = createEl('input',Attr);
          Dom.add(obj2,obj);
          Dom.add(obj,mcPar);
          
          Attr = {'for':'scustom_noparse',title:'Checked: custom smiley tag will not parsed'};
          obj = createEl('label',Attr,'&nbsp;&nbsp;&nbsp;Don\'t parse custom tag');
          Attr = {id:'scustom_noparse',type:'checkbox'};
          if(gvar.settings.scustom_noparse) Attr.checked = 'checked';
          obj2 = createEl('input',Attr);
          Dom.add(obj2,obj);
          Dom.add(obj,mcPar);
          
          Dom.add(mcPar, $D('#content_'+cont_id));
          try{ window.setTimeout(function() {imgtxta.focus(); imgtxta.scrollTop=imgtxta.value.length;}, 100); }catch(e){}
        }
      }else{
        // task save 
        var buff=false;
        var lastsave = getValue(KEY_KTP+'CUSTOM_SMILEY');
        var lastVal = [getValue(KEY_KTP+'SCUSTOM_ALT'), getValue(KEY_KTP+'SCUSTOM_NOPARSE')];
        imgtxta = $D('#textarea_'+cont_id);
        if(imgtxta)
           buff = tQR.sCustom.filter(imgtxta.value).toString();
        gvar.settings.scustom_alt = ($D('#scustom_alt').checked);
        gvar.settings.scustom_noparse = ($D('#scustom_noparse').checked);
        if( (buff && lastsave!=buff) || lastVal[0]!=gvar.settings.scustom_alt || lastVal[1]!=gvar.settings.scustom_noparse) {
          setValue(KEY_KTP+'SCUSTOM_ALT', (gvar.settings.scustom_alt ? '1':'0') ); //save custom alt
          setValue(KEY_KTP+'SCUSTOM_NOPARSE', (gvar.settings.scustom_noparse ? '1':'0') ); //save custom parser
          setValue(KEY_KTP+'CUSTOM_SMILEY', buff); //save custom smiley
          rSRC.getSmileySet(true); // load only custom          
          // re attach
          window.setTimeout(function() {
            tQR.insert_smile_content(cont_id, gvar.smiliecustom)
          }, 200);
        }
        //mcPar.style.display='none';
        Dom.remove(mcPar);
        if($D('#help_manage')) $D('#help_manage').style.display='none';
      }
      e.innerHTML = (task=='Manage' ? 'Save' : 'Manage');	  
    }); // end event click Manage-Save
    el = createEl('a',{id:'help_manage',href:'javascript:;','class':'gbtn lilbutton',style:'padding:1px 10px;margin-left:20px;display:none;',title:'RTFM'},'?');
    Dom.add(el,cont);
    on('click', el, function(){
	  alert( ''
       +'Each Smiley separated by newline.\nFormat per line:\n tag|smileylink'
       +'\n eg.\ncheers|http:/'+'/static.kaskus.co.id/images/smilies/sumbangan/smiley_beer.gif'
       +(!gvar.settings.scustom_noparse ? ''
       +'\n\nUse Custom Smiley BBCODE with this format:'
       +'\n eg.\n[[yourtag]' :'')
       +'');
	   try{
	    window.setTimeout(function() { $D('#textarea_scustom_container').focus(); }, 100);
	   }catch(e){}
    });
    Dom.add(cont,realcont);
  } // end when it's scustom_container
 }
 ,toggle_tabsmile: function(e){
   e=e.target||e; 
   if(!e) return;
   var elem = getTag('a',$D('#tab_parent'));
   for(var i in elem){ // hideall tab
     var id = elem[i].id;
     if(id && id.indexOf('remote_')!=-1) {
       showhide(Dom.g(id.replace('remote_','')), false); // hide container
       removeClass('current', elem[i]); // reset tab class
     }
   }
   var tgt=e.id.replace('remote_',''); 
   showhide(Dom.g(tgt), true);
   addClass('current',$D('#remote_'+tgt));
   force_focus(10);
 }
 ,do_smile: function(Obj, nospace){
  // action to do insert smile
  if(isUndefined(Obj)) return;
  var bbcode, link, tag, prehead;  
  //if(isUndefined(vB_textarea.Obj)) 
  vB_textarea.init(); // always to reupdate this.content
  if( Obj.getAttribute("alt") ) bbcode = Obj.getAttribute("alt");
  
  // custom mode using IMG tag instead
  if(bbcode.match(/_alt_.+/) || !gvar.isKaskus) {
    link=Obj.getAttribute("src");
    tag = 'IMG';
    prehead = [('['+tag+']').length, 0];
    prehead[1] = (prehead[0]+link.length);        
    vB_textarea.setValue( '['+tag+']'+link+'[/'+tag+']' + (!nospace ? ' ':''));
  }else{
    vB_textarea.setValue(bbcode + (!nospace ? ' ':'') );
  }
 }
// smilies-custom
 ,sCustom:{
    filter: function(text){
      var buf=text;
	  var sml,retbuf='',done = false;
	  var sepr = ','; // must be used on extracting from storage
      if(buf!=''){
        var tosingle = {
           '\\|{2,}' : '|'
          ,'(\\r\\n){2,}' : '\r\n{sctag:br}\r\n,'
          ,'(\\n){2,}' : '\n{sctag:br}\n'
        };
        // step -1 to strip
        buf = buf.replace(/[\[\]\,]/g,"");
        for(var torep in tosingle){
          if(!isString(tosingle[torep])) continue;
          re = new RegExp(torep, "g");
          buf = buf.replace(re, tosingle[torep])
        }
        // step -3 to validate per line    
        buf=(document.all ? buf.split("\r\n") : buf.split("\n")); // IE : FF/Chrome
        
        for(var line in buf){
           if(!isString(buf[line])) continue;
             buf[line] = trimStr ( buf[line] ); // trim perline
             sml = /([^|]+)\|(http(?:[s|*])*\:\/\/.+$)/.exec( buf[line] );
           if(sml && isDefined(sml[1]) && isDefined(sml[2]) ){ // smiley thingie ?
             retbuf+=sml[1]+'|'+sml[2]+sepr; // new separator
           }else if(sml= tQR.sCustom.validTag( buf[line], false, 'saving' ) ){ // valid tag ?
             retbuf+=sml+sepr;
           }
           done=true;
        } // end for    
      }
      return retbuf;
	}
   ,sanitize: function(text){
      var ret=text;
      var filter = [
         "[\\\"\\\'][\\s]*(javascript\\:+(?:[^\\\'\\\"]+))[\\\"\\\']"
        ,"((?:\\&lt;|<)*script(?:\\&gt;|>)*)"
        ,"((?:\\&lt;|<)*\\/script(?:\\&gt;|>)*)"
        ,"</?(?:[a-z][a-z0-9]*\\b).*(on(?:[^=]+)=[\\\"\\\'](?:[^\\\'\\\"]+)[\\\"\\\'])"
        ,"</?(?:[a-z][a-z0-9]*\\b).+(style=[\\\"\\\'](?:\\w+)\\/\\*[.+]*\\*\\/\\w+\\:[^\\\"]+\\\")"
        ,"<[\s]*>"
       ];
      var re, torep, do_it_again='';
      // need a loop until it's really clean | no match patern
      while( do_it_again=='' || do_it_again.indexOf('1')!=-1 ){
        do_it_again = '';
        for(var idx in filter){
         if(!isString(filter[idx])) continue;
         re = new RegExp(filter[idx], "ig");
         if(ret.match(re)){
          do_it_again+='1';
          torep = re.exec(ret);      
          if(torep && isDefined(torep[1]))
            ret=ret.replace(torep[1], '');
         }else{
          do_it_again+='0'; // must diff than (do_it_again=='')
         }
        }
      }      
      return ret;   
   }
   // mode = ['editor', 'saving', 'view']
   ,validTag: function(txt, doreplace, mode){
      if(!isString(txt)) return false;
      ret=txt;
      var re,cucok = false;  
      var matches = {
       "{title:(.+)}" : ['b', '$1'],
       "{sctag:(br)}" : ['br','']
      };
      var val;
      for(var torep in matches){
        re = new RegExp(torep, "");
        if(ret.match(re)){
          cucok=true;
          if(isDefined(doreplace) && doreplace){ // must be from view mode
            val=ret.replace(re, matches[torep][1]);
            val = tQR.sCustom.sanitize(val);
            ret = createEl(matches[torep][0],{},val);
          } else if(isDefined(mode) && mode=='editor') // editor mode and it's a BR
            if(torep=='{sctag:(br)}') {
              ret=txt.replace(re, '\n');
            }else{
              // guess it should be a title
              var title = re.exec(txt);
              if(re && isDefined(title[1])){
                val = tQR.sCustom.sanitize(title[1]);            
                ret='{title:'+val+'}\n'; 
              }else{
                ret=txt+'\n'; 
              }
            }
          break;
        }
      }
      return (cucok ? ret : false);              

   }
   ,parser: function(msg){
     // trim content and/or parse it
     msg = trimStr(Dom.g(gvar.id_textarea).value);
     if(!gvar.settings.scustom_noparse){
       //pmsg = do_parse_scustom(msg);
	   var pmsg = msg;
	   if(pmsg.length==0) return '';
       if(!pmsg.match(/\[\[([^\]]+)/gi)) return pmsg;
       var re,re_W,tag,done = false;
       var lastTag='';
       // prepared paired key and tag of custom image
       var paired = tQR.sCustom.prep_paired();    
       while(!done){
         tag = /\[\[([^\]]+)/.exec(pmsg);      
         if( tag && isDefined(tag[1]) && isDefined(paired['tag_'+tag[1]]) && tag[1]!=lastTag ){
             re_W = '\\[\\[' + tag[1].replace(/(\W)/g, '\\$1') + '\\]';
             re = new RegExp( re_W.toString() , "g"); // incase-sensitive and global, save the loop
             pmsg = pmsg.replace(re, '[IMG]'+paired['tag_'+tag[1]]+'[/IMG]');
             lastTag = tag[1];
         }else{
           done = true;
         }
       } // end while	   
       if(vB_textarea.Obj && pmsg!=msg){
	      Dom.g(gvar.id_textarea).value=pmsg;
		  msg=pmsg
	   }
     }
     return msg;
   }
   ,prep_paired: function(){
     var img,paired={};
     // preload smiliecustom database if needed
     if(!gvar.smiliecustom) getSmileySet(true); 
     for(var i in gvar.smiliecustom){
        img = gvar.smiliecustom[i];
        /** gvar.smiliecustom[idx.toString()] = [parts[1], parts[0], parts[0]];
        # where :
        # idx= integer
        # gvar.smiliecustom[idx.toString()] = [link, tags, tags];       */
        paired['tag_'+img[1].toString()] = img[0].toString();
     }
     return paired;
   }
 }
// template
 ,template_wrapper:function(txt){
   var oriTxt = gvar.current.oriText = (isUndefined(txt) ? trimStr ( Dom.g(gvar.id_textarea).value ) : txt);
   var tmsg=oriTxt;
   var tpl = decodeURIComponent(gvar.settings.userLayout.template);
   if(gvar.settings.userLayout.config[1] == 1 && tpl.match(/\{message\}/i) ) 
      tmsg = tpl.replace(/\{message\}/i, oriTxt);
   
   if(gvar.settings.userLayout.config[0] == 1){
      var newLines = count_Char('\\n', tmsg);
      var margin_sigi = (tmsg.indexOf('[QUOTE=')!=-1 ? (gvar.offSet_SiGi[0]-newLines) : (gvar.offSet_SiGi[1]-newLines) );      
      tmsg += gen_Char('\n', margin_sigi, ' ') + gvar.settings.userLayout.signature;
   }
   if(Dom.g(gvar.id_textarea) && tmsg!=oriTxt)
     Dom.g(gvar.id_textarea).value=tmsg;
   return tmsg; 
 }
}; // end tQR

var tSTORAGE = {
 setValueForId: function (userID, value, gmkey, sp){
    sp = [(isDefined(sp) && typeof(sp[0])=='string' ? sp[0] : ';'), (isDefined(sp) && typeof(sp[1])=='string' ? sp[1] : '::')];
    var i, ks = KEY_KTP+gmkey;
    var info = getValue(ks);
    if(!userID) return null;
    if(!info){
        setValue(ks, userID+"="+value);
        return;
    }
    info = info.split(sp[0]);
    for(i=0; i<info.length; i++){
        if(info[i].split('=')[0]==userID){
            info.splice(i,1,userID+"="+value);
            setValue(ks, info.join(sp[0]));
            return;
        }
    }
    info.splice(i,0,userID+"="+value);
    setValue(ks, info.join(sp[0]));
 }
 
 //values stored in format "userID=value;..."
 // sp = array of records separator
 ,getValueForId: function (userID, gmkey, sp){
    sp = [(isDefined(sp) && typeof(sp[0])=='string' ? sp[0] : ';'), (isDefined(sp) && typeof(sp[1])=='string' ? sp[1] : '::')];    
    var info = getValue(KEY_KTP+gmkey);
    if(!info || !userID)
      return null;
    info = info.split(sp[0]);
    for(var i=0; i<info.length; i++){
        if(!isString(info[i])) continue;
        var recs = info[i].split('=');
        if(recs[0]==userID){
            var rets = [userID];
            var values = recs[1].split(sp[1]);            
            for(var idx in values){
              if(!isString(values[idx])) continue;
              rets.push(values[idx]);
            }
            return rets;
        }
    }
    return null;
 }
 ,delValueForId: function (userID, gmkey){
  var ks = KEY_KTP+gmkey;
  var info = getValue(ks);
  info = info.split(';'); var tmp=[];
  for(var i=0; i<info.length; i++){
    if(info[i].split('=')[0]!=userID)
      tmp.push(info[i]);    
  }
  setValue(ks, tmp.join(';'));
 }
};



// ========
// common function
function controler_resizer(){
  gvar.maxH_editor = parseInt(GetHeight())-170;
  if(Dom.g('xcss_position')) Dom.g('xcss_position').innerHTML = rSRC.getCSS_fixed( gvar.settings.fixed_preview );
}
function findHighestZIndex(elem){
  var ret=0, zindex, elems = document.getElementsByTagName(elem);
  for (var i = 0; i < elems.length; i++) {
    zindex=document.defaultView.getComputedStyle(elems[i],null).getPropertyValue("z-index");
    if ((zindex > ret) && (zindex != 'auto')) 
      ret = zindex;    
  }
  return ret;
}
function getFetch(u, cb, cache){
  if(isUndefined(u)) return;
  cache = (isUndefined(cache) ? true : cache);
  // prep xhr request
  GM_XHR.uri = u; GM_XHR.cached = cache;
  GM_XHR.request(null, 'GET', cb);
}

/*
function chk_kfti_pos(){
  // try check KTFI, if it's fixed
  try{
   if($D('#TextInfo')){
     var tbL = getTag('table', $D('#TextInfo'));
	 if(tbL.length > 0) tbL = tbL[0];
	 gvar.fixed_ktfi = ( tbL.style.getPropertyValue('position') == 'fixed' );	
   }
  }catch(e){gvar.fixed_ktfi=false;}
  gvar.offsetLayer= (gvar.fixed_ktfi ? 38 : 20); // buat margin top Layer
}
*/
// delayed focus to textarea
function force_focus(delay){
	if(isDefined(vB_textarea)) return;
    if(isUndefined(delay)) delay=560;
    if(!vB_textarea.Obj) vB_textarea.init();
    window.setTimeout(function() {
      vB_textarea.Obj.focus();
    }, delay); // rite after dumy created, lost its focus
}
// end-common function

// domain guest
function domainParse(){
	var r, l = location.hostname
	return {"prot": location.protocol, "host": l, "statics" : l.replace(/^\w{3}\./i, 'static.')};
}

// 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 x.replace(/^\s+|\s+$/g,""); };

function on(m,e,f){Dom.Ev(e,m,function(e){typeof(f)=='function'?f(e):void(0)});}
function basename(path, suffix, tailcut) {
  // Returns the filename component of the path  
  // +   original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
  // *     example 1: basename('/www/site/home.htm', '.htm');    // *     returns 1: 'home'
  // *     example 2: basename('ecra.php?p=1');
  var b = path.replace(/^.*[\/\\]/g, '');
  if(typeof(suffix) == 'string' && b.substr(b.length-suffix.length) == suffix)
    b = b.substr(0, b.length-suffix.length);
  if(typeof(tailcut) == 'string')
    b = b.replace(new RegExp(tailcut+".*$", "g"), '');
  return b;
};
function toCharRef(text){
    var charRefs = [], codePoint, i;
    for(i = 0; i < text.length; ++i) {
        codePoint = text.charCodeAt(i);
        if(!text[i].match(/[\w\[\]\<\>\s\?\'\"\;\:\=\+\-\_\)\(\&\^\%\$\#\@\*\.\,\!\~\}\{\|\/\r\n]/)){
         if(0xD800 <= codePoint && codePoint <= 0xDBFF) {
            i++;
            codePoint = 0x2400 + ((codePoint - 0xD800) << 10) + text.charCodeAt(i);
         }
         charRefs.push('&#' + codePoint + ';');
        }else
          charRefs.push(text[i]);
    }
    return charRefs.join('');
};
function GetHeight(){
  var y = 0;
  if (self.innerHeight){ // FF; Opera; Chrome
     y = self.innerHeight;
  } else if (document.documentElement && document.documentElement.clientHeight){ 
     y = document.documentElement.clientHeight;
  } else if (document.body){
     y = document.body.clientHeight;
  }
  return y;
};
function do_an_e(A) {
  A.stopPropagation();
  A.preventDefault();
  return A;
};
function count_Char(chr, dstr) {
 var tFind = new RegExp(chr,"g");
 var ret = (dstr.length - parseInt(dstr.replace(tFind,'').length) );
 return ret;
};
function gen_Char(chr, len, pngotor) {
 var ret = '';
 if(isUndefined(pngotor)) pngotor = '';
 if(len<=0) return chr;
 for(var i=0; i<len; i++) ret+=pngotor+chr;
 return ret;
};
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){}
}
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 getValue(key) {
  var data=OPTIONS_BOX[key];
  return (!data ? '': GM_getValue(key,data[0]));
}
function setValue(key, value) {
  var data=OPTIONS_BOX[key];
  return (!data ? '': GM_setValue(key,value));
}
function showhide(obj, show){
  if(isUndefined(obj)) return;
  if(isUndefined(show)) show = (obj.style.display=='none'); // toggle mode
  obj.setAttribute('style','display:'+ (show ? '':'none') );
}
function getTag(name, parent){
  var ret = (typeof(parent)!='object' ? document.getElementsByTagName(name) : parent.getElementsByTagName(name) );
  return (isDefined(ret[0]) ? ret : false);
}
function HtmlUnicodeDecode(a){
 var b="";if(a==null){return(b)}
 var l=a.length;
 for(var i=0;i<l;i++){
  var c=a.charAt(i);
  if(c=='&'){
    var d=a.indexOf(';',i+1);
    if(d>0){
      var e=a.substring(i+1,d);
      if(e.length>1&&e.charAt(0)=='#'){
        e=e.substring(1);
        if(e.charAt(0).toLowerCase()=='x'){c=String.fromCharCode(parseInt('0'+e))}else{c=String.fromCharCode(parseInt(e))}
      }else{
        switch(e){case"nbsp":c=String.fromCharCode(160)}
      }i=d;
    }
  }b+=c;
 }return b;
};
function page_is_notloaded(t){
   var tg = getTag('title');
   return (tg && isDefined(tg[0]) && tg[0].innerHTML.indexOf(typeof(t)=='string' ? t : 'Page is temporary not available')!=-1);
}
function getScreenHeight(){
  var y = 0;
  if (self.innerHeight){ // FF; Opera; Chrome
     y = self.innerHeight;
  } else if (document.documentElement && document.documentElement.clientHeight){ 
     y = document.documentElement.clientHeight;
  } else if (document.body){
     y = document.body.clientHeight;
  }
  return y;
}
function getCurrentYPos() {
  if (document.body && document.body.scrollTop)
    return document.body.scrollTop;
  if (document.documentElement && document.documentElement.scrollTop)
    return document.documentElement.scrollTop;
  if (window.pageYOffset)
    return window.pageYOffset;
  return 0;
}

// end static routine
//=== BROWSER DETECTION / ADVANCED SETTING
//=============snipet-authored-by:GI-Joe==//
function ApiBrowserCheck() {
  //delete GM_log; delete GM_getValue; delete GM_setValue; delete GM_deleteValue; delete GM_xmlhttpRequest; delete GM_openInTab; delete GM_registerMenuCommand;
  if(typeof(unsafeWindow)=='undefined') { unsafeWindow=window; }
  if(typeof(GM_log)=='undefined') { GM_log=function(msg) { try { unsafeWindow.console.log('GM_log: '+msg); } catch(e) {} }; }
  
  var needApiUpgrade=false;
  if(window.navigator.appName.match(/^opera/i) && typeof(window.opera)!='undefined') {
    needApiUpgrade=true; gvar.isOpera=true; GM_log=window.opera.postError; show_alert('Opera detected...',0);
  }
  if(typeof(GM_setValue)!='undefined') {
    var gsv; try { gsv=GM_setValue.toString(); } catch(e) { gsv='.staticArgs.FF4.0'; }
    if(gsv.indexOf('staticArgs')>0) {
 	 gvar.isGreaseMonkey=true; gvar.isFF4=false;
	 show_alert('GreaseMonkey Api detected'+( (gvar.isFF4=gsv.indexOf('FF4.0')>0) ?' on FF4.0':'' )+'...',0); 
	} // test GM_hitch
    else if(gsv.match(/not\s+supported/)) { needApiUpgrade=true; gvar.isBuggedChrome=true; show_alert('Bugged Chrome GM Api detected...',0); }
  } else { needApiUpgrade=true; show_alert('No GM Api detected...',0); }

  gvar.noCrossDomain = (gvar.isOpera || gvar.isBuggedChrome);
  if(needApiUpgrade) {
    GM_isAddon=true; show_alert('Try to recreate needed GM Api...',0);
    //OPTIONS_BOX['FLASH_PLAYER_WMODE'][3]=2; OPTIONS_BOX['FLASH_PLAYER_WMODE_BCHAN'][3]=2; // Change Default wmode if there no greasemonkey installed
    var ws=null; try { ws=typeof(unsafeWindow.localStorage) } catch(e) { ws=null; } // Catch Security error
    if(ws=='object') {
      show_alert('Using localStorage for GM Api.',0);
      GM_getValue=function(name,defValue) { var value=unsafeWindow.localStorage.getItem(GMSTORAGE_PATH+name); if(value==null) { return defValue; } else { switch(value.substr(0,2)) { case 'S]': return value.substr(2); case 'N]': return parseInt(value.substr(2)); case 'B]': return value.substr(2)=='true'; } } return value; };
      GM_setValue=function(name,value) { switch (typeof(value)) { case 'string': unsafeWindow.localStorage.setItem(GMSTORAGE_PATH+name,'S]'+value); break; case 'number': if(value.toString().indexOf('.')<0) { unsafeWindow.localStorage.setItem(GMSTORAGE_PATH+name,'N]'+value); } break; case 'boolean': unsafeWindow.localStorage.setItem(GMSTORAGE_PATH+name,'B]'+value); break; } };
      GM_deleteValue=function(name) { unsafeWindow.localStorage.removeItem(GMSTORAGE_PATH+name); };
    } else if(!gvar.isOpera || typeof(GM_setValue)=='undefined') {
      show_alert('Using temporarilyStorage for GM Api.',0); gvar.temporarilyStorage=new Array();
      GM_getValue=function(name,defValue) { if(typeof(gvar.temporarilyStorage[GMSTORAGE_PATH+name])=='undefined') { return defValue; } else { return gvar.temporarilyStorage[GMSTORAGE_PATH+name]; } };
      GM_setValue=function(name,value) { switch (typeof(value)) { case "string": case "boolean": case "number": gvar.temporarilyStorage[GMSTORAGE_PATH+name]=value; } };
      GM_deleteValue=function(name) { delete gvar.temporarilyStorage[GMSTORAGE_PATH+name]; };
    }
    if(typeof(GM_openInTab)=='undefined') { GM_openInTab=function(url) { unsafeWindow.open(url,""); }; }
    if(typeof(GM_registerMenuCommand)=='undefined') { GM_registerMenuCommand=function(name,cmd) { GM_log("Notice: GM_registerMenuCommand is not supported."); }; } // Dummy
    if(!gvar.isOpera || typeof(GM_xmlhttpRequest)=='undefined') {
      show_alert('Using XMLHttpRequest for GM Api.',0);
      GM_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;
  }; } } // end needApiUpgrade
  GM_getIntValue=function(name,defValue) { return parseInt(GM_getValue(name,defValue),10); };
}
// ----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);
}
// -end static
// -----------

//========= Global Var Init ====
var GM_addGlobalScript=function(script, id, tobody) { // Redefine GM_addGlobalScript with a better routine
  var sel=createEl('script',{type:'text/javascript'});
  if(isDefined(id) && isString(id)) sel.setAttribute('id', id);
  if(script.match(/^https?:\/\/.+/))
    sel.setAttribute('src', script);
  else
    sel.appendChild(createTextEl(script));
  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;
};
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;
};
// 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;
};

// 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 )
      NAT_xmlhttpRequest( pReq_xhr );
    else
	  GM_xmlhttpRequest( pReq_xhr );	  
  }
};
// utk cek update (one_day = 1000*60*60*24 = 86400000 ms) // milisecs * seconds * minutes * hours
// customized from FFixer & userscript_updater
var Updater = {
  caller:''
 ,check: function(forced){
    var intval = (1000*60*60*gvar.settings.updates_interval);
    if((forced)||(parseInt(getValue(KEY_KTP+"LAST_UPDATE", "0")) + parseInt(intval) <= (new Date().getTime()))) {
     gvar.updateForced = forced;
	 if(!forced) Updater.caller='';
     // prep xhr request
     GM_XHR.uri = 'http://'+'userscripts.org'+'/scripts/source/'
       + gvar.scriptMeta.scriptID + '.meta.js';
     
	 GM_XHR.cached = false;
	 GM_XHR.forceGM = true;
     GM_XHR.request(null,'GET',Updater.callback);
    }
  }
 ,callback: function(r){
    if(r===null) return;
    setValue(KEY_KTP+"LAST_UPDATE", new Date().getTime() + "");
	if(Dom.g(Updater.caller)) 
	  Dom.g(Updater.caller).innerHTML = 'check now';
    if (r&&r.responseText.match(/@timestamp(?:[^\d]+)([\d\.]+)/)[1] > gvar.scriptMeta.timestamp) { 
      Updater.initiatePopup(r.responseText); 
    } else {
      Updater.notify_done(false);
      if (gvar.updateForced)
        alert("No update is available for Thread-Preview.");	  
    }
  }
 ,initiatePopup: function(rt){
    Updater.meta=Updater.mparser(rt);
	Updater.showDialog(
       '<img id="nfo_version" src="'+gvar.B.news_png+'" class="qbutton" style="float:left; margin:3px 5px 0 2px;padding:3px;"/> '
	  +'<b>New'+' '+gvar.codename+'</b> (v'+ Updater.meta.cvv[1]+') is available'
      +'<div style="float:right;margin:9px 0 0 15px;"><a class="qbutton gbtn lilbutton" href="http://'+ 'userscripts.org'
      +'/scripts/show/'+gvar.scriptMeta.scriptID+'" target="_blank" title="Goto '+gvar.codename+' Home">Home</a></div>'
      +'<div style="float:right;margin-top:9px;"><a id="do_update" class="qbutton gbtn lilbutton" href="javascript:;"><b>Update</b></a></div>'
      +'<div style="margin-left:22px;">Wanna make an action?</div>'
    );
    on('click', $D('#upd_close'), function(){ Dom.remove('upd_cnt') });    
    if($D('#upd_notify_lnk')) on('click', $D('#upd_notify_lnk'), function(){
       if($D('#upd_cnt'))
         Dom.remove('upd_cnt');
       else{         
         Updater.notify_progres();
         Updater.check(true);
       }
    });    
    on('click', $D('#do_update'), function(){
      GM_openInTab('http://'+'userscripts.org'+'/scripts/source/'+gvar.scriptMeta.scriptID+'.user.js');
      window.setTimeout(function(){ Dom.remove('upd_cnt'); }, 1000);
    });    
  }
 ,showDialog: function(inner){
    var Attr, el;
    if($D('#upd_cnt')) Dom.remove($D('upd_cnt'));
    Attr = {id:'upd_cnt','class':'tborder qrdialog',style:'position:fixed;z-index:999999;'};
    el = createEl('div', Attr);
    getTag('body')[0].insertBefore(el, getTag('body')[0].firstChild);
    
    Attr = {'class':'qrdialog-close'};
    el = createEl('div', Attr, '<a id="upd_close" class="qbutton" javascript:; title="Close"><img src="'+gvar.domainstatic+'images/misc/menu_open.gif" /></a>');
    Dom.add(el, $D('#upd_cnt'));

    Attr = {id:'upd_child','class':'qrdialog-child'};
    el = createEl('div', Attr, inner);
    Dom.add(el, $D('#upd_cnt'));
	// nfo news
	if( Updater.meta.news ){
	  $D('#nfo_version').setAttribute('title', 'What\' New...');
	  $D('#nfo_version').style.setProperty('cursor', 'pointer', '');
	  on('click', $D('#nfo_version'), function(){ alert( gvar.codename+'\n\n== Last LOG Update ==' + Updater.meta.news );});
	}
    
    Updater.notify_done(true);
 }
  
 ,notify_progres: function(caller){
    if($D('#upd_notify'))
	  $D('#upd_notify').innerHTML = '<div id="fetch_update" class="ktp-loading" style="display:inline-block; margin: 0 0 2px 5px;"></div>';
	if(Dom.g(caller)) {
	  Updater.caller=caller;
	  Dom.g(caller).innerHTML='checking..'; // OR check now
	}
 }
 ,notify_done: function(anyupd){
    if($D('#upd_notify')){
	  $D('#upd_notify').innerHTML = (anyupd ? '<a id="upd_notify_lnk" href="javascript:;" title="Update Available"><img style="position:absolute;margin:-5px 0 0 5px;" src="'+gvar.B.updates_png+'" width="17" border="0"/></a>':'');
      if($D('#upd_notify').innerHTML==''){
        $D('#upd_notify').innerHTML=' <small class="normal_notice">No Update Available</small>';
        window.setTimeout(function(){ $D('#upd_notify').innerHTML=''; }, 4000);
      }
	}
 }
 ,mparser: function(rt){
	return {
     tv:rt.match(/@timestamp(?:[^\d]+)([\d]+)/)||[null],
     cvv:rt.match(/@version(?:[^v\d]+)([\d\.\w]+)/)||[null],
     news:(function(x){
	      var wrp=['// -!--latestupdate','// -/!latestupdate---'];
	      var p=[x.indexOf(wrp[0]), x.indexOf(wrp[1])];
		  return (p[0]!=-1 && p[1]!=-1 ? String( x.substring(p[0]+wrp[0].length, p[1]) ).replace(/\/+\s*/gm, function($str,$1){return " ";}) : '');
	    })(rt)
    };	
  }
}; // -end Updater

/* Modified Smooth scrolling
   Todd Anglin  14 October 2006, sil, http://www.kryogenix.org/
   v1.1 2005-06-16 wrap it up in an object
*/
var ss = {
  smoothScroll: function(anchor, cb) {
    var cypos, ss_stepsize, desty=0;
    if(typeof(anchor)=='number'){
        desty = anchor;
    }else{
        var destinationLink = anchor;
        // If we didn't find a destination, give up and let the browser do its thing
        if (!destinationLink) return true;
        // Find the destination's position
        desty = destinationLink.offsetTop;
        var thisNode = destinationLink;
        while (thisNode.offsetParent && (thisNode.offsetParent != document.body)) {
            thisNode = thisNode.offsetParent;
            desty += thisNode.offsetTop + gvar.offsetTop;
        }
    }
    // Stop any current scrolling
    clearInterval(ss.INTERVAL);
    
    // check is there any callback
    ss.callback = (typeof(cb)=='function' ? cb:null);

    cypos = ss.getCurrentYPos();
    ss_stepsize = parseInt((desty-cypos)/ss.STEPS);
    
    ss.initPos = (cypos < desty);
    ss.INTERVAL = setInterval( function(){
        ss.scrollWindow(ss_stepsize,desty,anchor)
    }, 8);
    
  },

  scrollWindow: function(scramount,dest,anchor) {
    var wascypos = ss.getCurrentYPos();
    var isAbove = (wascypos < dest);
    window.scrollTo(0,wascypos + scramount);
    var iscypos = ss.getCurrentYPos();
    var isAboveNow = (iscypos < dest);
    //show_alert('wascypos:'+wascypos+'; '+'isAbove:'+isAbove+'; '+'iscypos:'+iscypos+'; '+'isAboveNow:'+isAboveNow);
    if ((isAbove != isAboveNow) || (wascypos == iscypos) || (isAbove == isAboveNow && (ss.initPos!=isAbove || ss.initPos!=isAboveNow)) ) {
      // if we've just scrolled past the destination, or
      // we haven't moved from the last scroll (i.e., we're at the
      // bottom of the page) then scroll exactly to the link
      //  additional conditional if user scrolling will prevent of dead end scrollpage
      window.scrollTo(0,dest);
      // cancel the repeating timer
      clearInterval(ss.INTERVAL);
      // and jump to the link directly so the URL's right
      //if(isString(anchor)) location.hash = anchor;
      if(ss.callback) ss.callback();
      return;
    }
  },

  getCurrentYPos: function() {
    if (document.body && document.body.scrollTop)
      return document.body.scrollTop;
    if (document.documentElement && document.documentElement.scrollTop)
      return document.documentElement.scrollTop;
    if (window.pageYOffset)
      return window.pageYOffset;
    return 0;
  }
};
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');

    if($D('#recaptcha_response_field')) $D('#recaptcha_response_field').removeAttribute('disabled');
    removeClass('txa_readonly', this.Obj);
    addClass('txa_enable', this.Obj);
  },
  focus: function(){
    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();
   if(isUndefined(this.cursorPos[0])) this.rearmPos();
   // 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() {
    if(isUndefined(this.cursorPos[0])) this.rearmPos();
    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){
    if(isUndefined(this.cursorPos[0])) this.rearmPos();
	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]) );
    this.Obj.scrollTop = (this.last_scrollTop+1);
    return bufValue; 
  },
  wrapValue : function(tag, title){
    if(isUndefined(this.cursorPos[0])) this.rearmPos();
	var start=this.cursorPos[0];
    var end=this.cursorPos[1];
    tag = tag.toUpperCase();    
    var 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 );    
    this.Obj.scrollTop = (this.last_scrollTop+1);
    return bufValue; 
  },
  replaceSelected : function(text, ptpos){
    if(isUndefined(this.cursorPos[0])) this.rearmPos();
	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]) );
    this.Obj.scrollTop = (this.last_scrollTop+1);
  },
  
  setElastic: function(tid,max,winrez){
    if(isUndefined(tid)) tid=gvar.id_textarea;
    function setCols_Elastic(max){var a=Dom.g(tid);a.setAttribute("cols",Math.floor(a.clientWidth/7));setRows_Elastic(max)}
    function setRows_Elastic(max){var a=Dom.g(tid),c=a.cols,b=a.value.toString(),h;b=b.replace(/(?:\r\n|\r|\n)/g,"\n");for(var d=2,e=0,f=0;f<b.length;f++){var g=b.charAt(f);e++;if(g=="\n"||e==c){d++;e=0}}h=(d*14);a.setAttribute("rows",d);a.style.height=h+"pt";vB_textarea.oflow=(max&&(d*14>(max-130))? 'auto':'hidden');a.style.setProperty('overflow',vB_textarea.oflow,'');}/*134*/
    var a=Dom.g(tid) || this.Obj;
    vB_textarea.oflow='hidden';
    a.setAttribute('style','overflow:'+vB_textarea.oflow+';letter-spacing:0;line-height:14pt;'+(max?'max-height:'+(max-130)+'pt;':''));
    if( !winrez ) on('keyup',a,function(){setCols_Elastic(max)});
    window.setTimeout(function(){setCols_Elastic(max)}, 110);
  }  
};
//== end Global Var ==


var rSRC = {
 getSetOf: function(type){
  if(isUndefined(type)) return false;
  switch(type){
    case "button":
     return {
      smile_gif : ""
        +"data:image/gif;base64,R0lGODlhEwATAOYAAAAAAP///z5ivnKY26bP+f3tTPzlTPznTPviWfveTPvbXfvVTPvXTPnOTPvde5x7IfvUX829kP3qt6GZgaig"
        +"iPnGTPnITPrNXfvWe/zhm6+nksO7p8ajV/ven7Wmha+hg6+ihq+jiLyxl/3uzdDIt/i+TPi/TfjFXPrSf/3nu8m7n8O2ncq9pP3u0XpQB/vcpfznv9DCqP7u0u"
        +"TYwve6Vfi8V/jAYd28huPFlePLov7kuP7t0f7v1v3u1evgzvi9aPrPkePPsP3mxf7w2/7x3v7y4P7y4fi5Yfe6ZP3myP7v2/7x3/Lm1v7y4v7z5P705v726/i9"
        +"c/e8dsSWX/rFh/nKkvznzP7u2v716v7w4P7y5fnHksWWbsWfgMWfg8Whh0gRBP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
        +"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAGEALAAAAAATABMAAAfZgGGCg4SFhoeEPiohIB8eiIMzExQsQTk"
        +"4N5BhKxpMS0RFRjs6kCIkTk9QT0ZDPDKCLi6EMRtKTVhaWVc9LSNhsbGwsUlgxVZCMCkSvyVbsrE0LmBeX11gLx0ZYMzOvzTRXFtVQFMoGA4c3M80zlRSPzYn"
        +"FxAKCOq/W85RSDUmFg0MEhxQFyufiyM0SlRosCCBgQK/XLBzYdDFg4sYMcJiV/HBgAABCIAUGSCixIouCAgIORIksG/5nMVSKaCmTYnQKjp7wLKnxGjAKMq82D"
        +"LAT6AxZYaJkPFBIAA7"
     ,loading_gif : ""
        +"data:image/gif;base64,R0lGODlhCwALALMIAEdHRyQkJGtra7Kyso+Pj9bW1gAAAP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH/C05FVFNDQVBFMi4wA"
		+"wEAAAAh+QQFAAAIACwAAAAACwALAAAEJBBJaeYMs8pz6bYIVnFgKQEoMBVsYZoCQiADGMtSLd14Xs6WCAAh+QQFAAAIACwAAAAACwALAAAEJBBJGeYEs0pz6bYIV"
		+"nFgKQmoMB3sYZoEMiAFGMtSLd14Xs6WCAAh+QQFAAAIACwAAAAACwALAAAEJBBJCeYUs8pw6bYIVnFgKREoMRmsYZoDUiAHGMtSLd14Xs6WCAAh+QQFAAAIACwAA"
		+"AAACwALAAAEJBBJKeYks0pw6bYIVnFgKQ3oMAVsYJoFciAGGMtSLd14Xs6WCAAh+QQFAAAIACwAAAAACwALAAAEJBBJSeYcs0px6bYIVnFgKRVoMQEsYJoHYiABG"
		+"MtSLd14Xs6WCAAh+QQFAAAIACwAAAAACwALAAAEJBBJOeYss0py6bYIVnFgKR3oMQmsYJoGEiAAGMtSLd14Xs6WCAAh+QQFAAAIACwAAAAACwALAAAEJBBJWeY8s"
		+"8px6bYIVnFgKRmoMREsYZoBAiACGMtSLd14Xs6WCAAh+QQFAAAIACwAAAAACwALAAAEJBBJeeY0s8py6bYIVnFgKQVoMA3sYJoAIiAEGMtSLd14Xs6WCAA7"
     ,setting_gif : ""
        +"data:image/gif;base64,R0lGODlhGQAYAPcAABweHISKjMTCxFRWVASi7KSmpNze3HRydDw6PJyanLS2tMzS1Hx+fKyurIySlGRmZExKTCwuLOzu7NTa3MzKz"
		+"KSmrJyipISGjFxeXOTm5Hx6fERCRLy+vNTW3ISGhJSWnCQmJIyOjNze5HR2fJyepLS2vNTW1Hx+hKyutJSWlGxubFRSVDQ2NMzO1KSqrIyKjMTGxFxaXKSqpHR2d"
		+"Dw+PJyenNTS1JSSlGxqbExOTDQyNPTy9Nza3MzOzKSipGRiZERGRCwqLOTi5Ly6vISChLSytKyqrAAAAP93CP8AAgAAAAEAAAAAWAAACgAALwAAAJhFCAMA7AAAE"
		+"gAAAHxQXeYK1wEvJgEAd3QAYuUADxIq4gAABtDwzLgM6y8vEgAAAGAuaPtnABJpagBmAF0ARNcAOiYAXHcAAAIhcw+tZeKHcgZ2c/4AU/8B3/8Ah/8Adt8ArDEAYi"
		+"oABXcA09iMAC3nACoSAHcAAACXAAA7AAAqAAB3ANCciLg7Yi8qLQB3ANCmALjhYC/aLQBxAKEAVB8A6CoAEncAAAAAEQABAQAAAAAAAMghsLit6C+HEgB2AIBkmuf"
		+"nkxISjgAAdrwAdMIAVYcAkHYApQCs/gBt/yoF/wDT/wC0UwDn3wAShwAAdtCRSbis2C+HhwB2dgAAiAAAYgAALQAAAAAAPgEA0gAAiAAAdsvo7MK1YocmBXZ308zq"
		+"AOfhABLaAABxANB5ALjpAC8SAAAAAAwMAJ6hAEFPAHcAAAFBAAAAAAAAAAAAAwIAAX8AAAAAAAAAAC6UkG/n6HISEmcAAFwMzWmhq21PumEA3GdgYGX7+3MSElwAA"
		+"ABdmubXkxImjgB3drBiZG8NWJLin3YGpQL+/gD//wD//4D//5joPkG10pMmiHZ3dgBbiAB/gQCKQgB2ABnciADoYgISLQAAANhrAOZ/ABKKAAB2AByNeW+t6ZKHEn"
		+"Z2AEABMc0ArYgAh3YAdgAx8AAAYgAABQAC00RIMTq2rQA5hwAAdlIuamVncXBpSGxmACH5BAEAAAQALAAAAAAZABgARwj/AAkQ8JGiho8CBSoUMJKwgAyFBQymECiQ"
		+"x4gZKhRQUGDjxQMcM3D8EECEQY8hNXowUKEBxYIVNGJAoLEBwYAYMX780IABJwsELDZgWLFhBIwaDYwkbdBAQREZNoxsNFKE6VIjNUiImDFDw4sICGbceJEiQdkUHh"
		+"DQYMHCgwqcAVaqmPGhBw8FGlZEiAAiSAQgGhSY6FFDw9wbFkjAoACj8eLHjhszdkxhYscUIW6EoNDAhwQbEkL3yECBSA/MKV6EKGEgxoMhDTi8WDEAw4ABKzz4WBF"
		+"jBQYFN2q8yJFgAgYaBwbQWHug648cODTMOLDhJ5ADQTUUGSLEQAMiLzYA/xG/gXz1DSE8NMhgQMEMgVwZ8DTiHkSEICAA4FBg5EdXBj7AIJAPUtnQgw0GDoYggj2"
		+"Y0AKDLRgh0BA+cDDEhRdaOISGG3aYIQc+eNBCWT7UUIMRCXCUwg4NSGCEETaYSIKJPoRQxAQvaOBBAhoYkQEPJhgRAhFEwPAjkBoQ6YF2E4SEAwY9cDCATk/+oEIP"
		+"D0w5RAs3xIDDAwWIsIIODxhxQA03DAAEET40UEQIEAABBAI/FHADCxA4wMMKOHjwA1ssqPCCBx4MOugDP7GAwQsMPHBCByE9AAQNCGyAw5c5ePCACpeqoMIBl345g"
		+"gArFAAnBgggAMQKOazwwwCtAlDxEwYb3JDACjMkwF0GPyoQAhAg/AQUCzoA8UIDPGQghBBDeEDADAzI90ARFNQQAxA63IdADAlsBFK0PjBAEQMvIMWBAOgKcC4H62"
		+"K4kUABAQA7"
     ,closepreview_png : ""
        +"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABwAAAAfCAYAAAD0ma06AAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1h"
        +"Z2VSZWFkeXHJZTwAAAY1SURBVHjapFZbbFRVFN0zd6Yz08dMoUNf9EGxUItJK62I4AOJEYiQoqE+0OgHCiqG+PgQozH6ofyIJiYEMRqNJpggHySlrRM+hCAtaj"
        +"AUaGgEi9BBSilMO0PnfWeOa597bjt9AEVvsubOPWefs/br7H0sQgj6P4/FYrk9+WkSuoAHgCrgLvV9DLgMdID02rQZmfAmaAJaxS2edDr9s67rL7EB/9XCUuAL"
        +"oEl+pZJEvTAo8A9s6iVKxojKYWheAWxuIMr2GGKp1KHh4eF3vF4vW59me6ZD2Ajsle6LXify7SI68iNROIgtIKtpBvQEB5DI7iC6Zw3Rmi1EM0vlBsFg8OX8/P"
        +"xvWQdFKm5E2KhiQ9R9iOjL17E6QFRUhAGQpFNjklYrhhT6YbndTtT8LtGjG+T0lStXNhcVFTGpnkE8jpAT4hdgNvm+Ivr+AyIHtM+Fu3Ss0RUZO8pqqos/NiDL"
        +"blgcQO48/CzRpk/l9KlTp56oq6s7gL8JkzST0AespN9/Itq2Hu7xQnsbRFOcWSBKT50FVpMUHrBD/iKsXb+V6KmtFI/H/3Q6nZzdEZPU1PVFSXbtEoltz0Nzm2"
        +"HRqleIvjsLa/9CoiSnBs99cwaym4lCYSRSHr4/REg64SBHTX9//2fqGNmVevJ5jn/0Xe+Rhd2SBVdGkInr3hizZI8fOibGg8fM5/EthgIJwxPJ7a/Jd05Ozn14"
        +"uQEHGRGXsVtOIwHS2nbDlTOIYlHoMoUL9w0Q/GSA/0/KeXglFmEWsp/uIjp9FAbnzWttbV3H3ECWFWdnubTuSBulQ9AwDs2jcSPGby6evGn7sIGJzwuzDUViMe"
        +"kdAZ0jrXvlVGVl5RK8ctlKq6ZpHFSKdBzCwSVjQRILAzh3508TPe29dbl6ZibiB/lrQeWBGFmykGe/dcjpwsLCeuVWpw1ZWskFWO/rM45ZNGWkPXt0ZIR/iJbi"
        +"gHfeoOYuU9UsbmbtWI2x+i+acWSt8yShCiaJVFwq50zeZrsYmapAgz/KFCmzo2gqhk7WJ8SDCY+bomF2qdI2E3/cpKPwXKYs1qdAlozwnjlSJBaLcbVxyqRBlT"
        +"8rB+fUkJuzGotEXB1TRvc02hfLKHk9btT6BCyPzJ0rpwcGBoLqHGpWVIMjsmLVPkTZhXgbMacUW3pGTB2z+4HA5fHjkE3EDELeYyaSJjx/qZzq6uq6pKJrsR4/"
        +"flwSeh98mIbmVpET7khBU20qw+4GEbda1ndZyaTpLDLWOtnSchdZVj4pxw8fPuzPLOD2SCSylxvpr9u3C1GDylkClAM73xrrsnfiu4JErMCAqAIW0Nj8DsiWkt"
        +"BnGXJdr24QiURCTuXm5n4MnmZWmQm1EydOPMITg4ODom/VEiHKsGgOyQ14sSQvJhF2j8eoYhXGvPzGmqF7K0V3d7ckQ5XhHHkbeAyoNU9ODpqmvEp0dHSIQEOV"
        +"sRhWjGSTuOq4OQJOMpQEWXS+RxzYs0cgGSUhCvgO7L+Jg6DKqLyHOGpra0tYgAV9Pp/oX1wnBLunXlnrgVXYfEAzEMzCmFsRLSIpG6opFa27d4twOCzJWlpa2L"
        +"r3lTsXAiUmIRcAN1z6Awuy7zs7O8WxjRtFvDDH2JhJG4ClCo1AtUGq59tEz9q1UlGTrK2t7QL2/ATYKJsDUTUwQzZgVAKrSrI89K+dxcXFzbiJUR/K3cmTJ2nW"
        +"wYNUcfQoeS+cJcdwQGZeIjuHAmV30KWGBjq/YgUtWLiQqquryWazUXt7u3/16tX7IIYbF50D+vjWwUXGJLQYlxZZDdx+v//zsrKyZtnX0ONwcAnWUygUQhtMSE"
        +"LeGK2HCgoKqKSkhNDZ5fj+/fvPNTU1teDvBQW/IuMWEx29g6rkYSv5zlfu8Xgae3p6fGKaD1z4N0i/xtqPALR/WgssAuawK1XNto7eaZSVVhVPl6ruM9Baiuvr"
        +"6+fBzRUul2sWxPKQWA5Yqg0NDekIwfXe3t4h3EfZ10PAVWXRIMBj16VlRvFLj7smTiB1qArPxPnKcrdqpE5VG0lVEC6EYdUIgsp9ITXGc0mzaU26CGeQampTp7"
        +"I4W8GlXK/R2MUxoTaOZMAk0jNv4VNe9RXpRGK7IrIrD2QS6mrzpCKfSDRK8q8AAwCF/L1ktjcKFAAAAABJRU5ErkJggg%3D%3D"
      ,twbutton_gif : ""
        +"data:image/gif;base64,R0lGODlhCgBYAsQfAPPz8+vr6/7+/uHh4fn5+eXl5d7e3vv7++jn6Ofo5/j4+Ojo6d/g4Ofn59/g3+Pk5OPj4/f29vv7+vz7/ODf3/"
		+"Dw8Pb29vv8+/z8/ODf4O/v7+fn5unp6N/f3+Dg4P///yH5BAEAAB8ALAAAAAAKAFgCAAX/oCCOZGmeIqau7OG6UiwdRG3fSqTs/G79wCDAMiwSiYCkUllpOp+aqHQ"
		+"a0FSvVmtgy+VyvoEvZxFeIBKLRQK93rg3hbf7UaAX6vQHZM/vD/6AgR6DhIUdBgaHHYuLiI6PkJEfk5SVlpeYmZqbnJ2en6ChoqOkpaanqKmqq6ytrq+wsbKztLW2"
		+"t7i5uru8vb6/wMHCw8TFxsfIycrLwijOz9DRLNMYEy8u1jAy2zM33gQ94TkR5OQW5UHpQElH7Evv8O9P8xVT9VL3U/pXW1ld/wABihko5kyDBAgaIFCTYEMDOQ7d3"
		+"JlIEY+eBxgx9tm4J5DHAR4+hvSQoQMFDwwKzzFgtIiCA0aPDiGSGammJGY4c+rcybOnz59AgwodSrSo0aNIkypdyrRps2hQo0otoUIANRUTLhyYgOHAha4utIa9NkM"
		+"GjAMxvEnAocBGW3A94O7QMW6ujwg/8ALRq+6HEXd+4wkeXGEJvcOH9SleLAWL44CQIwskGOZLmgVj0mQ+eDDhmYQNHoZ2M/oOHNMVU9/JmBGCRo4b//AZMPujx5CCc"
		+"IMktLsDgwwOUHro4GAly+OJaM60yfyR0+fQo0ufTr269evYs2vfzr2791IhAAA7"
      ,sticky1_png : ""
        +"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABMAAAAUCAIAAADgN5EjAAAABnRSTlMAAAAAAABupgeRAAAACXBIWXMAAA7EAAAOxAGVKw4bAAABS0l"
		+"EQVR42mNgoD9gROPPmDoHU5HEx90MDAy6vA+Uc09i1zlj6pz0rOSZ0+Ym232EC97dPIWVV4xXXPbzy8e/P79i5RWD6GdB08bAwPCHEWHcowOrhFSMBWS0GRgYBGS0P"
		+"zy5+u7OWYgUE5o2NPDhyXWINgiAsO9ONkexc+a0uci2QQA3vzCaCCuvGISB0InsNzj4+vHtz4+v2Pmhqn9+fPXhyXXjzk8I12IF53577P9t+/T8jg9PrjIwMHx4cvXV"
		+"nXMCMprodmJqm7lkKQODvqGSHevLdY/P7mJgYBCQ0YRHDAsebSJCQrXGdzlkhBkYwuQYGOYe4s/IToGrYcGlzdvJxU/+PAODCi5HsWBqW7tte3pMtBHrDvypjwVN2+k"
		+"TJ2qN73IQ0oai88eTO0/+vky3/YDHhdh1csio+DGcJyevYM0lyAA5YIccAAA3ZH1T/MtQvwAAAABJRU5ErkJggg=="
      ,sticky2_png : ""
        +"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABMAAAAUBAMAAACdextHAAAAMFBMVEUEAgSkoqT8+vx8fnzEwsT8/vy6APHcAHYAADoAADUAAPEAAHZ"
		+"AgtgMAAROAAABAAD3wbpfAAAAEHRSTlMA////////////////////wFCLQwAAAAlwSFlzAAAOxAAADsQBlSsOGwAAAGtJREFUeNqNzssNgDAMA9B2A1LIAqW5g9IFg"
		+"ExQyfuvQj9wRMKnp8iy4txHPBHp1smMNXd7cNnNGkNltmWuJOKymDWyAHkUGEhqx8NLVfuWJAWmxhCv8yGnjJeHyFsIMaIMSoGMa3uMyP3IDRceE8PdUxi6AAAAAEl"
		+"FTkSuQmCC"
      ,updates_png : ""
        +"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAARCAIAAACNaGH2AAAABnRSTlMA/wD/AP83WBt9AAAACXBIWXMAAA7EAAAOxAGVKw4bAAABg0"
        +"lEQVR42n2SPW4UQRCFX417MXh3JbJ1hIwRxyBCGImjICQHIALOYF+Bi8AduIYdIeT9m5mq9xHMYhLMUwUt9Wu9r6orvv64/Nn/2o61NvvyOnNbtRkzbZepciZVT"
        +"p90j7vduIEgQoGxAgAhIYENAoHX47ob7JQSyjJyTa4ACRQRIaGITkTb2X15MGknpFxQWEIStpBCANA2maM9mgH6cqLRhGQDYGFTxgjaNisVCUN5lIeskcMdJiSQN"
        +"FGpbbKIGOzR9NCDEDaG8p9eNYG1TVnBYKcZjKdQeRrEAYPCKKLtsko2SiOMLXAac18ThqDtXUyIAYXLwgJXyWDbU45ALfd9N2sytiVxSOAAXBaOCEC4HWe3G3fRd"
        +"YojYaZ/G0ZXSaKmd4E9ny3jZn1zu7mV9On7RxBOzNvzi4uX7yYAxTQPnS5P22q+Ws1XklyF3bX24unZ51df9C+1+xNZR0+Oz5fPr95c6wH9dc8WJ2eLZ1evrxePF"
        +"g+5D+sCvP/24a6/47/6DW1k0UQglGH2AAAAAElFTkSuQmCC"
      ,news_png : ""
        +"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAANCAIAAAD5fKMWAAAABnRSTlMAAAAAAABupgeRAAAArklEQVR42mNkYGBgYGBob29/9OgRA1"
		+"4gJyfHAlHHz88/bdo0/KqzsrJYHj16lF/auG/Hmvv37587dw6XUiMjIwYGBhY4X1FRUVFREb/xLMic9knLGRgYKvMiT158jKbOXF+WgYGBiYEUgGJ2ZV4kCarR7B2"
		+"07ubn52dhYGB4ev+yh4fHhw8fIKLvPn4XFUAxRYif8/79+wwMDIxHjhzZsmXLx48f8buBn5/fw8MDAOiiPC0scvhsAAAAAElFTkSuQmCC"
     };
    break;
  };
  return false;
 }
,getSmileySet: function getSmileySet(custom){

  var H = gvar.domainstatic + 'images/smilies/';
  var s = 'sumbangan/';
  
/**
Format will be valid like this:
 'keyname1|link1,keyname2|link2'
 eg. 
 ':yoyocici|http://foo'
*/
  //var sample = 'lopeh|http://static.kaskus.co.id/images/smilies/sumbangan/001.gif,nangis|http://static.kaskus.co.id/images/smilies/sumbangan/06.gif';
  gvar.smiliecustom = {};
  var buff = getValue(KEY_KTP+'CUSTOM_SMILEY');
  if(buff!=''){
    var idx=1;
    var sepr = ',';
    var customs={};
    var smileys = buff.split(sepr);
    if(isDefined(smileys[0]))
     for(var i in smileys){
       if(isString(smileys[i]) && smileys[i]!=''){
         var parts = smileys[i].split('|');
         customs[idx.toString()] = (isDefined(parts[1]) ? [parts[1], parts[0], parts[0]] : smileys[i]);
         idx++;
       }
     }
    gvar.smiliecustom = customs;
  }
  if(isDefined(custom) && custom) return;

  
  gvar.smiliekecil = {
 '1' : [H+'ngakaks.gif', ':ngakaks', 'Ngakak (S)']
,'2' : [H+'mahos.gif', ':mahos', 'Maho (S)']
,'3' : [H+'s_sm_cendol.gif', ':cendolb', 'Blue Guy Cendol (S)']
,'4' : [H+'s_sm_batamerah.gif', ':bata', 'Blue Guy Bata (S)']
,'5' : [H+'cendols.gif', ':cendols', 'Cendol (S)']
,'6' : [H+'takuts.gif', ':takuts', 'Takut (S)']

,'7' : [H+'batas.gif', ':batas', 'Bata (S)']
,'8' : [H+'s_sm_smile.gif', ':)bs', 'Blue Guy Smile (S)']
,'9' : [H+'s_sm_peace.gif', ':Yb', 'Blue Guy Peace']
,'10': [H+'iloveindonesias.gif', ':iloveindonesias', 'I Love Indonesia (S)']
,'11': [H+'cekpms.gif', ':cekpms', 'Cek PM (S)']
,'12': [H+'berdukas.gif', ':berdukas', 'Berduka (S)']
,'13': [H+'capedes.gif', ':capedes', 'Cape d... (S)']
,'14': [H+'bingungs.gif', ':bingungs', 'Bingung (S)']

,'15': [H+'malus.gif', ':malus', 'Malu (S)']
,'16': [H+'iluvkaskuss.gif', ':ilovekaskuss', 'I Love Kaskus (S)']
,'17': [H+'kisss.gif', ':kisss', 'Kiss (S)']
,'18': [H+'mads.gif', ':mads', 'Mad (S)']
,'19': [H+'sundulgans.gif', ':sundulgans', 'Sundul Gan (S)']
,'20': [H+'najiss.gif', ':najiss', 'Najis (S)']
,'21': [H+'hammers.gif', ':hammers', 'Hammer (S)']
,'22': [H+'reposts.gif', ':reposts', 'Repost (S)']
,'23': [H+s+'004.gif', ':matabelo:', 'Belo']
,'24': [H+s+'q11.gif', ':nohope:', 'Nohope']
,'25': [H+s+'8.gif', ':hammer:', 'Hammer']
,'26': [H+s+'24.gif', ':army:', 'army']
,'27': [H+s+'005.gif', ':Peace:', 'Peace']
,'28': [H+s+'12.gif', ':mad:', 'Mad']

,'29': [H+s+'fuck-8.gif', ':fuck3:', 'fuck3']
,'30': [H+s+'fuck-6.gif', ':fuck2:', 'fuck2']
//,'31': [H+s+'fuck-4.gif', ':fuck:', 'fuck']

,'32': [H+s+'7.gif', ':confused:', 'Confused']
,'33': [H+s+'34.gif', ':rose:', 'rose']
,'34': [H+s+'35.gif', ':norose:', 'norose']
,'35': [H+s+'017.gif', ':angel:', 'angel']
,'36': [H+s+'3.gif', ':kagets:', 'Kagets']
,'37': [H+s+'4.gif', ':eek:', 'EEK!']
,'38': [H+s+'014.gif', ':kissing:', 'kisssing']
,'39': [H+s+'q03.gif', ':genit:', 'Genit']

,'40': [H+s+'001.gif', ':wowcantik', 'Wowcantik']
,'41': [H+s+'amazed.gif', ':amazed:', 'Amazed']
,'42': [H+s+'vana-bum-vanaweb-dot-com.gif', ':bikini:', 'Bikini']
,'43': [H+s+'crazy.gif', ':gila:', 'Gila']
//,'44': [H+s+'shit-3.gif', ':tai:', 'Tai']
,'45': [H+s+'5.gif', ':shutup:', 'Shutup']
,'46': [H+s+'q20.gif', ':berbusa:', 'Busa']
,'47': [H+s+'49.gif', ':shakehand', 'shakehand']
,'48': [H+s+'48.gif', ':thumbdown', 'thumbdown']
,'49': [H+s+'47.gif', ':thumbup:', 'thumbsup']
,'50': [H+s+'020.gif', ':siul:', 'siul']
,'51': [H+s+'1.gif', ':malu:', 'Malu']
,'52': [H+s+'14.gif', ':D', 'Big Grin']
,'91': [H+s+'15.gif', ':)', 'Smilie']
,'92': [H+s+'06.gif', ':(', 'Frown']

,'53': [H+'ngacir.gif', ':ngacir:', 'Ngacir']
,'54': [H+s + '26.gif', ':linux2:', 'linux2']
,'55': [H+'bolakbalik.gif', ':bingung:', 'Bingung']
,'56': [H+'tabrakan.gif', ':tabrakan:', 'Ngacir Tubrukan']

,'57': [H+s+'q17.gif', ':metal:', 'Metal']
,'58': [H+s+'05.gif', ':cool:', 'Cool']
,'59': [H+s+'hi.gif', ':hi:', 'Hi']
,'60': [H+s+'6.gif', ':p', 'Stick Out Tongue']
,'61': [H+s+'13.gif', ';)', 'Wink']

,'64': [H+s+'01.gif', ':rolleyes:', 'Roll Eyes (Sarcastic)']
,'65': [H+s+'18.gif', ':doctor:', 'doctor']

,'66': [H+s+'006.gif', ':think:', 'Thinking']
,'67': [H+s+'07.gif', ':o', 'Embarrassment']
,'68': [H+s+'36.gif', ':kissmouth', 'kiss']
,'69': [H+s+'37.gif', ':heart:', 'heart']
,'70': [H+s+'e03.gif', ':flower:', 'flower']
,'71': [H+s+'e02.gif', ':rainbow:', 'rainbow']
,'72': [H+s+'008.gif', ':sun:', 'Matahari']
,'73': [H+s+'007.gif', ':moon:', 'Moon']
,'74': [H+s+'40.gif', ':present:', 'present']

,'75': [H+s+'41.gif', ':Phone:', 'phone']
,'76': [H+s+'42.gif', ':clock:', 'clock']
,'77': [H+s+'44.gif', ':tv:', 'televisi']
,'78': [H+s+'39.gif', ':table:', 'table']
,'79': [H+s+'32.gif', ':ricebowl:', 'ricebowl']
,'80': [H+s+'rice.gif', ':Onigiri:', 'Onigiri']
,'81': [H+s+'31.gif', ':coffee:', 'coffee']
,'82': [H+s+'33.gif', ':medicine:', 'medicine']
,'83': [H+s+'43.gif', ':email:', 'mail']

,'84': [H+s+'paw.gif', ':Paws:', 'Paw']
,'85': [H+s+'29.gif', ':anjing:', 'anjing']
,'86': [H+s+'woof.gif', ':buldog:', 'Buldog']
,'87': [H+s+'28.gif', ':kucing:', 'kucing']
,'88': [H+s+'frog.gif', ':frog:', 'frog']
,'89': [H+s+'27.gif', ':babi:', 'babi']
,'90': [H+s+'52.gif', ':exclamati', 'exclamation']

  };
  gvar.smiliebesar = {
 '291': [H+s+'smiley_beer.gif', ':beer:', 'Angkat Beer']
,'292': [H+s+'kribo.gif', ':afro:', 'afro']
,'293': [H+'smileyfm329wj.gif', ':fm:', 'Forum Music']
,'294': [H+s+'kaskuslove.gif', ':ck', 'Kaskus Lovers']
,'295': [H+'s_sm_ilovekaskus.gif', ':ilovekaskus', 'I Love Kaskus']

/* New Big Smilies */
,'500': [H+'I-Luv-Indonesia.gif', ':iloveindonesia', 'I Love Indonesia']

,'501': [H+'najis.gif', ':najis', 'Najis']
,'502': [H+'s_sm_maho.gif', ':maho', 'Maho']
,'503': [H+'hoax.gif', ':hoax', 'Hoax']
,'504': [H+'marah.gif', ':marah', 'Marah']
,'505': [H+'nosara.gif', ':nosara', 'No Sara Please']
,'506': [H+'berduka.gif', ':berduka', 'Turut Berduka']

,'507': [H+'sorry.gif', ':sorry', 'Sorry']
,'508': [H+'capede.gif', ':cd', 'Cape d...']
,'509': [H+'nohope.gif', ':nohope', 'No Hope']
,'510': [H+'bingung.gif', ':bingung', 'Bingung']
,'511': [H+'malu.gif', ':malu', 'Malu']

,'512': [H+'hammer.gif', ':hammer', 'Hammer2']
,'513': [H+'dp.gif', ':dp', 'DP']
,'514': [H+'takut.gif', ':takut', 'Takut']
,'515': [H+'salah_kamar.gif', ':salahkamar', 'Salah Kamar']

,'516': [H+'s_big_batamerah.gif', ':batabig', 'Blue Guy Bata (L)']
,'517': [H+'s_big_cendol.gif', ':cendolbig', 'Blue Guy Cendol (L)']
,'518': [H+'toastcendol.gif', ':toast', 'Toast']
,'519': [H+'s_sm_repost1.gif', ':repost', 'Blue Repost']

,'520': [H+'s_sm_repost2.gif', ':repost2', 'Purple Repost']
,'521': [H+'matabelo1.gif', ':matabelo', 'Matabelo']
,'522': [H+'shakehand2.gif', ':shakehand2', 'Shakehand2']

,'523': [H+'mewek.gif', ':mewek', 'Mewek']
,'524': [H+'sundul.gif', ':sup2:', 'Sundul']
,'525': [H+'ngakak.gif', ':ngakak', 'Ngakak']

,'526': [H+'recseller.gif', ':recsel', 'Recommended Seller']
,'527': [H+'jempol2.gif', ':2thumbup', '2 Jempol']
,'528': [H+'jempol1.gif', ':thumbup', 'Jempol']
,'529': [H+'selamat.gif', ':selamat', 'Selamat']

,'530': [H+'ultah.gif', ':ultah', 'Ultah']
,'531': [H+'rate5.gif', ':rate5', 'Rate 5 Star']
,'532': [H+'request.gif', ':request', 'Request']
,'533': [H+'cekpm.gif', ':cekpm', 'Cek PM']
,'534': [H+'cystg.gif', ':cystg', 'cystg']

,'535': [H+'ngacir2.gif', ':ngacir2', 'Ngacir2']
,'536': [H+'ngacir3.gif', ':ngacir', 'Ngacir']
,'537': [H+'babyboy.gif', ':babyboy', 'Baby Boy']
,'538': [H+'babyboy1.gif', ':babyboy1', 'Baby Boy 1']
,'539': [H+'babygirl.gif', ':babygirl', 'Baby Girl']
,'540': [H+'kaskus_radio.gif', ':kr', 'Kaskus Radio']
,'541': [H+'traveller.gif', ':travel', 'Traveller']

,'542': [H+'kimpoi.gif', ':kimpoi', 'Kimpoi']
,'543': [H+'cewek.gif', ':kiss', 'Kiss']
,'544': [H+'peluk.gif', ':peluk', 'Peluk']
,'545': [H+'cool2.gif', ':cool', 'Cool']
,'546': [H+'bola.gif', ':bola', 'Bola']

// -- OLD ---
,'901': [H+'fd_1.gif', ':jrb:', 'Jangan ribut disini']
,'901': [H+'fd_6.gif', ':kts:', 'Kemana TSnya?']
,'902': [H+'fd_5.gif', ':sup:', 'Sundul Up']
,'903': [H+'fd_4.gif', ':kbgt:', 'Kaskus Banget']
,'904': [H+'fd_8.gif', ':kacau:', 'Thread Kacau']
,'905': [H+'fd_3.gif', ':bigo:', 'Bukan IGO']
,'906': [H+'fd_7.gif', ':repost:', 'Repost']
,'907': [H+'fd_2.gif', ':cd:', 'Cape deeehh']
  };

}
,getCSS: function(){
  return (''
    +'body.ktpSnowBox{overflow:hidden}'
	
    +'.ktp-loading{background:transparent url("'+gvar.B.loading_gif+'") no-repeat 0 0;height:11px;min-width:11px;font-size:9px;vertical-align:bottom;}'
    +'.thread_preview, .thread_preview-readed, .thread_preview-invalid{cursor:pointer;font:normal 12px/14px "Comic Sans MS";margin-right:1px;}'
    +'.thread_preview{color:#FF0000;}'
    +'.thread_preview-readed{color:#6B6BB6;}'
    +'.thread_preview-invalid{color:#999999;}'
    
    +'.input_title, .textarea{border:1px solid #B1B1B1;}'
    +'.input_title:focus, .textarea:focus, .activeField:focus{border:1px solid #275C7C;}'
    +'#recapctha_header{min-width:'+( gvar.settings.recaptcha ? '320':'231')+'px;text-align:right;font-weight:bold;}'
    
    +'.capcay_header{padding:0 2px;vertical-align:bottom;}'
    +'.fieldset{margin:0;padding:0;}'
    +'.activeField{background:#FFF;}'
    +'.idleinput{color:blue;background:#FEEB9E;}'
    +'.idleinput, .activeField{font-size:22px;border:1px solid #B1B1B1;text-align:center;padding:2px;}'    
  
    +'.txa_enable, .txa_readonly{border:1px solid #949494;}'
    +'.txa_enable{background-color:#FFF;color:#000;}'
    +'.txa_readonly{background-color:#E8E8E8;color:#4F4F4F;}'
    +'#button_preview{margin:2px 0;padding:3px 8px 3px 3px;text-align:center;}'
    +'.spacer{height:5px;}'
    +'.spc1{height:1px;}'
    +'a.cyellow{color:#F0F000!important;}'
    +'.cblue{color:#000080!important;}'
    +'.cred{color:#FF0000!important;}'
    +'.qrsmallfont, .qrsmallfont div, .g_notice{font-size:11px;}'
    +'div.qrsmallfont a, .nodeco{text-decoration:none}'
    +'.selected_row td{background-color:#D5FFD5!important;}'
    +'#thread_tools {padding:0 0 0 5px;}'
    +'#threadpost_navi {padding:0 5px 0 0;}'
    +'#thread_tools input{display:none;}'	
    +'#row_content td.alt1{padding:1px}'
    +'#post_detail{border:0; display:none;}' // padding:5px 0 5px 0;
    +'.g_notice{display:none;padding:.4em;margin-bottom:3px;background:#DFC;border:1px solid #CDA;line-height:16px;}'
    +'.g_notice-error{background:#FFD7FF!important;}'
    +'.hd_layer-right{float:right; margin-right:5px;}'
    +'.hd_layer-left{float:left; margin-left:5px;}'
	+'.qr_button_cont{width:100%; text-align:center;}'
	+'#preview_cancel,#preview_setting{margin:2px 0 0 5px;font-size:13px;outline:none;}'
    +'#collapseimg_quickreply{border:0;}'
    +'#atoggle{outline:none;}'
    +'.btman-suspect{font-size:11px;margin-bottom:-5px;font-weight:bold;}'
    +'.btman-suspect a, .btman-suspect:hover .btman-href{text-decoration:none}'
    +'.btman-suspect a span{color:red;text-decoration:blink}'
    +'.btman-suspect:hover a span{color:red;text-decoration:underline}'
    +'.btman-href{margin-left:20px;background:#FFD7FF;font:11px/12px \'Courier New\',sans-serif!important;font-size:11px}'
    +'.btman-strike{text-decoration:line-through}'

/* ==settings== */ 
    +'a.lilbutton{padding:1px 5px; 2px 5px!important;text-shadow:none;}'
    +'.setting_subtitle{padding:0 0 3px 25px;}'
	+'#tbl_setting textarea{font-family:"Courier New";font-size:9pt;width:95%;margin-top:3px;}'
    +'.cancel_layout {margin:6px 3px 0 0;}'
    +'.cancel_layout-invi {display:none;}'
	
/* ==Updater== */ 
  +'.qrdialog{border-bottom:1px transparent;width:100%;left:0px;bottom:0px;padding:3px;}'
  +'.qrdialog-close{padding:5px;margin:5px 15px 0 0;cursor:pointer;float:right;}'
  +'.qrdialog-child{background:#BFFFBF; border:1px solid #9F9F9F; height:30px;width:450px;margin-left:3px;padding:.2em .5em; font-size:8pt; border-radius:5px; -moz-border-radius:5px; -khtml-border-radius:5px; -webkit-border-radius:5px; box-shadow:3px 3px 15px #888; -moz-box-shadow:3px 3px 15px #888; -khtml-box-shadow:3px 3px 15px #888; -webkit-box-shadow:3px 3px 15px #888;}'
	
/* ==QR-&-controler== */ 
    +'.controlbar{text-align:left;}'
    +'.txta_cont{min-width:100%;width:100%;padding-right:5px;}'
	+'#controller_wraper{border:1px solid transparent;background-color:transparent;margin-top:-20px;line-height:80px;}'
	+'.textarea{/* clear:both; */width:100%;min-height:95px;}'
    +'.panelsurrounds .panel, .imagebutton{background:#DFDFE0;}'
    +'.imagebutton:hover, .imagebutton_color:hover{cursor:pointer;}'
    +'.customed_addcontroller img, .imagebutton img, .ofont, .osize{color:#000;border:1px solid transparent;background-color:transparent;}'
    +'.customed_addcontroller img:hover, .imagebutton img:hover{color:#000;border:1px solid #2085C1;background-color:#B0DAF2;}'
/* ==QR-smiley-tab== */ 
    +'#skecil_container, #sbesar_container, #scustom_container{border: 1px solid #BBC7CE;padding:2px;}'
    +'#scustom_container{padding-top:10px !important;}'
    +'#skecil_container img, #sbesar_container img, #scustom_container img{margin:0 1px;border:1px solid transparent;max-width:120px; max-height:120px;}'
    +'#skecil_container img:hover, #sbesar_container img:hover, #scustom_container img:hover, #nfo_version:hover{cursor:pointer;border:1px solid #2085C1;background-color:#B0DAF2;}'
    +'#content_scustom_container .ofont{text-decoration:none;cursor:pointer;}'
    +'#content_scustom_container .nothumb{padding:1px 3px;}'
    +'#content_scustom_container .scustom-thumb{margin-left:2px;}'
    +'.ul_tabsmile{list-style:none;padding:0;height:1em;margin:'+(gvar.isOpera||gvar.isBuggedChrome?'5px 0 2px 2px':'2px 0 3px 2px')+';}'
    +'.ul_tabsmile li{display:inline;margin-left:3px;}'
    +'li.tab_close{float:right !important;}'
    +'.ul_tabsmile a{border:1px solid #BBC7CE;background-color:#C4C4C4;padding:3px;text-decoration:none;border-bottom:0;font-size:8pt;}'
    +'.ul_tabsmile a:hover{background-color:#B0DAF2;}'
    +'.ul_tabsmile a.current, .ul_tabsmile a.current:hover, .qbutton:hover{background-color:#DDDDDD;}'
    +'.qbutton{padding:1px 3px;border:1px solid #1E67C1; background-color:#C7C7C7; color:#000; text-decoration:none; border-radius:3px; -moz-border-radius:3px; -khtml-border-radius:3px; -webkit-border-radius:3px;}'

/* ==ktp popup== */ 
    +'#img_ngaskuser{height:120px;}'
    +'#post_detail .powby{color:#363636;position:absolute;cursor:default;margin:88px 0 0 333px;font-size:10px;-moz-user-select:none;-webkit-user-select:none;}'
    +'#post_detail .powby .b,#post_detail .powby .or{font-weight:bold;}'
    +'#post_detail .powby .b{color:#0000CE;} #post_detail .powby .or{color:#DD6F00;}'

/* ==preview popup== */ 
	+'#preview_content::-webkit-scrollbar {background:transparent;overflow:visible; width:15px;}'
	+'#preview_content::-webkit-scrollbar-thumb {background-color:rgba(0,0,0,0.2); border:solid #fff;}'
	+'#preview_content::-webkit-scrollbar-thumb:hover {background:rgba(0,0,0,0.4);}'
	+'#preview_content::-webkit-scrollbar-thumb:horizontal {border-width:4px 6px;min-width:40px;}'
	+'#preview_content::-webkit-scrollbar-thumb:vertical {border-width:6px 4px;min-height:40px;}'
	+'#preview_content::-webkit-scrollbar-track-piece{ background-color:#fff;}'
	+'#preview_content::-webkit-scrollbar-corner {background:transparent;}'
	+'#preview_content::-webkit-scrollbar-thumb {background-color: #DDD;}'
	+'#preview_content::-webkit-scrollbar-thumb:hover {background-color: #999;}'
  	+''
  	+'#hideshow {position:absolute;min-width:100%;top:0;left:0;}'
  	+'#preview_content {overflow:auto; height:auto; padding-right:8px;}'
    +'#popup_container {'
    +  'z-index:'+gvar.zIndex+';'
    +  'background: #ddd; color:black; padding: 5px; border: 5px solid #fff;'
    +  'border-radius:5px; -moz-border-radius:5px; -khtml-border-radius:5px; -webkit-border-radius:5px;'
    +'}'
    +'#popup_container {width:95%;left:1%;}'
    +'.popup_block .popup {float:left; width: 100%; background: #D1D4E0; margin:0;padding:0; border:1px solid #bbb;}'
    +'.popup img.cntrl, .popup img.sticky {position:absolute;border:0px;}'
    +'.popup img.cntrl {right:-10px;top:-10px;}'
    +'.popup img.sticky {left:0;top:-3px;}'
    +'*html #popup_container{position: absolute}'
	+'.blockbody{ padding:5px 10px 10px 10px;}'
    
	/* twitter's button */
    +'.twbtn{background:#ddd url("'+gvar.B.twbutton_gif+'") repeat-x 0 0;font:11px/14px "Lucida Grande",sans-serif;width:auto;margin:0;overflow:visible;padding:0;'
	+'border-width:1px;border-style:solid;border-color:#999;border-bottom-color:#888;-moz-border-radius:4px;-khtml-border-radius:4px;-webkit-border-radius:4px;'
	+'border-radius:4px;color:#333;text-shadow:1px 1px 0 #B1B1B1;cursor:pointer;} '
	+'.twbtn::-moz-focus-inner{padding:0;border:0;}'
	+'.twbtn:hover,.twbtn:focus,button.twbtn:hover,button.twbtn:focus{border-color:#999 #999 #888;background-position:0 -6px;color:#000;text-decoration:none;}'
	+'.twbtn-m{background-position:0 -200px;font-size:12px;font-weight:bold;line-height:10px!important;padding:5px 8px;-moz-border-radius:5px;'
	+'-khtml-border-radius:5px;-webkit-border-radius:5px;border-radius:5px;margin:-4px 0 -3px 0;}a.twbtn{text-decoration:none;}'
	+'.twbtn-primary{border-color:#3B3B3B;font-weight:bold;color:#F0F000;background:#21759B;}'
	+'.twbtn:active,.twbtn:focus,button.twbtn:active{background-image:none!important;text-shadow:none!important;outline:none!important;}'
	+'.twbtn-disabled{opacity:.6;filter:alpha(opacity=60);background-image:none;cursor:default!important;}'
	
	
	
	/* google-btn */ // border-color: d8dfea
	+'.gbtn, .gdisabled{color:#6e6e6e;font:bold 12px/14px "Lucida Grande", Helvetica, Arial, sans-serif;text-decoration:none;padding:3px 12px;position:relative;display: inline-block;text-shadow:0 1px 0 #fff;-webkit-transition:border-color .218s;-moz-transition:border .218s;-o-transition:border-color .218s;transition:border-color .218s; background:#f3f3f3;background:-webkit-gradient(linear,0% 40%,0% 90%,from(#F5F5F5),to(#F1F1F1));background:-moz-linear-gradient(linear,0% 40%,0% 90%,from(#F5F5F5),to(#F1F1F1));border:solid 1px #DBDBDB;border-radius:4px;-webkit-border-radius:4px;-moz-border-radius:4px;margin-right:10px;cursor:pointer}'
	+'.gbtn:hover, .gbtn:focus {color:#333;border-color:#999;-moz-box-shadow:0 2px 0 rgba(0, 0, 0, 0.2) -webkit-box-shadow:0 2px 5px rgba(0, 0, 0, 0.2);box-shadow: 0 1px 2px rgba(0, 0, 0, 0.15);}'
	+'.gbtn:active {border-color:#444}'
	+'.gbtn-p3{color:#17233c;background:#b2d583;}' //
	+'.gbtn-p2{font-size:13px;display:inline;padding:2px 12px!important;margin:-2px auto;}'
	+'.gbtn:focus,.gdisabled:focus{outline:none} input.gbtn::-moz-focus-inner, input.gdisabled::-moz-focus-inner{border:0}'
	+'select.gbtn{padding:0;text-shadow:none;font-weight:normal}'
	+'.gdisabled{opacity:.75; filter:alpha(opacity=75);background:#f3f3f3;}'
	+'.gdisabled:hover{box-shadow:none!important;-moz-box-shadow:none!important; -webkit-box-shadow:none!important;cursor:default}'
	+''

	
	/* thumb image */
	+'.imgthumb:hover {background-color:#80FF80 !important;}'
	+'.imgthumb {line-height:20px;font-size:11px;padding:2px;padding-left:28px;background:#DDFFDD url(data:image/png;base64,'
	+'iVBORw0KGgoAAAANSUhEUgAAABkAAAAUCAIAAAD3FQHqAAAABnRSTlMAAAAAAABupgeRAAAACXBIWXMAAAsTAAALEwEAmpwYAAADHUlEQVR42qWUW28bVRDH/'
	+'7M+Xu+uL3VcJzGlkYAWmVZKZKkS5fLQJ5CQ+gnyGSueIvFAJSoI9KFKWglQSFpCoMjxJb6u1157d2Z4WKd2kpdWnPNw5vzn6HdmRnMOPfr20dbWFv732NnZMbVarbJWUdWr7qvisvLGVlVjTLVa'
	+'NQCY+fsnvwz9MVHig6qqqojI+SLJ0HNjSbn9wfvffPUAgEnYx6/bJ/41iyiVUicTsegosKLYYhYWi0ViJpZkS8wLIxYh/JtA5ixjUoWsk0nrZjXYvO2xyN7B6MUf2VkEYWURFmUWFmURXlJENG'
	+'X5F1mWlXXSldXxl7X19ZX70Djv7Xb7QbPjJZkwK4uKzHEii23KCi6wLAuunS7k4GUKBAMynpMr5ifB2BZRUT0vkLLI4PVeprCRyl2PWZgV0AVLVS1C1kmHYe60c2IbVxCfnjWiqJj3FixVFdFu'
	+'/dCQtA8fv7f5MOsWAFhKRLQUF5Hn2oD9+0ur1TlURatTNpaXc1VUVZGwJsGwfvR07cN7k8DvnzyrfvoQgBlZl1iadWwQSEtnnRUFCMi5UMz7QxUx8/6T7/xh/+7q2p/AxG+XCi6AcHKJBXiOud'
	+'iXi6mKKOLjg71W/S8ABjGAGxsfFbIZAFGKLMta1Kt51vu78xtAy12dhDOdRWEYxdHEb/6aya4BePbzY2Pn+mH+hx+fA7i1OiUiIprHEoZhN+zjTeMDzDKL4uksTt6KcDyaOZPAB9QYN2YzabXz'
	+'RSIiub6Uo6oGQdDszpLCMAuzyNUXagqWa48G7TgY5ovrzdN/Op3WSvkmywoRQXXOGg79eiN6m/+A7DzEOmvVb94oG2LXIyeTbjQbjUZjnuMsigaDwTt8MZT5+kHts3t3p9PpYDDY3f3p6OilAU'
	+'BEpLGDd2IhDEfhJOz3+91u1806dz65Q6+OX5VL5aHvC0tSQiICgUBLRqJe8D1/sTceTTrdjkmnPr//xf7+vhmPx/G12PPc8/soWS7HQZelXq/X7/XXK5Xqx9VSqbS9vT0/cXB4YKdtFn7LFEVk'
	+'HAQrxZLjOHEcb2xsAPgPkT44D3rdTkkAAAAASUVORK5CYII=) no-repeat !important; color:#000 !important;}'
  );
 } 
,getCSS_fixed: function(fixed){
  //alert(parseInt(getScreenHeight()) - gvar.offsetMaxHeight - gvar.offsetLayer);
  return (''
   +'#popup_container{' + (fixed ? 'position:fixed;top:'+gvar.offsetLayer+'px;':'position:absolute;') + '}'
   +'#preview_content {overflow:auto; height:auto; max-height:'+(parseInt(getScreenHeight()) - gvar.offsetMaxHeight - gvar.offsetLayer)+'px; }'
   +'#preview_content div table{max-width:95%;overflow:auto;}'
   +'.thread_preview{color:'+gvar.settings.color_state[0]+'}'
   +'.thread_preview-readed{color:'+gvar.settings.color_state[1]+'}'
   +'.thread_preview-invalid{color:'+gvar.settings.color_state[2]+'}'
  );
 }
,getSCRIPT: function(){
  return (''
   +'function showRecaptcha(element){'
   + 'if(undefined==Recaptcha){document.getElementById(element).innerHTML="Upps, Recaptcha load failed,."; return;}'
   + 'Recaptcha.create("6Lf8xr4SAAAAAJXAapvPgaisNRSGS5uDJzs73BqU",element,'
   +  '{theme:"red",lang:"en"'
   +    ',custom_translations:{refresh_btn:"Reload reCapcay :: [Alt+R]",instructions_visual:"Masukkan reCapcay:"}'
   +  '}'
   + ');'
   +'};'
   +'function loadCapcay(e){window.addEventListener("load", showRecaptcha(e), false)};'
   +'function open_win_smiley(){'
   +  'window.open("misc.php?do=getsmilies&editorid=vB_Editor_001","smilie_window", "left=20,top=10,width=520,height='+getScreenHeight()+'");return false;'
   +'};'
  );  
 }
// tPL
,getTPL_preview: function(){

  return (''
 +'<div id="popup_container" class="popup_block"> '
 + '<div class="popup" id="popup_child">'
 +  '<a tabindex="209" href="javascript:;"><img id="imghideshow" title="Close" class="cntrl" src="'+gvar.B.closepreview_png+'"/></a>'
 +  '<a tabindex="208" href="javascript:;"><img id="imgsticky" title="Toggle Fixed View" class="sticky" src="'+(gvar.settings.fixed_preview ? gvar.B.sticky1_png : gvar.B.sticky2_png)+'"/></a>'
 +  '<table class="tborder" align="center" border="0" cellpadding="6" cellspacing="1" width="100%">'
 +  '<tbody><tr>'
 +   '<td class="tcat" id="head_layer" style="cursor:s-resize;">'
 
 +     '<div class="hd_layer blockhead"><span id="prev_title"></span>&nbsp;' +HtmlUnicodeDecode('&#8592;')
 + (gvar.TS.id ? '[<small>TS :: </small><a id="ts_userlink" onclick="return '+(!gvar.isKaskus ? 'true':'false')+'" target="_blank" href="member.php?u='+gvar.TS.id+'" title="Thread starter by '+gvar.TS.name+'" class="ktp-user_link cyellow"><b>'+gvar.TS.name+'</b></a>]' : '')
 // 
 + (gvar.current.isLastPost ? (gvar.TS.id ? ' - ' : '' )+'[<small><a href="showthread.php?p='+gvar.LPOST.pid+'#post'+gvar.LPOST.pid+'" target="_blank" title="View Single Post">Post By</a> :: </small><span id="poster_userlink" class="cyellow"><b>'+gvar.LPOST.name+'</b></span>]' : '')
 + ' <span id="upd_notify"></span>'
 
 +     '<a id="atoggle" href="javascript:;" class="hd_layer-right"><img id="collapseimg_quickreply" src="'+gvar.domainstatic+'images/buttons/collapse_tcat.gif" alt="" /></a>'
 +     '<a id="preview_setting" href="javascript:;" style="right:45px;position:absolute;margin-top:-4px;"><img src="'+gvar.B.setting_gif+'" alt="setting" title="Settings" border="0" /></a>'
 +    '</div>' // .hd_layer | .blockhead

 +   '</td>' // #head_layer
 +  '</tr><tr id="row_content">'
 +  '<td class="alt1">'

 +   '<div id="post_detail"></div>' // kaskus badge | user detail
 +   '<div id="preview_content" class="blockbody formcontrols"></div>' // main post-content
 
 //+ (!gvar.current.TRIT_isClosed ? ''
 +  '<div id="container_reply" style="padding-top:4px; border-top:1px solid #DBDBDB;">'
 //: '')
 
 
 +    '<div id="thread_tools" style="float:left;">'
 +      '<input type="button" id="open_spoilers" class="gbtn" value="Show Spoilers" style="margin-right:10px;" />' 
 +      '<input type="button" id="show_emotes" class="gbtn" value="Show Emotes" style="" />'
 +      '<input type="button" id="show_images" class="gbtn" value="Show All Images" style="" />'
 +    '</div>'
 
 + (!gvar.current.TRIT_isClosed ? ''
 +   '<div style="float:right;padding:0 15px 0 0; ">'
 +    '<a id="btn_quote_reply" onclick="return false" href="javascript:;" >'
 +     '<img src="'+gvar.domainstatic+'images/buttons/quote.gif" alt="Quote" title="Quote & Quick Reply this Message" border="0"/></a>'
 +     '<div id="quote_loading" style="margin-right:5px;float:right;display:none;"><div class="ktp-loading" style="display:inline-block;padding:3px 0 2px 15px;">loading...</div></div>'
 +   '</div>'
   + (!gvar.current.isLastPost && gvar.LPOST.pid ? ''
 +  '<div id="threadpost_navi" style="float:right; ">'
 +    '<input type="button" id="last_post" class="gbtn" value="Show Last Post" style="margin-right:5px;" />' 
 +  '</div>'
   :'')

 : '')
   
 //+ (!gvar.current.TRIT_isClosed ? ''
 + '</div>' // .container_reply
 //: '')

 +  '</td></tr>'
 +  '<tbody></table>'


 // quick-reply form
 +(!gvar.current.TRIT_isClosed ? '<form action="'+gvar.current.action+'" method="post" name="vbform" id="vbform" style="display:;">' : '')
 +   '<div style="display:none;">'
 +    '<input type="submit" name="real_submit" value="Submit Post"/>'
 +   '</div>'
 +  '<table id="qr_container_table" class="tborder" align="center" border="0" cellpadding="6" cellspacing="1" width="100%">'
 +  '<thead id="qr_container_head" style="display:none;"><tr>'
 +   '<td class="tcat blockhead" style="border:0;">'
 +(!gvar.current.TRIT_isClosed ? 'Quick Reply' : '')
 +     '<span id="loggedin_as"></span>'
 +     '<span id="ktp_version" class="hd_layer-right" style="">'+gvar.codename+' '+HtmlUnicodeDecode('&#8212;')+' '+'<a href="http://userscripts.org/scripts/show/94448" target="_blank" title="Home '+gvar.codename+' - '+gvar.sversion+'">'+gvar.sversion+'</a></span>'
 +   '</td>'
 +  '</tr></thead>'
 +  '<tbody id="collapseobj_quickreply" style="display:none;">'
 +   '<tr><td class="panelsurround">'
 +    '<div class="panel">'
 +    '<div id="qr_container" class="blockbody formcontrols">'

 +      '<div>'+_LOADING+'</div>' // this will be injected w/ getTPL_QuickReply()

 +    '</div>' // #qr_container 
 +    '</div>' // .panel 
 +  '</td></tr><tbody>'
 
 +  '<tfoot id="tr_qr_button">' // this node will killed once qr pressed 
 +  '<tr><td class="tcat blockhead" style="border:0;">' 
 +    '<a tabindex="206" id="preview_cancel" href="javascript:;" class="'+(!gvar.isVBul4?'cyellow ':'')+'hd_layer-left" style=""><b>Cancel</b></a>'
 +    '<span id="ktp_version" class="hd_layer-right" style="">'+gvar.codename+' '+HtmlUnicodeDecode('&#8212;')+' '+'<a href="http://userscripts.org/scripts/show/94448" target="_blank" title="Home '+gvar.codename+' - '+gvar.sversion+'">'+gvar.sversion+'</a></span>'
 + (!gvar.current.TRIT_isClosed ? ''
 +    '<div id="qr_button_cont" class="qr_button_cont">'
 +     '<input type="button" id="qr_button" class="gbtn gbtn-p2" value="Quick Reply" style="width:350px;" />'
 +    '</div>' : '')
 +  '</td></tr>'
 +  '</tfoot>' 
 +'</table>'

 +(!gvar.current.TRIT_isClosed ? ''
 +   '<div id="button_preview" style="display:none;">'
 +'<input type="hidden" name="humanverify[hash]" value="" id="hash" />'
 +'<input type="hidden" name="s" value="" />'
 +'<input type="hidden" name="securitytoken" value="" id="qr_securitytoken" />'
 +'<input type="hidden" name="do" value="postreply" id="qr_do" />'
 +'<input type="hidden" name="t" value="" id="qr_t" />'
 +'<input type="hidden" name="p" value="" id="qr_p" />'
 +'<input type="hidden" name="specifiedpost" value="0" id="qr_specifiedpost" />'
 +'<input type="hidden" name="loggedinuser" value="" id="qr_loggedinuser" />'
 +'<input type="hidden" name="multiquoteempty" id="multiquote_empty_input" value="" />'
 +'<input type="hidden" name="parseurl" value="1" />'
 +'<input type="hidden" name="wysiwyg" value="0" />'
 +'<input type="hidden" name="styleid" value="0" />' + "\n\n"
 +'<div id="rate_thread" class="smallfont" style="position:absolute;left:80px;margin-top:1px;display:none;"></div>'
 +'<span>'
 +  '<input tabindex="205" id="preview_submit" type="button" class="gbtn gbtn-p3" value=" Post " />&nbsp;'
 +  '<label for="then_gotothread"><input tabindex="206" type="checkbox" id="then_gotothread" value="1"'+(gvar.settings.then_goto_thread ? ' checked="checked"':'')+' /><small style="font-weight:bold;" class="cblue">Then Goto Thread</small></label>'
 +'</span>'
 +   '</div>' // #button_preview
 : '')
 
 +(!gvar.current.TRIT_isClosed ? '</form>' : '')
 
 + '<div id="setting_container" style="position:absolute;right:1%;min-width:450px;border:2px outset;background:#F5F5FF;margin-top:1px;display:none;">'
 //+ rSRC.getTPL_setting()
 + '</div>' // #setting_container 
 
 + '</div>' // #popup_child
 +'</div>' // #popup_container
 );
}
,getTPL_setting: function(){
 var spacer = '<div class="spc1" style=""></div>';
 return (''
 + '<table id="tbl_setting" cellpadding="0" cellspacing="0" border="0">'
 + '<tr><td colspan="2" align="center">'
 + '<div class="g_notice" style="display:inline-block;margin-bottom:0;padding-top:8px;height:20px;width:450px;">'
 +   '<div style="float:left;margin-left:10px;"><strong>'+gvar.codename+' Settings</strong></div>'
 +   '<div style="float:right;margin-right:10px;">'
 +     '<a id="save_settings" href="javascript:;" class="gbtn gbtn-p3 lilbutton" style="">save</a>&nbsp;&nbsp;'
 +     '<a id="cancel_settings" href="javascript:;">cancel</a>'
 +   '</div>'
 + '</div>'
 + '</td></tr><tr>'

 + '<td class="alt2" valign="top" style="padding-left:5px;">'
 + '<div class="setting_subtitle"><b>::QR::</b></div>'
 + (gvar.isVBul4 ? '<p>--not supported--</p>' : '')
 + '<div style="'+(gvar.isVBul4 ? 'visibility:hidden':'')+'">'
 +  '<input id="stg_autolayout_sigi" type="checkbox" '+(gvar.settings.userLayout.config[0]=='1' ? 'checked':'')+'/> AutoSignature&nbsp;'
 +  '<small><a id="edit_sigi" class="gbtn lilbutton" href="javascript:;">edit</a>&nbsp;&nbsp;<a id="edit_sigi_cancel" href="javascript:;" class="cancel_layout cancel_layout-invi">X</a></small><br />'
 +  '<div id="edit_sigi_Editor" style="display:none;"></div>'
 +spacer
 +  '<input id="stg_autolayout_tpl" type="checkbox" '+(gvar.settings.userLayout.config[1]=='1' ? 'checked':'')+'/> AutoLayout&nbsp;'
 +  '<small><a id="edit_tpl" class="gbtn lilbutton" href="javascript:;">edit</a>&nbsp;&nbsp;<a id="edit_tpl_cancel" href="javascript:;" class="cancel_layout cancel_layout-invi">X</a></small><br />'
 +  '<div id="edit_tpl_Editor" style="display:none;"></div>'
 +spacer
 +  '<input id="stg_autoshow_smile" type="checkbox" '+(gvar.settings.autoload_smiley[0]=='1' ? 'checked':'')+'/> AutoLoad Smiley<br />'
 +  '<small style="margin-left:20px;">'
 +   '<label for="stg_autoshow_smile_kecil"><input name="rd_sml" id="stg_autoshow_smile_kecil" type="radio" value="kecil" '+(gvar.settings.autoload_smiley[1]=='kecil' ? 'CHECKED':'')+'/>kecil</label>&nbsp;'
 +   '<label for="stg_autoshow_smile_besar"><input name="rd_sml" id="stg_autoshow_smile_besar" type="radio" value="besar" '+(gvar.settings.autoload_smiley[1]=='besar' ? 'CHECKED':'')+'/>besar</label>&nbsp;'
 +   '<label for="stg_autoshow_smile_custm"><input name="rd_sml" id="stg_autoshow_smile_custm" type="radio" value="custom" '+(gvar.settings.autoload_smiley[1]=='custom' ? 'CHECKED':'')+'/>[+]</label>'
 +  '</small>'
 +spacer
 +(!gvar.user.isDonatur ? ''
 +  '<input id="stg_recaptcha_mode" type="checkbox" '+(gvar.settings.recaptcha ? 'checked':'')+'/> reCaptcha Mode On<br />'
 +spacer : '' )
 + '</div>'
 + '</td>' 
 + '<td class="alt2" valign="top" style="padding:0 5px 10px 5px; border-left:1px solid #BBC7CE; width:200px;">'
 +  '<div class="setting_subtitle"><b>::General::</b></div>'
 
 +(!gvar.noCrossDomain ? ''
 +  '<label for="stg_updates" title="Check Userscripts.org for QR latest update"><input id="stg_updates" type="checkbox" '+(gvar.settings.updates==1 ? 'checked':'')+'/> Updates</label>&nbsp;&nbsp;<small><a id="chk_upd_now" class="gbtn lilbutton" href="javascript:;" title="Check Update Now">check now</a></small>'
 +spacer
 +  '<small style="margin-left:20px;" title="Interval check update, 0 &lt; interval &lt;= 99">Interval&nbsp;<input id="stg_updates_interval" type="text" value="'+gvar.settings.updates_interval+'" maxlength="5" style="width:40px; padding:0pt; margin-top:2px;"/>&nbsp;days</small>'
 +spacer : '') 
 
 +'&nbsp;*<span style="margin-left:8px;">Images Policy</span><br />'
 +'<div id="image_policy" style="margin-left:20px;font-size:10px;">'
 +   '<label for="stg_showimages_none"><input name="rd_img" id="stg_showimages_none" type="radio" value="0" '+(gvar.settings.imgload==0?'checked':'')+'/>No-Image</label>' + '<br/>'
 +   '<label for="stg_showimages_emot"><input name="rd_img" id="stg_showimages_emot" type="radio" value="1" '+(gvar.settings.imgload==1?'checked':'')+'/>Emotes-Only</label>' + '&nbsp;'
 +   '<label for="stg_showimages_alll"><input name="rd_img" id="stg_showimages_alll" type="radio" value="2" '+(gvar.settings.imgload==2?'checked':'')+'/>Show All</label>'
 +'</div>'
 +spacer
 //stg_state_color_ready stg_state_color_readed  stg_state_color_invalid
 +'&nbsp;*<span style="margin-left:8px;">Node State Color</span><br />'
 +'<div id="node_state_colors" style="margin-left:20px;font-size:10px;">'
 +   '<label for="stg_state_color_ready">Ready:</label><input id="stg_state_color_ready" class="qrsmallfont" type="text" size="10" value="'+gvar.settings.color_state[0]+'"/>' + '<br>'
 +   '<label for="stg_state_color_readed">Readed:</label><input id="stg_state_color_readed" class="qrsmallfont" type="text" size="10" value="'+gvar.settings.color_state[1]+'"/>' + '<br>'
 +   '<label for="stg_state_color_invalid">Invalid:</label><input id="stg_state_color_invalid" class="qrsmallfont" type="text" size="10" value="'+gvar.settings.color_state[2]+'"/>'
 +'</div>'
 +spacer
 +  '<input id="stg_scrollto_lastrow" type="checkbox" '+(gvar.settings.thread_lastscroll==1 ? 'checked':'')+'> Scroll to Last Position<br />'
 +  '<input id="stg_reload_afterpost" type="checkbox" '+(gvar.settings.reload_aftersent==1 ? 'checked':'')+'/> Reload after Posting<br />'

 +'<div style="height:6px;"></div>'
 +'<a id="reset_default" class="nodeco" href="javascript:;"><small>reset default</small></a>'
 //+'<div style="height:6px;"></div>'
 +spacer
 + '' 
 + '</td></tr><tr>'
 + '<td colspan="2" align="center">'
 + '<div class="g_notice" style="display:inline-block;margin-bottom:0;padding:2px 0;height:13px;width:460px;">'
 +   '<div style="clear:both;text-align:center;font-size:9px;">'
 +   'Save-Setting <b>WILL CLOSE</b> Pop-Up Preview and may require reload page.'
 +   '</div>'
 + '</div>'
 + '</td></tr>'
 + '</table>'
 //+ '<div class="spacer"></div>'
 );
}
,getTPL_qr: function(){
 return (''
 +'<div id="quoted_notice" class="g_notice"></div>' // Quoted notice
 +'<table cellpadding="0" cellspacing="0" border="0"><tr>'
 + '<td><div class="qrsmallfont">'
 + '<div style="float:left;">Title:&nbsp;<a href="javascript:;" id="atitle" title="Optional Title Message">[+]</a>&nbsp;</div><div id="titlecont" style="display:none;"><div id="dtitle" style="float:left;margin-top:-3px;""><input id="input_title" type="text" tabindex="1" name="title" class="input_title" title="Optional"/></div>&nbsp;<div class="spacer">&nbsp;</div></div>'
 +'Message:&nbsp;<a id="textarea_clear" href="javascript:;" title="Clear Editor">reset</a>'
 + '</div></td>'
 + '<td>&nbsp;</td>'
 + '</tr><tr>' 
 // vB_Editor_QR_textarea
 +  '<td class="txta_cont panelsurrounds">'
 
 +   '<div class="panel"><div>'
 +   rSRC.getTPL_vbEditor()
 +   '</div></div>'
 
 +  '</td>' 
 +   '<td id="recaptcha_cont" valign="bottom">'
 +    '<div id="recapctha_header" class="capcay_header" style="float:right;margin-top:-15px;">'+(gvar.settings.recaptcha ? 'reCAPTCHA':'kaskusCapcay')+'&nbsp;</div>'
 +    '<div id="recaptcha_container" style="text-align:center;">'
 +      '<div>'+_LOADING+'</div>'
 +    '</div>'
 +   '</td>'
 + '</tr></table>'
 +'<div id="smile_cont" style="display:none;"></div>'

 /* -remote-capctha- */
 +'<fieldset class="fieldset" id="fieldset_capcay" style="display:none;">'    
 + (gvar.settings.recaptcha ? ''
    + '<input id="hidrecap_btn" value="reCAPTCHA" type="button" style="display:;" onclick="loadCapcay(\'recaptcha_container\');" />' // remote create
    + '<input id="hidrecap_reload_btn" value="reload_reCAPTCHA" type="button" style="display:;" onclick="Recaptcha.reload();" />' // remote reload
     : ''
   )
 +'</fieldset>'
 );
}
,getTPL_vbEditor: function(){
  return (''
  +'<table cellpadding="0" cellspacing="0" border="0" width="100%">'
  +'<tr><td id="vB_Editor_001" class="vBulletin_editor">'
  +  '<div id="vB_Editor_001_controls" class="controlbar" style="width:100%;">'
  // controller filled here..
  + '<table cellpadding="0" cellspacing="0" border="0">'
  + '<tr>'
  +  '<td><div class="imagebutton cdefault" id="vB_Editor_001_cmd_insertsmile"><img id="vB_Editor_001_cmd_insertsmile_img" src="'+gvar.B.smile_gif+'" alt="Smiles" title="Smiles" /></div></td>'
  + '</tr>'
  +  '</table>'
  +  '</div>' // end #vB_Editor_001_controls
  +  '<table cellpadding="0" cellspacing="0" border="0" width="100%">'
  +   '<tr><td class="controlbar">'
  +     '<textarea name="message" id="'+gvar.id_textarea+'" class="textarea" rows="5" tabindex="201" dir="ltr" disabled="disabled" style=""></textarea>'
  +   '</td></tr>'
  +  '</table>'
  +'</td></tr>'
  +'</table>'
  +''
  +''
  );
}

}; // end rSRC

// end- main Object
// ------
init();
// ------

})();
/* Mod By Idx. */