// {{{ CORE

var _jslObj = new Array, _jslObjCounter = 0, _jslOnLoad = new Array;

function _jslBrowserVersion() { // {{{
	var b=navigator.appName;
	if (b.indexOf('Netscape')!=-1) this.b="ns";
	else if ((b=="Opera") || (navigator.userAgent.indexOf("Opera")>0)) this.b = "opera";
	else if (b=="Microsoft Internet Explorer") this.b="ie";
	if (!b) alert('Unidentified browser.\nThis browser is not supported,');
	this.version=navigator.appVersion;
	this.v=parseInt(this.version, 10);
	this.ns=(this.b=="ns" && this.v>=4);
	this.ns4=(this.b=="ns" && this.v==4);
	this.ns6=(this.b=="ns" && this.v==5);
	this.ie=(this.b=="ie" && this.v>=4);
	this.ie4=(this.version.indexOf('MSIE 4')>0);
	this.ie5=(this.version.indexOf('MSIE 5')>0);
	this.ie55=(this.version.indexOf('MSIE 5.5')>0);
	this.ie6=(this.version.indexOf('MSIE 6.0')>0);
	this.opera=(this.b=="opera");
	this.dom=(document.createElement && document.appendChild && document.getElementsByTagName)?true:false;
	this.def=(this.ie||this.dom); // most used browsers, for faster if loops
	var ua=navigator.userAgent.toLowerCase();
	if (ua.indexOf("win")>-1) this.platform="win32";
	else if (ua.indexOf("mac")>-1) this.platform="mac";
	else this.platform="other";
} // }}}

var is = new _jslBrowserVersion();

onload = function() { // {{{
   for(var i = 0; i<_jslOnLoad.length; i++) {
      _jslOnLoad[i]();
   }
} // }}}

function jslOnLoad() { // {{{
   for(var i = 0; i<arguments.length; i++) {
      _jslOnLoad[_jslOnLoad.length] = arguments[i];
   }
} // }}}

function jslPostRun() { // {{{
   if (is.ie5 && !is.ie55 || is.opera) {
      for(var i = 0; i<arguments.length; i++) {
         jslOnLoad(arguments[i]);
      }
   }
   else {
      for(var i = 0; i<arguments.length; i++) {
         setTimeout(arguments[i], 200);
      }
   }
} // }}}

function jslPostRun1(fnc, delay) { // {{{
   if (is.ie5 && !is.ie55 || is.opera) {
      jslOnLoad(fnc);
   }
   else {
      setTimeout(fnc, delay ? delay : 10);
   }
} // }}}

function jslGetCookie(name) { // {{{
  var a, b, cook; 
  cook = ' ' + document.cookie + ';'
  a = cook.indexOf(' ' +name+"="); 
  if (a != -1)  {
     a += name.length+2; 
     b = cook.indexOf(";", a);
     if (b == -1) b = cook.length;
     return unescape(cook.substring(a, b));       
  } 
  return null; 
} // }}}

function jslSetCookie(name, value, path, expire, domain) { // {{{
  path = path ? "; path=" + path : "";
  expire = expire ? "; expires=" + expire : "";
  domain = domain ? "; domain=" + escape(domain) : "";
  document.cookie = name + "=" + escape(value) + path + expire + domain;
} // }}}

function jslTouchSessionCookie(path, expire) { // {{{
  var sid = jslGetCookie('SID');
  var idx = sid.indexOf('_');
  if (idx >= 0) {
      sid = sid.substr(0, idx + 1) + (1 * (sid.substr(idx+1)) + 1);
  }
  else
     sid += '_1';
     
  jslSetCookie('SID', sid, path, expire);
} // }}}

function _jslInitObj(obj) { // {{{
   if (!obj.style) obj.style = obj;
   obj.jslString = '_jslObj["'+obj.id+'"]';
   _jslObj[obj.id] = obj;
} // }}}

function jslObject(o, document_obj) { // {{{
   if (!o) return null;
   if (o.jslString)  return o;
   var obj = _jslObj[o];
   if (!obj) {
      var doc = document_obj || document;
      obj = doc.getElementById 
          ? doc.getElementById(o)
          : doc.all 
            ? doc.all[o]
            : obj;
      if (obj) {
         _jslInitObj(obj);
      }
   }

   return obj;
} // }}}

