cls = {
  tagt: function()
  {
    return navigator.userAgent.toLowerCase();
  },
  tisie: function()
  {
    return (cls.tagt().indexOf('msie')!= -1 && document.all);
  },
  txmlhttp: function()
  {
    var txmlObj = null;
    if(window.XMLHttpRequest)
    {
      txmlObj = new XMLHttpRequest();
    }
    else
    {
      if(window.ActiveXObject)
      {
        txmlObj = new ActiveXObject('Microsoft.XMLHTTP');
      };
    };
    return txmlObj;
  },
  tigets: function (_strers, _callback, _arg1)
  {
    var tstrers = _strers;
    var tcallback = _callback;
    var targ1 = _arg1;
    var txmlhttp = new cls.txmlhttp();
    txmlhttp.onreadystatechange = function()
    {
      if (txmlhttp.readyState == 4)
      {
        if (txmlhttp.status == 200 || txmlhttp.status == 304)
        {
          if (targ1) tcallback(txmlhttp.responseText, targ1);
          else tcallback(txmlhttp.responseText);
        }
        else tcallback('$error$');
      };
    };
    txmlhttp.open('get', tstrers, true);
    txmlhttp.send(null);
  },
  tiposts: function (_strers, _strform, _callback, _arg1)
  {
    var tstrers = _strers;
    var tstrform = _strform;
    var tcallback = _callback;
    var targ1 = _arg1;
    var txmlhttp = new cls.txmlhttp();
    txmlhttp.onreadystatechange = function()
    {
      if (txmlhttp.readyState == 4)
      {
        if (txmlhttp.status == 200 || txmlhttp.status == 304)
        {
          if (targ1) tcallback(txmlhttp.responseText, targ1);
          else tcallback(txmlhttp.responseText);
        }
        else tcallback('$error$');
      };
    };
    txmlhttp.open('post', tstrers, true);
    txmlhttp.setRequestHeader('Content-Length', tstrers.length);
    txmlhttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
    txmlhttp.send(tstrform);
  },
  treparameter: function(_para, _strers, _value)
  {
    var tpara = _para;
    var tstrers = _strers;
    var tvalue = _value;
    var tmpstr = '';
    if (!tpara) tmpstr = '?' + tstrers + '=' + tvalue;
    else
    {
      var tmypara = '&' + tpara.substr(1);
      if (tmypara.indexOf('&' + tstrers + '=') == -1) tmpstr = tpara + '&' + tstrers + '=' + tvalue;
      else
      {
        var tAry1 = tmypara.split('&' + tstrers + '=');
        var tmpvalue = tAry1[1];
        if (tmpvalue.indexOf('&') != -1)
        {
          var tAry2 = tmpvalue.split('&');
          tmpvalue = tAry2[0];
        };
        tmpstr = tmypara.replace('&' + tstrers + '=' + tmpvalue, '&' + tstrers + '=' + tvalue);
        tmpstr = '?' + tmpstr.substr(1);
      };
    };
    return tmpstr;
  },
  tgetMBcString: function(_strers, _length)
  {
    var tstrers = _strers;
    var tlength = _length;
    var tstring = '';
    var tstrings = '0123456789abcdefghijklmnopqrstuvwxyz~!@#$%^&*()';
    var tmpstring = '';
    var tMBLength = 0;
    if (tstrers)
    {
      for (ti = 0; ti < tstrers.length; ti ++)
      {
        tMBLength += 1;
        tstring = tstrers.substr(ti, 1).toLowerCase();
        if (tstrings.indexOf(tstring) == -1) tMBLength += 1;
        if (tMBLength <= tlength) tmpstring += tstring;
      };
    };
    if (tMBLength > tlength) tmpstring += '..';
    return tmpstring;
  },
  tgetNum: function(_strers, _default)
  {
    var tstrers = _strers;
    var tdefault = _default;
    var tnum = tdefault;
    try
    {
      var tnum1 = 0;
      if (tstrers.indexOf('.') == -1) tnum1 = parseInt(tstrers);
      else tnum1 = parseFloat(tstrers);
      if (!isNaN(tnum1)) tnum = tnum1;
    } catch(e){};
    return tnum;
  },
  tgetParameter: function(_strers, _strkey)
  {
    var tmpvalue = '';
    var tstrers = _strers;
    var tstrkey = _strkey;
    if (tstrers && tstrkey)
    {
      var tiname, tivalue, ticount;
      var tinum = tstrers.indexOf('?');
      tstrers = tstrers.substr(tinum + 1);
      var tarrtmp = tstrers.split('&');
      for(ticount = 0; ticount < tarrtmp.length; ticount ++)
      {
        tinum = tarrtmp[ticount].indexOf('=');
        if(tinum > 0)
        {
          tiname = tarrtmp[ticount].substring(0, tinum);
          tivalue = tarrtmp[ticount].substr(tinum + 1);
          if (tiname == tstrkey) tmpvalue = tivalue;
        };
      };
    };
    return tmpvalue;
  },
  tgetCheckboxsValue: function(_strname)
  {
    var tname = _strname;
    var tmpvalue = '';
    var tobjs = document.getElementsByName(tname);
    if (tobjs)
    {
      for (ti = 0; ti < tobjs.length; ti ++)
      {
        if (tobjs[ti].checked) tmpvalue += ',' + tobjs[ti].value;
      };
    };
    if (tmpvalue != '') tmpvalue = tmpvalue.substr(1);
    return tmpvalue;
  },
  thtmlEncode: function(_strers)
  {
    var tstrers = _strers;
    tstrers = tstrers.replace(/(\&)/g, '&amp;');
    tstrers = tstrers.replace(/(\>)/g, '&gt;');
    tstrers = tstrers.replace(/(\<)/g, '&lt;');
    tstrers = tstrers.replace(/(\")/g, '&quot;');
    return tstrers;
  },
  tquotEncode: function(_strers)
  {
    var tstrers = _strers;
    tstrers = tstrers.replace(/(\")/g, '&quot;');
    return tstrers;
  },
  tselOptions: function(_obj, _strvalue)
  {
    var tobj = _obj;
    var tvalue = _strvalue;
    for(ti = 0; ti < tobj.options.length; ti ++)
    {
      if(tobj.options[ti].value == tvalue)
      {
        tobj.options.selectedIndex = ti;
        break;
      };
    };
  },
  tselCheckboxs: function(_obj, _strname)
  {
    var tobj = _obj;
    var tname = _strname;
    var tobjs = document.getElementsByName(tname);
    if (tobj && tobjs)
    {
      for (ti = 0; ti < tobjs.length; ti ++) tobjs[ti].checked = tobj.checked;
    };
  },
  tswitchDisplay: function(_obj)
  {
    var tobj = _obj;
    if (tobj) tobj.style.display = tobj.style.display == 'none'? '': 'none';
  },
  tauthor: 'jetiben',
  temail: 'jetiben@hotmail.com',
  tsysinfo: 'JTBC[.NET]',
  twebsite: 'http://www.jetiben.com/',
  tversion: '2.0'
};

cls.base64 = {
  tbase64EncodeChars: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/',
  tbase64DecodeChars: new Array(-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 62, -1, -1, -1, 63, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, -1, -1, -1, -1, -1, -1, -1,  0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, -1, -1, -1, -1, -1, -1, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, -1, -1, -1, -1, -1),
  tEncode: function(_strers)
  {
    var tstrers = _strers;
    var tc1, tc2, tc3;
    var tmpstr = '';
    var ti = 0;
    var tlen = tstrers.length;
    while (ti < tlen)
    {
      tc1 = tstrers.charCodeAt(ti ++) & 0xff;
      if (ti == tlen)
      {
        tmpstr += cls.base64.tbase64EncodeChars.charAt(tc1 >> 2);
        tmpstr += cls.base64.tbase64EncodeChars.charAt((tc1 & 0x3) << 4);
        tmpstr += '==';
        break;
      };
      tc2 = tstrers.charCodeAt(ti ++);
      if(ti == tlen)
      {
        tmpstr += cls.base64.tbase64EncodeChars.charAt(tc1 >> 2);
        tmpstr += cls.base64.tbase64EncodeChars.charAt(((tc1 & 0x3)<< 4) | ((tc2 & 0xF0) >> 4));
        tmpstr += cls.base64.tbase64EncodeChars.charAt((tc2 & 0xF) << 2);
        tmpstr += '=';
        break;
      };
      tc3 = tstrers.charCodeAt(ti ++);
      tmpstr += cls.base64.tbase64EncodeChars.charAt(tc1 >> 2);
      tmpstr += cls.base64.tbase64EncodeChars.charAt(((tc1 & 0x3)<< 4) | ((tc2 & 0xF0) >> 4));
      tmpstr += cls.base64.tbase64EncodeChars.charAt(((tc2 & 0xF) << 2) | ((tc3 & 0xC0) >>6));
      tmpstr += cls.base64.tbase64EncodeChars.charAt(tc3 & 0x3F);
    };
    return tmpstr;
  },
  tDecode: function(_strers)
  {
    var tstrers = _strers;
    var tc1, tc2, tc3, tc4;
    var tmpstr = '';
    var ti = 0;
    var tlen = tstrers.length;
    while (ti < tlen)
    {
      do
      {
        tc1 = cls.base64.tbase64DecodeChars[tstrers.charCodeAt(ti ++) & 0xff];
      }
      while (ti < tlen && tc1 == -1);
      if (tc1 == -1) break;
      do
      {
        tc2 = cls.base64.tbase64DecodeChars[tstrers.charCodeAt(ti ++) & 0xff];
      }
      while (ti < tlen && tc2 == -1);
      if (tc2 == -1) break;
      tmpstr += String.fromCharCode((tc1 << 2) | ((tc2 & 0x30) >> 4));
      do
      {
        tc3 = tstrers.charCodeAt(ti ++) & 0xff;
        if(tc3 == 61) return tmpstr;
        tc3 = cls.base64.tbase64DecodeChars[tc3];
      }
      while(ti < tlen && tc3 == -1);
      if(tc3 == -1) break;
      tmpstr += String.fromCharCode(((tc2 & 0XF) << 4) | ((tc3 & 0x3C) >> 2));
      do
      {
        tc4 = tstrers.charCodeAt(ti ++) & 0xff;
        if(tc4 == 61) return tmpstr;
        tc4 = cls.base64.tbase64DecodeChars[tc4];
      }
      while(ti < tlen && tc4 == -1);
      tmpstr += String.fromCharCode(((tc3 & 0x03) << 6) | tc4);
    };
    return tmpstr;
  }
};

cls.doc = {
  tscrollTop: function()
  {
    return document.documentElement.scrollTop;
  },
  tscrollLeft: function()
  {
    return document.documentElement.scrollLeft;
  },
  tscrollWidth: function()
  {
    return document.documentElement.scrollWidth;
  },
  tscrollHeight: function()
  {
    return document.documentElement.scrollHeight;
  },
  tclientWidth: function()
  {
    return document.documentElement.clientWidth;
  },
  tclientHeight: function()
  {
    return document.documentElement.clientHeight;
  }
};

cls.drag = {
  tmx: 0,
  tmy: 0,
  tdobj: null,
  tdrag: function(_obj, _event)
  {
    var tobj = _obj;
    var tevent = _event;
    if (cls.drag.tdobj == tobj)
    {
      var tx = cls.mouse.tx(tevent);
      var ty = cls.mouse.ty(tevent);
      if (cls.drag.tmx == 0) cls.drag.tmx = tx;
      if (cls.drag.tmy == 0) cls.drag.tmy = ty;
      var tpobj = tobj.parentNode;
      tpobj.style.left = tpobj.offsetLeft + (tx - cls.drag.tmx) + 'px';
      tpobj.style.top = tpobj.offsetTop + (ty - cls.drag.tmy) + 'px';
      cls.drag.tmx = tx;
      cls.drag.tmy = ty;
    };
  },
  tstart: function(_obj)
  {
    var tobj = _obj;
    cls.drag.tdobj = tobj;
  },
  tstop: function(_obj)
  {
    var tobj = _obj;
    if (cls.drag.tdobj == tobj)
    {
      cls.drag.tmx = 0;
      cls.drag.tmy = 0;
      cls.drag.tdobj = null;
      document.onmousemove = null;
    };
  },
  tmouseout: function(_obj)
  {
    var tobj = _obj;
    if (cls.drag.tdobj == tobj)
    {
      document.onmousemove = function(_event)
      {
        tevent = _event;
        cls.drag.tdrag(tobj, tevent);
      };
    };
  }
};

cls.form = {
  tgetValues: function(_obj)
  {
    var tobj = _obj;
    var tmpValues = '';
    if (tobj)
    {
      var tInputObj = tobj.getElementsByTagName('input');
      for(ti = 0; ti < tInputObj.length; ti ++)
      {
        if (tInputObj[ti].type == 'text' || tInputObj[ti].type == 'password' || tInputObj[ti].type == 'hidden') tmpValues += tInputObj[ti].name + '=' + iescape(tInputObj[ti].value) + '&';
        if (tInputObj[ti].type == 'checkbox' || tInputObj[ti].type == 'radio')
        {
          if (tInputObj[ti].checked) tmpValues += tInputObj[ti].name + '=' + iescape(tInputObj[ti].value) + '&';
        };
      };
      var tSelectObj = tobj.getElementsByTagName('select');
      for(ti = 0; ti < tSelectObj.length; ti ++)
      {
        if (tSelectObj[ti].getAttribute('vtype') != 'all') tmpValues += tSelectObj[ti].name + '=' + iescape(tSelectObj[ti].value) + '&';
        else
        {
          var tselValue = '';
          for (tis = 0; tis < tSelectObj[ti].options.length; tis ++)
          {
            if (tselValue == '') tselValue = tSelectObj[ti].options[tis].value;
            else tselValue += '|' + tSelectObj[ti].options[tis].value;
          };
          tmpValues += tSelectObj[ti].name + '=' + iescape(tselValue) + '&';
        };
      };
      var tTextareaObj = tobj.getElementsByTagName('textarea');
      for(ti = 0; ti < tTextareaObj.length; ti ++)
      {
        tmpValues += tTextareaObj[ti].name + '=' + iescape(tTextareaObj[ti].value) + '&';
      };
    };
    if (tmpValues) tmpValues = tmpValues.substr(0, tmpValues.length - 1);
    return tmpValues;
  }
};

cls.img = {
  tResize: function(_obj, _width, _height)
  {
    var tobj = _obj;
    var twidth = _width;
    var theight = _height;
    var tImage = new Image();
    tImage.src = tobj.src;
    if (tImage.width > twidth && tImage.height > theight)
    {
      if ((tImage.width / twidth) > (tImage.height / theight)) tobj.width = twidth;
      else tobj.height = theight;
    }
    else
    {
      if (tImage.width > twidth && tImage.height <= theight) tobj.width = twidth;
      if (tImage.width <= twidth && tImage.height > theight) tobj.height = theight;
    };
  }
};

cls.mouse = {
  tx: function(_e)
  {
    var te = _e;
    var txNum = 0;
    if (window.event) txNum = cls.doc.tscrollLeft() + event.clientX;
    else txNum = te.pageX;
    return txNum;
  },
  ty: function(_e)
  {
    var te = _e;
    var tyNum = 0;
    if (window.event) tyNum = cls.doc.tscrollTop() + event.clientY;
    else tyNum = te.pageY;
    return tyNum;
  }
};

cls.mask = {
  tWidth: 0,
  tHeight: 0,
  tclientWidth: null,
  tclientHeight: null,
  tSetDivStyle: function()
  {
    var tobj1 = $('jMask');
    var tobj2 = $('jMaskDIV');
    if (tobj1 && tobj2)
    {
      tobj2.style.marginTop = (cls.doc.tscrollTop() - Math.floor(cls.mask.tHeight / 2)) + 'px';
      if (cls.mask.tclientWidth != cls.doc.tclientWidth())
      {
        cls.mask.tclientWidth = cls.doc.tclientWidth();
        tobj1.style.width = cls.doc.tclientWidth() + 'px';
        if (cls.doc.tscrollWidth() > cls.doc.tclientWidth()) tobj1.style.width = cls.doc.tscrollWidth() + 'px';
      };
      if (cls.mask.tclientHeight != cls.doc.tclientHeight())
      {
        cls.mask.tclientHeight = cls.doc.tclientHeight();
        tobj1.style.height = cls.doc.tclientHeight() + 'px';
        if (cls.doc.tscrollHeight() > cls.doc.tclientHeight()) tobj1.style.height = cls.doc.tscrollHeight() + 'px';
      };
      setTimeout('cls.mask.tSetDivStyle()', 60);
    };
  },
  tCreateDiv: function()
  {
    var tDiv = document.createElement('div');
    tDiv.setAttribute('id', 'jMask');
    tDiv.style.position = 'absolute';
    tDiv.style.top = '0';
    tDiv.style.left = '0';
    tDiv.style.background = '#000000';
    tDiv.style.filter = 'Alpha(Opacity=30)';
    tDiv.style.opacity = '0.3';
    tDiv.style.width = cls.doc.tscrollWidth() + 'px';
    tDiv.style.height = cls.doc.tscrollHeight() + 'px';
    tDiv.style.zIndex = '999999998';
    document.body.appendChild(tDiv);
    tDiv = document.createElement('div');
    tDiv.setAttribute('id', 'jMaskDIV');
    tDiv.style.position = 'absolute';
    tDiv.style.top = '50%';
    tDiv.style.left = '50%';
    tDiv.style.zIndex = '999999999';
    document.body.appendChild(tDiv);
    cls.mask.tclientWidth = cls.doc.tclientWidth();
    cls.mask.tclientHeight = cls.doc.tclientHeight();
    setTimeout('cls.mask.tSetDivStyle()', 60);
  },
  tShow: function(_strHTML)
  {
    var tstrHTML = _strHTML;
    if (tstrHTML)
    {
      var tobj = $('jMaskDIV');
      if (!tobj)
      {
        cls.mask.tCreateDiv();
        tobj = $('jMaskDIV');
      };
      if (tobj)
      {
        tobj.style.display = 'none';
        setInnerHTML(tobj, tstrHTML);
      };
    };
  },
  tSetStyle: function()
  {
    var tobj = $('jMaskDIV');
    if (tobj)
    {
      tobj.style.display = 'block';
      cls.mask.tWidth = tobj.offsetWidth;
      cls.mask.tHeight = tobj.offsetHeight;
      tobj.style.marginLeft = (0 - Math.floor(cls.mask.tWidth / 2)) + 'px';
      tobj.style.marginTop = (cls.doc.tscrollTop() - Math.floor(cls.mask.tHeight / 2)) + 'px';
    };
  },
  tClose: function()
  {
    var tobj1 = $('jMask');
    var tobj2 = $('jMaskDIV');
    if (tobj1 && tobj2)
    {
      document.body.removeChild(tobj1);
      document.body.removeChild(tobj2);
    };
  }
};

cls.pagi = {
  tpnum: 10,
	tpagi: function(_num1, _num2, _baseLink, _tid)
  {
    var tnum1 = _num1;
    var tnum2 = _num2;
    var tbaseLink = _baseLink;
    var tid = _tid;
    var tmpstr = '';
    var tvlnum = 0;
    if (tid == 'ct-cutepage') tvlnum = 1;
    if (tnum2 > tvlnum)
    {
      if (tnum1 < 1) tnum1 = 1;
      if (tnum1 > tnum2) tnum1 = tnum2;
      tmpstr += '<a>' + tnum1 + '/' + tnum2 + '</a>';
      tmpstr +=  '<a class="hand" onclick="' + tbaseLink.replace(/(\[\$page\])/g, 1) + '">&laquo;</a>';
      tnum1c = tnum1 - Math.floor(cls.pagi.tpnum / 2);
      if (tnum1c < 1) tnum1c = 1;
      var tnum1s = tnum1c + cls.pagi.tpnum - 1;
      if (tnum1s > tnum2) tnum1s = tnum2;
      if (tnum1c <= tnum1s)
      {
        if ((tnum1s - tnum1c) < (cls.pagi.tpnum - 1))
        {
          tnum1c = tnum1c - ((cls.pagi.tpnum - 1) - (tnum1s - tnum1c));
          if (tnum1c < 1) tnum1c = 1;
        };
        for (ti = tnum1c; ti <= tnum1s; ti ++)
        {
          if (ti != tnum1) tmpstr += '<a onclick="' + tbaseLink.replace(/(\[\$page\])/g, ti) + '" class="hand">' + ti + '</a>';
          else tmpstr += '<a onclick="' + tbaseLink.replace(/(\[\$page\])/g, ti) + '" class="hand selected">' + ti + '</a>';
        };
      };
      tmpstr += '<a class="hand" onclick="' + tbaseLink.replace(/(\[\$page\])/g, tnum2) + '">&raquo;</a>';
      tmpstr += '<input type="text" id="' + tid + '-input" value="' + ((tnum1 == tnum1s) ? tnum1 : (tnum1 + 1)) + '" onkeyup="this.value = cls.tgetNum(this.value, 1);" /><a onclick="' + tbaseLink.replace(/(\[\$page\])/g, 'cls.tgetNum($(\'' + tid + '-input\').value, 1)') + '" class="hand">GO</a>';
    };
    var tobj = $(tid);
    if (tobj) tobj.innerHTML = tmpstr;
  },
  tredirect: function(_baseLink, _page)
  {
    var tbaseLink = _baseLink;
    var tpage = _page;
    tbaseLink = tbaseLink.replace(/(\[\~page\])/g, tpage);
    location.href = tbaseLink;
  }
};

cls.style = {
  tover: function(_obj)
  {
    var tobj = _obj;
    if (tobj)
    {
      if (tobj.className == 'selected') tobj.className = tobj.getAttribute('oclass');
      tobj.setAttribute('oclass', tobj.className);
      tobj.className = 'selected';
    };
  },
  tout: function(_obj)
  {
    var tobj = _obj;
    if (tobj) tobj.className = tobj.getAttribute('oclass');
  }
};

cls.selects = {
  tAdd: function(_strid, _strero, _strers)
  {
    var tstrid = _strid;
    var tstrero = _strero;
    var tstrers = _strers;
    var tobj = $(tstrid);
    if (tobj)
    {
      var ti, tstr, tisext;
      for (ti = 0; ti < tobj.options.length; ti ++)
      {
        if (tobj.options[ti].text == tstrero &&  tobj.options[ti].value == tstrers) tisext = true;
      };
      if (!tisext) tobj.options.add(new Option(tstrero, tstrers));
    };
  },
  tRemove: function(_strid)
  {
    var tstrid = _strid;
    var tobj = $(tstrid);
    if (tobj)
    {
      var tidx = tobj.selectedIndex;
      if (tidx != -1) tobj.options[tidx] = null;
    };
  },
  tDisplace: function(_obj, _strindex, _strkey)
  {
    var tobj = _obj;
    var tstrindex = _strindex;
    var tstrkey = _strkey;
    if (tstrindex >= 0)
    {
      if (tobj)
      {
        var tstrvalue, tstrtext;
        tstrtext = tobj.options[tstrindex].text;
        tstrvalue = tobj.options[tstrindex].value;
        if (tstrkey == 38)
        {
          if (!(tstrindex == 0))
          {
            tobj.options[tstrindex].text = tobj.options[tstrindex - 1].text;
            tobj.options[tstrindex].value = tobj.options[tstrindex - 1].value;
            tobj.options[tstrindex - 1].text = tstrtext;
            tobj.options[tstrindex - 1].value = tstrvalue;
          };
        };
        if (tstrkey == 40)
        {
          if (!(tstrindex == (tobj.options.length - 1)))
          {
            tobj.options[tstrindex].text = tobj.options[tstrindex + 1].text;
            tobj.options[tstrindex].value = tobj.options[tstrindex + 1].value;
            tobj.options[tstrindex + 1].text = tstrtext;
            tobj.options[tstrindex + 1].value = tstrvalue;
          };
        };
      };
    };
  }
};