
  xwincnt = 0;

  function openwin (filename, width, height, title)
  {
    win = meizowindow (filename, '_blank', 'title=xyz,width=' + (width+25) + ',height=' + (height+25));

    eval ('xwin' + xwincnt + ' = win;');
//    setTimeout ('setwintitle (\'xwin' + xwincnt + '\', \'' + title + '\', 0)', 100);
    xwincnt++;
  }

  function setwintitle (winvar, title, cnt)
  {
    eval ('win = ' + winvar + ';');

    if (win && cnt < 10)
      {
        if (win.document)
          win.document.title = title;
        else
          setTimeout ('setwintitle (\'' + winvar + '\', \'' + title + '\', ' + (cnt + 1) + ')', 100);
      }
  }

  function meizowindow (url, target, opts)
  {
    if (opts == 0)
      win = window.open (url, target);
    else
      win = window.open (url, target, opts);

    return win;
  }

  function login ()
  {
    if (self.name.length == 0)
      self.name = 'meizosite' + time_i;

    meizowindow (https_insert + '/loginwin.php?target=' + self.name + '&t=' + time_i + gsid_str, '_blank', 'width=210,height=183');
  }

  mz_aa_on = 0;

  function mz_aa (a, start, stop)
  {  
    mz_aa_on = 0;

    var b,c;

    for(b=start,c=0; b<stop; b+=5,c+=15)
      setTimeout('document[\''+a+'\'].width='+b,c);

    setTimeout('document[\''+a+'\'].width='+stop,c+1);

    setTimeout('mz_aa_on=1;', c);
  }

  function mz_ba (ab, start, stop)
  { 
    if (mz_aa_on == 0)
      return;

    mz_aa_on = 0;

    var d,e;

    for(d=start,e=0; d>stop; d-=5,e+=15)
      setTimeout('document[\''+ab+'\'].width='+d,e);

    setTimeout('document[\''+ab+'\'].width='+stop,e+1);
  }

  var meizo_debug_arr, meizo_debug_switch;

  meizo_debug_arr = new Array ();

  function meizo_debug (str)
  {
    var d;

    if (str == 1)
	{
	    meizo_debug_switch = str;
	    return 1;
	}

    if (str == 0)
	return meizo_debug_switch;

    d = new Date ();

    meizo_debug_arr.push (d.getHours () + ':' + d.getMinutes() + ':' + d.getSeconds() + ' ' + str);
  }

  function pop_meizo_debug ()
  {
    if (meizo_debug_arr.length > 0)
      {
        var ret;

        ret = '' + meizo_debug_arr [0];
        meizo_debug_arr = meizo_debug_arr.slice (1);
        return ret;
      }
  }

  function meizo_debug_string (delim, num)
  {
    var ret, i, reverse;

    ret = '';

    if (delim == null) delim = "\n";

    if (num == null) num = meizo_debug_arr.length; 

    if (num < 0)
      {
	num = -num;
	reverse = 1;
      }

    for (i = Math.max (meizo_debug_arr.length - num, 0); i < meizo_debug_arr.length; i++)
      {
	if (reverse == 1)
	  ret = meizo_debug_arr [i] + (ret.length ? delim + ret : '');
	else
	  ret += meizo_debug_arr [i] + delim;
      }

    return ret;
  }

  var meizo_debug_string_frame_name;
  var meizo_debug_max_display;

  function update_meizo_debug_string_to (frame_name, max)
  {
    meizo_debug_string_frame_name = frame_name;

    if (max == null) max = 10;

    meizo_debug_max_display = max;

    setTimeout ('update_meizo_debug_string()', 500);
  }

  function update_meizo_debug_string ()
  {
    var d, s;

    s = meizo_debug_string ("<br />\n", meizo_debug_max_display);

    d = document.getElementById (meizo_debug_string_frame_name);

    if (d)
      d.innerHTML = s;

    setTimeout ('update_meizo_debug_string()', 50);
  }

  var mz_scroller_scroll_target, mz_scroller_scroll_cnt;

  mz_scroller_scroll_cnt = 0;

  function mz_scroll_to (pos)
  {
    var current, speed, diff, dir;

    current = document.body.scrollTop;

    if (!current) current = document.documentElement.scrollTop;

    diff = 0;

    if (current < mz_scroller_scroll_target)
      {
        diff = mz_scroller_scroll_target - current;
        dir = 1;
      }
    if (mz_scroller_scroll_target < current)
      {
	diff = current - mz_scroller_scroll_target;
	dir = -1;
      }

    window.scrollBy (0, diff);
  }

  function mz_scroller_do_scroll ()
  {
    var current, speed, diff, dir;

    current = document.body.scrollTop;

    if (!current) current = document.documentElement.scrollTop;

    diff = 0;

    if (current < mz_scroller_scroll_target)
      {
        diff = mz_scroller_scroll_target - current;
        dir = 1;
      }
    if (mz_scroller_scroll_target < current)
      {
	diff = current - mz_scroller_scroll_target;
	dir = -1;
      }

    if (diff < 750 && (mz_scroller_scroll_cnt > 50 || diff < mz_scroller_scroll_cnt))
      speed = 1 + (diff / 15);

    else 
      speed = 1 + mz_scroller_scroll_cnt;

    if (speed > 1 + diff / 15)
      speed = 1 + diff / 15;

    if (speed > 50)
      speed = 50;

    if (speed > diff)
      speed = diff;

    window.scrollBy (0, speed * dir);

    if (speed >= diff || diff < 1)
      {
	mz_scroller_scroll_cnt = 0;
	return;
      }

    mz_scroller_scroll_cnt++;

    setTimeout ('mz_scroller_do_scroll()', 10);
  }

  function mz_scroller_scroll_to (pos)
  {
    mz_scroller_scroll_target = pos;
    mz_scroller_scroll_cnt = 0;
    mz_scroller_do_scroll ();
  }

  var mz_slider_scroll_id, mz_slider_scroll_target, mz_slider_scroll_cnt, mz_slider_current;

  mz_slider_scroll_cnt = 0;

  function mz_slider_do_scroll ()
  {
    var current, speed, diff, dir, obj;

    obj = document.getElementById (mz_slider_scroll_id);   

    if (!obj)
	return;

    //    current = obj.style.height;
    current = mz_slider_current;

    diff = 0;

    if (current < mz_slider_scroll_target)
      {
        diff = mz_slider_scroll_target - current;
        dir = 1;
      }
    if (mz_slider_scroll_target < current)
      {
	diff = current - mz_slider_scroll_target;
	dir = -1;
      }

    if (diff < 750 && (mz_slider_scroll_cnt > 50 || diff < mz_slider_scroll_cnt))
      speed = 1 + (diff / 15);

    else 
      speed = 1 + mz_slider_scroll_cnt;

    if (speed > 1 + diff / 15)
      speed = 1 + diff / 15;

    if (speed > 50)
      speed = 50;

    if (speed > diff)
      speed = diff;

    mz_slider_current += (speed * dir);

    if (current == 0 && mz_slider_current > 0)
	obj.style.display = 'inline';

    //    alert ('from ' + obj.style.height + ' to ' + mz_slider_current);

    obj.style.height = mz_slider_current + 'px';

    if (speed >= diff || diff < 1)
      {
	mz_slider_scroll_cnt = 0;

	if (mz_slider_current == 0)
	    obj.style.display = 'none';

	return;
      }

    mz_slider_scroll_cnt++;

    setTimeout ('mz_slider_do_scroll()', 10);
  }