function jslCreateChild(parent,id) { // {{{
   parent = jslObject(parent);
   var obj = document.createElement('DIV');
   if (!parent) parent = document.body;
   if (!id) id = '_jslObject'+ ++_jslObjCounter;
   obj.id = id;
   parent.appendChild(obj);
   obj._jslParent = parent;
   _jslInitObj(obj);
   jslSetAttribute(obj, 'position', 'absolute');
   return obj;
} // }}}

function jslRemoveObject(obj) { // {{{
   obj = jslObject(obj);
   obj._jslParent.removeChild(obj);
} // }}}


function jslGetLeft(obj) { obj = jslObject(obj); return obj.offsetLeft; }
function jslSetLeft(obj,x) { obj = jslObject(obj); obj.style.left = x; }

function jslGetTop(obj) { obj = jslObject(obj); return obj.offsetTop; }
function jslSetTop(obj,x) { obj = jslObject(obj); obj.style.top = x; }

function jslGetWidth(obj) { obj = jslObject(obj); return obj.offsetWidth; }
function jslSetWidth(obj,x) { obj = jslObject(obj); obj.style.width = x; }

function jslGetHeight(obj) { obj = jslObject(obj); return obj.offsetHeight; }
function jslSetHeight(obj,x) { obj = jslObject(obj); obj.style.height = x; }

function jslGetBottom(obj) { obj = jslObject(obj); return jslGetTop(obj) + jslGetHeight(obj); }

function jslGetClip(obj) { // {{{
   obj = jslObject(obj);
	var c = obj.style.clip;
	if (c.indexOf("rect(")>-1) {
 		c=c.split("rect(")[1].split(")")[0].split("px");
 		for (var i=0;i<c.length;i++) c[i]=parseInt(c[i], 10);
 		return [c[0],c[1],c[2],c[3]];
	}
	else return [0,this.w,this.h,0];
} // }}}

function jslSetClip(obj, c) { // {{{
	obj.style.clip = 'rect('+c[0]+'px '+c[1]+'px '+c[2]+'px '+c[3]+'px)';
} // }}}

function jslGetHTML(obj) { obj = jslObject(obj); return obj.innerHTML; }
function jslSetHTML(obj, html) { obj = jslObject(obj); obj.innerHTML = html; }

function jslGetAttribute(obj, attr) { // {{{
   obj = jslObject(obj);
   switch (attr) {
      case 'clip': return jslGetClip(obj);
      case 'html': return obj.innerHTML;
      case 'class': return obj.className;
      case 'left': return obj.offsetLeft;
      case 'top': return obj.offsetTop;
      case 'width': return obj.offsetWidth;
      case 'height': return obj.offsetHeight;
      default: return eval ('obj.style.' + attr);
   }
} // }}}

function jslSetAttribute(obj, attr, value) { // {{{
   obj = jslObject(obj);
   switch (attr) {
      case 'clip': jslSetClip(obj,value); break;
      case 'html': obj.innerHTML = value; break;
      case 'class': obj.className = value; break;
      default: eval ('obj.style.' + attr + '=value');
   }
} // }}}

function jslSetAttributes() { // {{{
   for(var i=1; i<arguments.length; i+=2) {
     jslSetAttribute(arguments[0], arguments[i], arguments[i+1]);
   }
} // }}}

function jslShow() { // {{{
   for(var i=0; i<arguments.length; i++) {
      jslSetAttribute(arguments[i], 'visibility', 'visible');
   }
} // }}}

function jslHide() { // {{{
   for(var i=0; i<arguments.length; i++) {
      jslSetAttribute(arguments[i], 'visibility', 'hidden');
   }
} // }}}

function _jslEventHandler(ev) { // {{{
  ev = ev ? ev : event;
  ev.X = ev.offsetX ? ev.offsetX : ev.layerX;
  ev.Y = ev.offsetY ? ev.offsetY : ev.layerY;
  ev.X = ev.X || 0;
  ev.Y = ev.Y || 0;
  this._jslHandlerTmp = this._jslHandler[ev.type];
  retval = this._jslHandlerTmp(ev);
  return retval;
} // }}}

function jslSetHandler(obj, type, handler) { // {{{
   obj = jslObject(obj);

   if (!obj._jslEventListener) {
      obj._jslEventHandler = _jslEventHandler;
      obj._jslEventListener = function(ev){obj._jslEventHandler(ev)};
   }
   
   var wrapper = null;
   
   if (handler) {
      if (!obj._jslHandler) {
         obj._jslHandler = new Array;
      }
      obj._jslHandler[type] = handler;
      wrapper = obj._jslEventListener;
   }
   if (obj.addEventListener) {
     obj.removeEventListener(type, obj._jslEventListener, false);
     if (wrapper) obj.addEventListener(type, obj._jslEventListener, false);
   }
   else if (obj.attachEvent) {
     obj.detachEvent('on' + type, obj._jslEventListener);
     if (wrapper) obj.attachEvent('on' + type, obj._jslEventListener);
   }
   else {
     eval ('obj.on'+type+'=' + wrapper);
   }
} // }}}

// }}}

// {{{ IMAGES

function jslImgLoad() { // {{{
   if (document.images) { 
      var img = jslObject(arguments[0]);
      var i, j;
      img._jslImages = new Array;
      arguments[0] = img.src;
      for ( i = 0, j = 0; i < arguments.length; i++, j++ ) {
         img._jslImages[j] = new Image;
         img._jslImages[j].src = arguments[i];
      }
   }
} // }}}

function jslImgSwap(obj, idx) { // {{{
   obj = jslObject(obj);
   if (obj && obj._jslImages) {
      obj.src = obj._jslImages[idx].src;
   }
} // }}}

// }}}

// {{{ ANIMATION

function jslTime() { // {{{
	var d = new Date()
	return d.getTime();
} // }}}

function _jslAnimate() { // {{{
	var newTime = jslTime();
	this._jslAnimCurrent += newTime - this._jslAnimTime;
	if (this._jslAnimCurrent < this._jslAnimDuration) {
		this._jslAnimTime = newTime;
		this._jslAnimFunc(this._jslAnimCurrent/this._jslAnimDuration);
		setTimeout(this.jslString + '._jslAnimate()',10);
	}
	else {
		this._jslAnimFunc(1);
	}
} // }}}

function jslAnimation(obj,duration,func) { // {{{
   obj = jslObject(obj);
	obj._jslAnimFunc = func;
	obj._jslAnimDuration = duration;
	obj._jslAnimTime = jslTime();
	obj._jslAnimCurrent = 0;
	obj._jslAnimate = _jslAnimate;
	obj._jslAnimate();
} // }}}

function jslAnimationStop(obj) { jslAnimation(obj, 0, function(){}); }

function jslAnimQuadratic(t) { return t < 0.5 ? 2*t*t : 1-2*(1-t)*(1-t); }

// }}}

// {{{ DYNAMIC DOWNLOAD

jslDownloader = function() { //{{{
   this._iframeDIV = jslCreateChild();
   this._iframeID  = '_ifrm' + this._iframeDIV.id;
   jslSetAttributes(
      this._iframeDIV,
      'visibility', 'hidden',
      'html', '<iframe id="' + this._iframeID + '" style="width:1px; height:1px;"></iframe>'
   );
   this._iframe    = jslObject(this._iframeID);
   this._timeout = null;
} //}}}

jslDownloader.prototype.retrieveURL = function(url, callback) { //{{{
   this.callback = callback;
   this._iframe.src = '';
   this._iframe.src = url;
   this._iframe._parentObj = this;
   this._timeout    = setTimeout( this._iframe.jslString + '._parentObj.timeOut()', 60000);
} //}}}

jslDownloader.prototype.reset = function() { //{{{
   this._iframe.src = '';
} //}}}

jslDownloader.prototype.timeOut = function() { //{{{
   this.reset();
   this._timeout = null;
   this.onLoad(null);
} //}}}

jslDownloader.prototype.onLoad = function(data) { //{{{
   if (this._timeout) {
      clearTimeout( this._timeout );
      this._timeout = null;
   }
   this.callback(data);
} //}}}

function jslOnDownload(data) { //{{{
   _jslDownloaderAsync.onLoad(data);
} //}}}

var _jslDownloaderAsync, _jslDownloadQueue = new Array, _jslDownloadQueueHead = -1; 