function mz_slider_scroll_to (id, pos, from)
  {
    mz_slider_scroll_id = id;
    mz_slider_scroll_target = pos;
    mz_slider_current = from;
    mz_slider_scroll_cnt = 0;
    mz_slider_do_scroll ();
  }

mz_use_opacity = 1; // 1 or 0 to use opacity or not
mz_use_opacity_ie = 1; // 1 or 0 to use IE opacity (breaks some png's)

function mz_set_opacity (item, pct) // pct: 0.0 .. 1.0
{ 
    var v;

    v = document.getElementById (item);

    if (v)
	item = v;

    if (mz_use_opacity != 1)
	return;

    item.style.opacity = pct;

    if (mz_use_opacity_ie != 1)
	return;

    if (item.style.filters && item.style.filters.alpha) // IE
	item.style.filters.alpha = pct * 100;

    //    else if (item.filters && item.filters.item ("DXImageTransform.Microsoft.Alpha"))
    //      item.filters.item ("DXImageTransform.Microsoft.Alpha").Opacity = pct * 100;

    else
	{
	    item.style.filter = "progid:DXImageTransform.Microsoft.Alpha(Opacity=" + (pct * 100) + ")";
	    item.style ["-ms-filter"] = "progid:DXImageTransform.Microsoft.Alpha(Opacity=" + (pct * 100) + ")";
	    //alert ('set filter: ' + item.style.filter);
	}
}

//  var mz_shader_scroll_id, mz_shader_scroll_target, mz_shader_scroll_cnt, mz_shader_current, mz_shader_start;