function _jslDownloadCallback(data) { // {{{
   if (_jslDownloadQueueHead >= 0) {
           var tmp;
           tmp = _jslDownloadQueue[_jslDownloadQueueHead][1];
           tmp( data );
           _jslDownloadQueueHead++;
           if (_jslDownloadQueueHead < _jslDownloadQueue.length) {
              _jslDownloadAsync(_jslDownloadQueue[_jslDownloadQueueHead][0]);
           }
           else {
              _jslDownloadQueue = new Array;
              _jslDownloadQueueHead = -1;
           }
   }
} // }}}

function _jslDownloadAsync(url) { // {{{
   if (!_jslDownloaderAsync) _jslDownloaderAsync = new jslDownloader();
   _jslDownloaderAsync.retrieveURL(url, _jslDownloadCallback);
} // }}}

function jslDownloadAsync(url, callback) { // {{{
   _jslDownloadQueue[_jslDownloadQueue.length] = [url, callback];
   if (_jslDownloadQueueHead<0) {
     _jslDownloadQueueHead = 0;
     _jslDownloadAsync(url);
   }
} // }}}

// }}}

// {{{ MISC

var _jslHideOnPopup = new Array, _jslPopupLevel = 0;

function jslHideOnPopup() { // {{{
   for(var i = 0; i<arguments.length; i++) {
      _jslHideOnPopup[_jslHideOnPopup.length] = jslObject(arguments[i]);
   }
} // }}}

function jslPopupOpen() { // {{{
   if (! _jslPopupLevel) {
      for(var i = 0; i<_jslHideOnPopup.length; i++) {
         var o = _jslHideOnPopup[i];
         o._jslHideOnPopup = jslGetAttribute(o, 'visibility');
         jslHide(o);
      }
   }
   _jslPopupLevel++;
} // }}}

function jslPopupClose() { // {{{
   _jslPopupLevel--;
   if (! _jslPopupLevel) {
      for(var i = 0; i<_jslHideOnPopup.length; i++) {
         var o = _jslHideOnPopup[i];
         jslSetAttribute(o, 'visibility', o._jslHideOnPopup);
      }
   }
} // }}}

function jslOpenInOpener(win, url) { // {{{
  if (win.opener && !win.opener.closed) {
    if (document.all && navigator.userAgent.indexOf(' MSIE 4.') < 0) {
      eval('try{win.opener.location=url;}catch(error){win.open(url);}');
    }
    else {
      win.opener.location.href=url;
    }
  }
  else {
    win.open(url);
  }
} // }}}

function jslEscapeString(s) { //{{{
   return s.replace(/(['"\\])/g, '\\$1').replace(/\n/g, '\\n').replace(/\r/g, '\\r');
} //}}}

function jslEscapeStringHTML(s, escape_quota) { //{{{
   var res = s.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;');
   return escape_quota ? res.replace(/"/g, '&quot;') : res;
} //}}}

function jslModifyUrl(url, new_prms, old_prms_regex_test) { //{{{
   var url_elements = url.indexOf('?') < 0 ? [url, ''] : url.split('?');
   var prms = [];
   if (url_elements[1]) {
      var prms_array = url_elements[1].indexOf('&') < 0 ? 
         [ url_elements[1] ] : url_elements[1].split('&');
      for (var i = 0; i < prms_array.length; i++) {
         var prm_val = prms_array[i].indexOf('=') < 0 ? [prms_array[i], ''] : prms_array[i].split('=');
         var prm_name = unescape(prm_val[0]);
         if (! old_prms_regex_test || old_prms_regex_test.test(prm_name)) {
            prms[prm_name] = unescape(prm_val[1]);
         }
      }
   }
   for (var i in new_prms) {
      prms[i] = new_prms[i];
   }
   new_prms = '';

   for (var i in prms) {
      if (prms[i] != undefined) new_prms += '&' + escape(i) + '=' + escape(prms[i]).replace(/\//g,'%2F');
   }

   return url_elements[0] + (new_prms ? '?' + new_prms.substr(1)  : '');
} //}}}

function jslUrlParam(url, param) { //{{{
   var url_elements = url.indexOf('?') < 0 ? [url, ''] : url.split('?');
   var prms = [];
   if (url_elements[1]) {
      var prms_array = url_elements[1].indexOf('&') < 0 ? 
         [ url_elements[1] ] : url_elements[1].split('&');
      for (var i = 0; i < prms_array.length; i++) {
         var prm_val = prms_array[i].indexOf('=') < 0 ? [prms_array[i], ''] : prms_array[i].split('=');
         var prm_name = unescape(prm_val[0]);
         prms[prm_name] = unescape(prm_val[1]);
      }
   }
   return prms[param];
} //}}}

function jslIsCheckgroupChecked(ctrl) { //{{{
   if (ctrl)
   {
      if (ctrl.length) 
      {
         for (var i = 0; i < ctrl.length; i++)
            if (ctrl[i].checked) return true;
      }
      else
         return ctrl.checked;
   }
   return false;
} //}}}

function jslGetRadioValue(ctrl) { //{{{
   if (ctrl)
   {
      if (ctrl.length) 
      {
         for (var i = 0; i < ctrl.length; i++)
            if (ctrl[i].checked) return ctrl[i].value;
      }
      else
         return ctrl.checked ? ctrl.value : undefined;
   }
   return undefined;
} //}}}

function jslGetCheckgroupValue(ctrl) { //{{{
   if (ctrl)
   {
      var ret = [];
      if (ctrl.length) 
      {
         for (var i = 0; i < ctrl.length; i++)
            if (ctrl[i].checked) ret[ret.length] = ctrl[i].value;
      }
      else if (ctrl.checked)
         ret = [ctrl.value];

      return ret;
   }
   return undefined;
} //}}}

function jslCheckWholeCheckgroup(ctrl) { //{{{
   if (ctrl)
   {
      if (ctrl.length) 
      {
         for (var i = 0; i < ctrl.length; i++) ctrl[i].checked = true;
      }
      else
         ctrl.checked = true;;
   }
} //}}}

function jslInvertCheckgroup(ctrl) { //{{{
   if (ctrl)
   {
      if (ctrl.length) 
      {
         for (var i = 0; i < ctrl.length; i++) ctrl[i].checked = !ctrl[i].checked;
      }
      else
         ctrl.checked = ! ctrl.checked;
   }
} //}}}

function jslGoURL(url, cookies, target, wnd_prms) { //{{{

   var prms = new Array;
   for (var i = 0; i < cookies.length; i++) {
      var cookie = jslGetCookie(cookies[i][0]);
      var prm_name    = cookies[i][1];
      prms['' + prm_name] = cookie || undefined;
   }

   url = jslModifyUrl(url, prms);

   var w = window;
   if (target == '_top')
      w = window.top;
   else if (target) {
      window.top.open(url, target == '_blank' ? '' : target, wnd_prms || '');
      return;
   }

   w.location.href = url;
} //}}}

// }}}

// DATE {{{

function jslIsLeapYear(y) { //{{{
   return y % 400 == 0 || y % 4 == 0 && y % 100 != 0;
}//}}}

function jslCheckDate(d,m,y) { //{{{
   var days = [31,28,31,30,31,30,31,31,30,31,30,31];
   if (jslIsLeapYear(y)) days[1] = 29;
   
   return m >= 1 && m <= 12 && d >= 1 && d <= days[m - 1];
}//}}}

// }}}

// MASK INPUT {{{

function jslDateMaskKey(ctrl, e, type) { //{{{
   //type: 0 = date, 1 = datetime

   if (is.ie && e.type == 'keypress' || !is.ie && e.type == 'keydown') return;

   var valid_from = '0'.charCodeAt();
   var valid_to   = '9'.charCodeAt();
   var max = type == 0 ? 10 : 16;
   var sep = new Array; 
   sep[5] = sep[2] = '.';
   if (type == 1) {
      sep[13] = ':';
      sep[10] = ' ';
   }
   
   var pos = 0;
   if (is.ie) {
      var dummy = ctrl.createTextRange();
      dummy.move('character', -ctrl.maxLength);
      var s = document.selection.createRange();
      while (pos < max && ! s.inRange(dummy)) { pos ++; dummy.move('character') };
   }
   else {
      pos = ctrl.selectionStart;
   }
   var c          = e.charCode || e.keyCode;
   if (c >= 96 && c <= 105) c -= 96 - valid_from;
   var txt        = ctrl.value;

   if (c >= valid_from && c <= valid_to) {
      if (sep[pos]) {
         txt = txt.substr(0, pos) + sep[pos] + txt.substr(++pos);
      }
      if (pos < max) {
         txt = txt.substr(0, pos) + String.fromCharCode(c) + txt.substr(++pos);
      }
      if (sep[pos]) {
         txt = txt.substr(0, pos) + sep[pos] + txt.substr(++pos);
      }
   }
   else if (c == 8) { //backspace
      if (pos) {
         if (sep[--pos]) pos --;
         txt = txt.substr(0, pos) + '_' + txt.substr(pos + 1);
      }
   }
   else if (c == 46) { //del
      if (! sep[pos]) {
         var i = pos + 1;
         while (i < max && ! sep[i]) i++;
         txt = txt.substr(0, pos) + txt.substr(pos + 1, i - pos - 1) + '_' + txt.substr(i);
      }
   }
   else if (c >= 35 && c <= 40 || c < 32 || c >= 112 && c <= 123) {
//            e.returnValue = false;
      return true;
   }
   else {
      if (sep[pos]) pos++;

      var i = pos;
      var empty = true;
      while (empty && i >= 0 && ! sep[i]) if (txt.charAt(i--) != '_') empty = false;
      i = pos;
      while (i < max && ! sep[i]) if (txt.charAt(i++) != '_') empty = false;

      if (! empty) pos = i + 1;
   }
   
   ctrl.value = txt;
   if (is.ie) {
      var dummy = ctrl.createTextRange();
      dummy.move('character', - ctrl.maxLength);
      dummy.move('character', pos);
      dummy.select();
   }
   else {
      ctrl.selectionStart = ctrl.selectionEnd = pos;
   }
   e.cancelBubble = true;
   e.returnValue = false;
   return false;
} //}}}

function jslDateMaskBlur(ctrl, e, type) { //{{{
   var element_count = type == 0 ? 3 : 5;
   var txt = ctrl.value.replace(/_/g,'');
   var elements = txt.split(/[^0-9]/);
   var ok_count = 0;
   var re_num = /^[0-9]+$/;
   for (var i = 0; i < elements.length; i++) {
      if (re_num.test(elements[i])) {
         ok_count ++;
         elements[i] = parseInt( elements[i], 10 );
      }
   }
   if (!ok_count) { ctrl.value = ''; return false; }
   
   if (elements[2] < 1000) elements[2] += elements[2] < 30 ? 2000 : 1900;

   var error = ok_count != element_count || ! jslCheckDate(elements[0], elements[1], elements[2]);
   if (type == 1 && ! error) {
      error = elements[4] > 59 || elements[3] > 23;
   }

   if (error) {
 //     alert(["patně zadané datum", "patně zadané datum a čas"][type] + ' !');
//            e.cancelBubble = true;
//            setTimeout(function() {ctrl.focus()}, 100);
      return false;
   }

   if (type == 1 && elements[4].length < 2) elements[4] = '0' + elements[4];
   txt = '' + (elements[0] < 10 ? '0' : '') +elements[0] + '.' + (elements[1] < 10 ? '0' : '') + elements[1] + '.' + elements[2];
   if (type == 1) txt += ' ' + (elements[3] < 10 ? '0' : '') + elements[3] + ':' + (elements[4] < 10 ? '0' : '') + elements[4];
   
   ctrl.value = txt;

   return true;
} //}}}

function jslDateMaskFocus(ctrl, e, type) { //{{{
   var element_count = type == 0 ? 3 : 5;
   var max        = type == 0 ? 10 : 16;
   var lengths = [2,2,4,2,2];
   var txt = ctrl.value;
   var elements = txt.split(/[^0-9_]/);

   for (var i = 0; i < element_count; i++) {
      var d = lengths[i] - (elements[i] ? elements[i].length : 0);
      var s = ''; while (d--) s += '_';
      elements[i] = elements[i] ? s + elements[i] : s;
   }
   
   var txt = elements[0] + '.' + elements[1] + '.' + elements[2];
   if (type == 1) txt += ' ' + elements[3] + ':' + elements[4];

   if (is.ie) {
      ctrl.value = txt;
      setTimeout( function() {
         var s = ctrl.createTextRange();
         s.move('character', - ctrl.maxLength);
         s.select();
      }, 1 );
   }
   else {
      ctrl.value = txt;
      setTimeout( function() {ctrl.selectionStart = ctrl.selectionEnd = 0}, 1 );
   }
} //}}}

// }}}