//  mz_shader_scroll_cnt = 0;
//  mz_shader_start = 0;

  function mz_shader_do_scroll (mz_shader_scroll_id, mz_shader_scroll_target, mz_shader_current, mz_shader_scroll_cnt)
  {
    var current, speed, diff, dir, obj;

    obj = document.getElementById (mz_shader_scroll_id);   

    if (!obj)
	return;

    //    current = obj.style.height;
    current = mz_shader_current;

    diff = 0;

    if (current < mz_shader_scroll_target)
      {
        diff = mz_shader_scroll_target - current;
        dir = 1;
      }
    if (mz_shader_scroll_target < current)
      {
	diff = current - mz_shader_scroll_target;
	dir = -1;
      }

    if (diff < 750 && (mz_shader_scroll_cnt > 50 || diff < mz_shader_scroll_cnt))
      speed = 1 + (diff / 15);

    else 
      speed = 1 + mz_shader_scroll_cnt;

    if (speed > 1 + diff / 15)
      speed = 1 + diff / 15;

    if (speed > 50)
      speed = 50;

    if (speed > diff)
      speed = diff;

    mz_shader_current += (speed * dir);

    //    alert ('from ' + obj.style.height + ' to ' + mz_shader_current);

    //    if (meizo_debug (0) == 1)
    //	alert ('setting to: ' + mz_shader_current);

    mz_set_opacity (obj, mz_shader_current / 100.0);

    if (current == 0 && mz_shader_current > 0)
	{
	    obj.style.display = 'inline';
	    mz_set_opacity (obj, mz_shader_current / 100.0);
	}

    var v, cnt;
    
    for (cnt = 0; cnt < 50 && (v = document.getElementById (mz_shader_scroll_id + '.' + cnt)); cnt++)
	{
	    //	    meizo_debug (mz_shader_scroll_id + '.' + cnt + ' -> ' + mz_shader_current);
	    mz_set_opacity (v, mz_shader_current / 100.0);
	}

    if (speed >= diff || diff < 1)
      {
	mz_shader_scroll_cnt = 0;

	if (mz_shader_current == 0)
	    obj.style.display = 'none';

	mz_shader_start = 0;

	//	alert (meizo_debug_string ());

	return;
      }

    mz_shader_scroll_cnt++;

    if (current == 0 && mz_shader_current > 0)
	{
	    mz_shader_start = 1;
	    delay = 70;
	}
    else if (mz_shader_start == 1)
	delay = 25;
    else
	delay = 5;

    setTimeout ('mz_shader_do_scroll("' + mz_shader_scroll_id + '", ' + mz_shader_scroll_target + ', '+ mz_shader_current + ', ' + mz_shader_scroll_cnt + ')', delay);
  }

function mz_shader_scroll_to (id, pos, from)
  {
    mz_shader_scroll_id = id;
    mz_shader_scroll_target = pos;
    mz_shader_current = from;
    mz_shader_scroll_cnt = 0;
    mz_shader_do_scroll (id, pos, from, 0);
  }

  function getHTTPObject() 
  { 
    if (typeof XMLHttpRequest != 'undefined')
      return new XMLHttpRequest(); 

    try 
      { 
      return new ActiveXObject("Msxml2.XMLHTTP"); 
      } 
    catch (e) 
      { 
      try 
        { 
	    return new ActiveXObject("Microsoft.XMLHTTP"); 
	} 
      catch (e) 
	  {
	  } 
      } 

    return false; 
  }

  function selectboxvalue (box)
  {  
      return box.options [box.selectedIndex].value;
  }

  function selectboxvalue2 (box)
  {  
    alert ('box: ' + box);
    alert ('box.options: ' + box.options);
    alert ('box.selectedIndex: ' + box.selectedIndex);
    alert ('box.options [box.selectedIndex]: ' + box.options [box.selectedIndex]);
    alert ('box.options [box.selectedIndex].value: ' + box.options [box.selectedIndex].value);
    alert ('box.options [box.selectedIndex].text: ' + box.options [box.selectedIndex].text);
      return box.options [box.selectedIndex].value;
  }

  function selectboxtext (box)
  {  
      return box.options [box.selectedIndex].text;
  }

  function formvalue (form_name, field_name)
  {
    var form;

    form = document.forms [form_name];

    if (form)
      {
	if (form [field_name])
	  {
	    return form [field_name].value;
	  }
      }
  }

  var meizo_ajax_arr;

  meizo_ajax_arr = new Array ();
  meizo_ajax_cnt = 0;

  function meizo_load (url, id, loading_str)
  {
    return meizo_load_ajax (url, id, loading_str);
  }

  function meizo_load_ajax (url, id, loading_str)
  {
      var http, a;

      ajax_num = meizo_ajax_cnt;
      meizo_ajax_cnt = meizo_ajax_cnt + 1;
      
      if (typeof url == 'undefined')
	return;

      if (!url)
	return;

      http = getHTTPObject ();
      http.open ('GET', url);

      a = new Array ();
      a.push (http);
      a.push (url);
      a.push (id);
      a.push (loading_str);
      meizo_ajax_arr.push (a);

      http.onreadystatechange = function()
      {
	  meizo_load_ajax_handler (a);
      }

      http.send(null);

      if (typeof loading_str != 'undefined')
	meizo_loader (id, loading_str);
  }

  function meizo_load_ajax_handler (a)
  {
    var a, http, url, id, loading_str;

    //      a = meizo_ajax_arr [ajax_num];

      http = a [0];
      url = a [1];
      id = a [2];
      loading_str = a [3];

      if (http.readyState == 4) 
	{ 
	  var text, div, id, i;
	  
	  text = http.responseText;

	  if (typeof loading_str != 'undefined')
	    meizo_loader_stop (id);

	  i = id.indexOf ("(");

	  if (i != -1)
	    {
	      var fun, code, args;

	      //	      alert ('id: ' + id);

	      fun = id.substring (0, i); // substr params: start,len, substring: start,stop

	      j = id.indexOf (")");

	      if (j > i + 1)
		{
		  args = id.substring (i + 1, j);
		  code = fun + '(text,' + args + ')';
		}
	      else
		code = fun + '(text)';
	      
	      //	      alert ('code: ' + code);
	      eval (code);
	    }
	  else
	    {
	      div = document.getElementById (id);
	      
	      if (div)
		div.innerHTML = text;
	    }

	  if (window.meizo_load_notify)
	    meizo_load_notify (id, url);

	  
	  //	  meizo_ajax_arr [ajax_num] = null;
	}
  }

  var meizo_flasher_last_id;

function meizo_flasher (id)
  {
    var target;

    target = document.getElementById (id);

    //    alert ('flash ' + id + ': ' + target);

    if (!target)
      {
	//	alert ('flash ' + id + ': ' + target);
	return;
      }

    if (id == meizo_flasher_last_id && target.mzflasherinited)
      return;

    if (meizo_flasher_last_id)
      meizo_flasher_stop (meizo_flasher_last_id);

    target.mzflasherdir = -1;
    target.mzflasher = 100;
    target.mzflasherinited = 1;

    meizo_flasher_last_id = id;

    //    alert ('ok flash ' + id + ': ' + target);

    setTimeout ('meizo_flasher_loop ("' + id + '", 100);', 100);
  }

  function meizo_flasher_loop (id, last_mzflasher)
  {
    var target;

    target = document.getElementById (id);

    if (!target)
      return;

    if (!target.mzflasherinited || last_mzflasher != target.mzflasher)
      return;

    target.mzflasher += 5 * target.mzflasherdir;

    if (target.mzflasher < 0) { target.mzflasherdir = 1; target.mzflasher = 0; } 
    else if (target.mzflasher > 100) { target.mzflasherdir = -1; target.mzflasher = 100; } 

    mz_set_opacity (target, target.mzflasher / 100.0);

    setTimeout ('meizo_flasher_loop ("' + id + '", ' + target.mzflasher + ');', 100);
  }

  function meizo_flasher_stop (id)
  {
    var target;

    target = document.getElementById (id);

    if (!target)
      return;

    target.mzflasherinited = null;

    mz_set_opacity (target, 1.0);
  }

  function meizo_loader (id, str)
  {
    var target;

    if (!str)
      str = '';

    target = document.getElementById (id);

    if (!target)
      return;

    target.mzloaderinited = 1;
    target.mzloaderstr = str;

    target.innerHTML = '<p class="text-normal">' + target.mzloaderstr + '</p>';

    setTimeout ('meizo_loader_loop ("' + id + '");', 100);
  }

  function meizo_loader_loop (id)
  {
    var target;

    target = document.getElementById (id);

    if (!target)
      return;

    if (!target.mzloaderinited)
      return;

    target.mzloaderstr = target.mzloaderstr + '.';

    target.innerHTML = '<p class="text-normal">' + target.mzloaderstr + '</p>';

    setTimeout ('meizo_loader_loop ("' + id + '");', 100);
  }

  function meizo_loader_stop (id, text)
  {
    var target;

    target = document.getElementById (id);

    if (!target)
      return;

    target.mzloaderinited = null;

    if (typeof text != 'undefined')
      target.innerHTML = text;
  }

function getPosition(who){
  var T= 0,L= 0;
  while(who){
    L+= who.offsetLeft;
    T+= who.offsetTop;
    who= who.offsetParent;
  }
  return [L,T];    
}

function getParentId(who)
{
  who = who.offsetParent;

  while (who)
    {
      if (who.id && who.id.length)
	return who.id;

      who = who.offsetParent;
    }
}

function getParentWithId(who,id)
{
  while (who)
    {
      if (who.id == id)
	{
	  //	  alert ('found: ' + who + ' / ' + who.id);
	  //	  alert (typeof who);
	  return who;
	}

      who = who.offsetParent;
    }
}

var mz_aa_on = 0;

function mz_aa(a,min){ if (typeof min == 'undefined') min = 100; mz_aa_on = 0; var b,c;for(b=min,c=0;b<=350;b+=5,c+=15)setTimeout('var v; v = document.getElementById(\'' + a + '\'); if (v) v.width='+b,c);setTimeout('mz_aa_on =1;', c); }
function mz_ba(ab,min){ if (typeof min == 'undefined') min = 100; if (0 && mz_aa_on == 0) return; mz_aa_on = 0; var d,e;for(d=350,e=0;d>=min;d-=5,e+=15)setTimeout('var v; v = document.getElementById(\''+ab+'\'); if (v) v.width='+d,e);}

var rot13map;

function rot13init()
{
  var map = new Array();
  var s   = "abcdefghijklmnopqrstuvwxyz";
  
  for (i=0; i<s.length; i++)
    map[s.charAt(i)]			= s.charAt((i+13)%26);
  for (i=0; i<s.length; i++)
    map[s.charAt(i).toUpperCase()]	= s.charAt((i+13)%26).toUpperCase();
  return map;
}

function rot13(a)
{
  if (!rot13map)
    rot13map=rot13init();
  s = "";
  for (i=0; i<a.length; i++)
    {
      var b = a.charAt(i);

      s	+= (b>='A' && b<='Z' || b>='a' && b<='z' ? rot13map[b] : b);
    }
  return s;
}

function rot13b(a)
{
  if (!rot13map)
    rot13map=rot13init();
  s = "";
  for (i=0; i<a.length; i++)
    {
      var b = a.charAt(i);

      s += (b>='A' && b<='Z' || b>='a' && b<='z' ? rot13map[b] : 'a');
    }
  return s;
}

function query_mz_userid ()
{
  if (mz_userid)
    return mz_userid;

  return 0;
}

function query_mz_site_userlevel ()
{
  if (mz_site_userlevel)
    return mz_site_userlevel;

  return 0;
}

function setCaretTo(obj, pos) { 
  if(obj.createTextRange) { 
    /* Create a TextRange, set the internal pointer to
           a specified position and show the cursor at this
           position
    */ 
    var range = obj.createTextRange(); 
    range.move("character", pos); 
    range.select(); 
  } else if(obj.selectionStart) { 
    /* Gecko is a little bit shorter on that. Simply
           focus the element and set the selection to a
           specified position
    */ 
    obj.focus(); 
    obj.setSelectionRange(pos, pos); 
  } 
} 

function set_cookie ( name, value, exp_y, exp_m, exp_d, path, domain, secure )
{
  var cookie_string = name + "=" + escape ( value );

  if ( exp_y )
    {
      var expires = new Date ( exp_y, exp_m, exp_d );
      cookie_string += "; expires=" + expires.toGMTString();
    }

  if ( path )
    cookie_string += "; path=" + escape ( path );

  if ( domain )
    cookie_string += "; domain=" + escape ( domain );
  
  if ( secure )
    cookie_string += "; secure";
  
  document.cookie = cookie_string;
}

function delete_cookie ( cookie_name )
{
  var cookie_date = new Date ( );  // current date & time
  cookie_date.setTime ( cookie_date.getTime() - 1 );
  document.cookie = cookie_name += "=; expires=" + cookie_date.toGMTString();
}

function get_cookie ( cookie_name )
{
  var results = document.cookie.match ( '(^|;) ?' + cookie_name + '=([^;]*)(;|$)' );

  if ( results )
    return ( unescape ( results[2] ) );
  else
    return null;
}

function get_selected_text ()
{
  var txt = '';

  if (window.getSelection)
    txt = window.getSelection();

  else if (document.getSelection)
    txt = document.getSelection();

  else if (document.selection)
    txt = document.selection.createRange().text;

  return txt;
}

function get_url_parameter ( name )
{
  name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
  var regexS = "[\\?&]"+name+"=([^&#]*)";
  var regex = new RegExp( regexS );
  var results = regex.exec( window.location.href );
  if( results == null )
    return "";
  else
    return results[1];
}
