
  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 < pos)
      {
        diff = pos - current;
        dir = 1;
      }
    if (pos < current)
      {
	diff = current - pos;
	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)
  {  
    if (box.selectedIndex == -1)
      return false;

    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_post_ajax (url, vars, id, loading_str)
  {
      var http, a;

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

      if (typeof vars == 'undefined')
	return;

      if (!url)
	return;

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

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

      $.post (url, vars,
	      function (data) {
	meizo_load_ajax_handler2 (a);
      });

      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];

    if (typeof a == 'undefined')
      return;

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

      if (http.readyState == 4 && typeof id != 'undefined') 
	{ 
	  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;
	      //	      else
	      //		alert ('could not find: ' + id);
	    }

	  if (typeof window.meizo_load_notify != 'undefined')
	    meizo_load_notify (id, url);

	  
	  //	  meizo_ajax_arr [ajax_num] = null;
	}
  }

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

    //      a = meizo_ajax_arr [ajax_num];

    if (typeof a == 'undefined')
      return;

    http = a [0];
    url = a [1];
    id = a [2];
    loading_str = a [3];
    
    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;
	//	else
	//	  alert ('could not find: ' + id);
      }

    if (typeof window.meizo_load_notify != 'undefined')
      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.mzflasherstep = 100;
    target.mzflasonce = 0;
    target.mzflasherinited = 1;

    meizo_flasher_last_id = id;

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

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

  function meizo_fader (id,step)
  {
    var target;

    if (!step) step = 100;

    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.mzflasherstep = step;
    target.mzflashonce = 1;
    target.mzflasherinited = 1;

    meizo_flasher_last_id = id;

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

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

  function meizo_flasher_loop (id, last_mzflasher)
  {
    var target, cont_loop;

    target = document.getElementById (id);

    if (!target)
      return;

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

    target.mzflasher += 5 * target.mzflasherdir;

    cont_loop = 1;

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

    mz_set_opacity (target, target.mzflasher / 100.0);

    if (cont_loop == 1)
      setTimeout ('meizo_flasher_loop ("' + id + '", ' + target.mzflasher + ');', target.mzflasherstep);
  }

  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;

    if (target.mzloaderstr.indexOf ('<') == -1)
      target.innerHTML = '<p class="text-normal">' + target.mzloaderstr + '</p>';
    else
      target.innerHTML = target.mzloaderstr;

    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];
}

function mz_reveal_div (name)
{
  var div;

  div = document.getElementById (name);
  
  if (div)
    div.style.display = 'inline';
}

function basename (filename)
{
  return filename.replace(/^.*\/|\.[^.]*$/g, '');
}

function mz_hide_div (name)
{
  var div;

  div = document.getElementById (name);
  
  if (div)
    div.style.display = 'none';
}

function mz_toggle_div (name)
{
  var div;

  div = document.getElementById (name);
  
  if (div)
    {
      if (div.style.display == 'none')
        div.style.display = 'inline';
      else
        div.style.display = 'none';
    }
} 

function mouseX(evt) 
{
  if (evt.pageX) return evt.pageX;

  else if (evt.clientX)
    return evt.clientX + (document.documentElement.scrollLeft ?
			  document.documentElement.scrollLeft :
			  document.body.scrollLeft);

  else return null;
}

function mouseY(evt) 
{
  if (evt.pageY) return evt.pageY;
  
  else if (evt.clientY)
    return evt.clientY + (document.documentElement.scrollTop ?
			  document.documentElement.scrollTop :
			  document.body.scrollTop);

  else return null;
}

function get_event_target(e)
{
  var targ;
  if (!e) var e = window.event;
  if (e.target) targ = e.target;
  else if (e.srcElement) targ = e.srcElement;
  if (targ.nodeType == 3) // defeat Safari bug
    targ = targ.parentNode;
  return targ;
}

function getElementsByClass(searchClass,node,tag) {
  var classElements = new Array();
  if ( node == null )
    node = document;
  if ( tag == null )
    tag = '*';
  var els = node.getElementsByTagName(tag);
  var elsLen = els.length;
  var pattern = new RegExp('(^|\\\\s)'+searchClass+'(\\\\s|$)');
  for (i = 0, j = 0; i < elsLen; i++) {
    if ( pattern.test(els[i].className) ) {
      classElements[j] = els[i];
      j++;
    }
  }
  return classElements;
}

var doubleclick;

function meizodoubleclick(e,data_indice)
{
  //  alert ('double-click: ' + e.id + ' / ' + data_indice);
  
  if (data_indice.length)
    {
      var pos;
      
      pos = $(e).position ();
      
      //	  alert ('height of ' + e.id + ': ' + $(e).height());
      
      meizo_load_ajax ('/ajax-handler.php?cmd=tinymce&height=' + $(e).height() + '&width=' + $(e).width() + '&left=' + pos.left + '&top=' + pos.top + '&forum_id=' + this_forum_id + '&data_indice=' + data_indice, 'editmeizopage(\'' + data_indice + '\')');
      //	  e.innerHTML = '<textarea id="meizopageedit" rows="5" cols="60">xyz</textarea>';
    }
  
  else if (e.id == "meizopage")
    {
      var pos;
      
      pos = $(e).position ();
      
      meizo_load_ajax ('/ajax-handler.php?cmd=tinymce&height=' + $(e).height() + '&width=' + $(e).width() + '&left=' + pos.left + '&top=' + pos.top + '&forum_id=' + this_forum_id, 'editmeizopage(\'\')');
      //	  e.innerHTML = '<textarea id="meizopageedit" rows="5" cols="60">xyz</textarea>';
    }
  else
    return;

  var tools;

  tools = document.getElementById ('meizotools' + data_indice);

  if (tools)
    {
      // $(tools).fadeOut ("slow", function () { if (e) e.removeChild (tools); });
      e.removeChild (tools);

      var i;

      if (typeof mz_tracking_mouse != 'undefined')
	{
	  for (i = 0; i < mz_tracking_mouse.length; i++)
	    {
	      if (mz_tracking_mouse [i] == data_indice)
		{
		  mz_tracking_mouse.splice (i, 1);
		  i--;
		  continue;
		}
	    }
	}
    }
}

function meizoclick(e,data_indice)
{
  if (typeof data_indice == 'undefined')
    data_indice = '';

  if (typeof doubleclick == 'undefined' || doubleclick == 0)
    {
      doubleclick = 1;
      setTimeout ('doubleclick = 0', 400);
    }

  else if (doubleclick)
    {
      meizodoubleclick(e,data_indice);
    }
}

function editcomplete(buf, data_indice)
{
  meizo_load_ajax ('/ajax-handler.php?cmd=body&forum_id=' + this_forum_id + '&data_indice=' + data_indice,
		   'meizopage' + data_indice);
}

function editmeizopage(buf, data_indice)
{
  var div;
  //  alert ('data_indice: ' + data_indice);
  //  return;

  div = document.getElementById ('meizopage' + data_indice);

  if (!div)
    alert ('not found: ' + 'meizopage' + data_indice);

  if (div)
    {
      var editdiv;

      div.innerHTML = buf;

      editdiv = document.getElementById ('editmeizopage' + data_indice);

      editdiv.style.display = 'inline';

      tinyMCE.init({
	  mode : "exact",
            relative_urls : false,
	    theme: "advanced",
	    theme_advanced_buttons1 : "mysave,mycancel,|,bold,italic,underline,strikethrough,|,justifyleft,justifycenter,justifyright,justifyfull,forecolor,|,link,unlink",
	    theme_advanced_buttons2 : "styleselect,formatselect,fontselect,fontsizeselect,code",
	    theme_advanced_buttons3 : "",
	    elements: "editmeizopage" + data_indice,
	    //	    content_css: "/sites/seurahovi/files/layout/seurahovi/css/seurahovi.css",
	    content_css: meizo_editor_css,
	    theme_advanced_toolbar_location : "external",
	    theme_advanced_toolbar_align : "left",
	    // 	    skin : "o2k7",
	    setup : function(ed) {

	    // Add a custom button
	    ed.addButton('mysave', {
	      title : 'Save',
		//		image : '/img/save.png',
		image : '/img/spacer.gif',
		onclick : function() {
		// Add you own code to execute something on click
		//		ed.focus();
		//                ed.selection.setContent('Hello world!');
		//		alert (tinyMCE.activeEditor.getContent ());
		//		document.forms ['edit_forum']['body'].value = tinyMCE.activeEditor.getContent ();
		//		document.forms ['edit_forum'].submit();
		meizo_post_ajax ('/tinyedit.html?edit_forum_id=' + this_forum_id + '&data_indice=' + data_indice,
		                 { 
				   // "body": tinyMCE.activeEditor.getContent ()
				   "body": tinyMCE.get('editmeizopage' + data_indice).getContent ()
				     },
				 'editcomplete(\'' + data_indice + '\')'
				 );
	      }
	    });

	    ed.addButton('mycancel', {
	      title : 'Cancel',
		//		image : '/img/cancel.png',
		image : '/img/spacer.gif',
		onclick : function() {

		meizo_load_ajax ('/ajax-handler.php?cmd=body&forum_id=' + this_forum_id + '&data_indice=' + data_indice,
				 'meizopage' + data_indice);

		//		document.location.reload();
	      }
	    });
	  }
      });

      //      $('.mceToolbar').style.display = 'block';;

      //      alert ('initialized');

      //      tinyMCE.activeEditor.focus ();

      //      tinyMCE.execCommand ('mceFocus', true, 'editmeizopage' + data_indice);
      /*
      tinyMCE.init({
	mode : "none",
	  theme : "simple"
	  });

      tinyMCE.execCommand('mceFocus', false, 'editmeizopage' + data_indice);
      tinyMCE.execCommand('mceRemoveControl', false, 'editmeizopage' + data_indice);
*/
    }
}

var mz_tracking_mouse;

function meizoover(e,data_indice)
{
  var pos, div, parent, editdiv;

  //  e.style.border = '1px solid';
  //  alert ('over: ' + data_indice);

  div = document.getElementById ('meizotools' + data_indice);

  if (div)
    return;

  parent = document.getElementById ('meizopage' + data_indice);

  if (!parent)
    return;

  editdiv = document.getElementById ('editmeizopage' + data_indice);

  if (editdiv)
    return;

  pos = $(e).position ();
  
  div = document.createElement ('div');
  div.setAttribute ('id', 'meizotools' + data_indice);
  div.innerHTML = ('<div class="meizo-editbuttons" style="width: ' + $(parent).width() + 'px;">' + 
		   '<table border="0" cellspacing="0" cellpadding="0">' +
		   '<tr>' + 
		   '<td><!--<a href="#" title="Luo uusi elementti"><img src="/img/icons/add.png">Uusi elementti</a>--></td>' + 
		   '<td><a href="#" onClick="meizodoubleclick(document.getElementById(\'meizopage' + data_indice + '\'), \'' + data_indice + '\'); return false;" title="Muokkaa sis&auml;lt&ouml;&auml;"><img src="/img/icons/page_white_edit.png">Muokkaa</a></td>' + 
		   '<td><a href="#" onClick="editforumwinopt(' + this_forum_id + ', \'data_indice=' + data_indice + '\'); return false;" title="Muokkaa asetuksia"><img src="/img/icons/cog_edit.png">Asetukset</a></td>' +
		   '<td class="meizo-delete"><!--<a href="#" title="Poista elementti">&nbsp<img src="/img/icons/delete.png">&nbsp</a>--></td>' +
		   '</tr>' + 
		   '</table>' + 
		   '</div>');
  div.style.width = ($(parent).width()) + 'px';
  div.style.height = '50px';
  //  div.attachEvent ("onMouseOver", function() { div.ref = div.ref + 1; });
  //  div.attachEvent ("onMouseOut", function() { div.ref = div.ref - 1; });

  parent.appendChild (div);

  div.style.position='absolute';
  div.style.left = pos.left + 'px';
  div.style.top = (pos.top - 20) + 'px';
  div.ref = 0;
  div.data_indice = data_indice;
  div.style.display = 'none';

  $(div).fadeIn("slow");

  if (typeof mz_tracking_mouse == 'undefined')
    {
      $(document).mousemove(function(e){
	mz_mouse_x = e.pageX;
	mz_mouse_y = e.pageY;
      }); 

      mz_tracking_mouse = new Array ();

      setTimeout ('mz_track_mouse()',500);
    }
  else
    {
      //      if (!mz_tracking_mouse.length)
	{
	  setTimeout ('mz_track_mouse()',500);
	}
    }

  mz_tracking_mouse.push (data_indice);
}

function mz_track_mouse ()
{
  var i, div, pos, parent, editdiv;

  for (i = 0; i < mz_tracking_mouse.length; i++)
    {
      div = document.getElementById ('meizotools' + mz_tracking_mouse [i]);

      if (typeof div == 'undefined' || !div)
	{
	  mz_tracking_mouse.splice (i, 1);
	  i--;
	  continue;
	}

      parent = document.getElementById ('meizopage' + div.data_indice);

      if (typeof parent == 'undefined' || !parent)
	{
	  mz_tracking_mouse.splice (i, 1);
	  i--;
	  continue;
	}

      editdiv = document.getElementById ('editmeizopage' + div.data_indice);
      
      if (typeof editdiv != 'undefined' && editdiv)
	{
	  parent.removeChild (div);
	  mz_tracking_mouse.splice (i, 1);
	  i--;
	  continue;
	}

      pos = $(parent).position ();

      if (mz_mouse_x < pos.left - 25 ||
	  mz_mouse_y < pos.top - 50 ||
	  mz_mouse_x > pos.left + $(parent).width () + 25 ||
	  mz_mouse_y > pos.top + $(parent).height () + 25)
	{
	  //	  alert ('out: ' + div.data_indice);
	  mz_tracking_mouse.splice (i, 1);
	  i--;
	  //	  parent.removeChild (div);

	  editdiv = document.getElementById ('editmeizopage' + div.data_indice);

	  if (div && parent && (typeof editdiv == 'undefined' || !editdiv))
	    {
	      //	      alert ('fadeout: ' + div.id + ' / ' + div.data_indice);
	      //	      $(div).fadeOut ("fast", function () { parent.removeChild (div); });
	      parent.removeChild (div);
	    }

	  continue;
	}
    }

  //  if (typeof mz_tracking_mouse != 'undefined' && mz_tracking_mouse.length) 
   {
      setTimeout ('mz_track_mouse()', 500);
    }
}

function meizoout(e,data_indice)
{
  var div, parent;

  //  e.style.border = 'none';
  //  alert ('out: ' + data_indice);

  /*
  parent = document.getElementById ('meizopage' + data_indice);

  if (!parent)
    return;

  div = document.getElementById ('meizotools' + data_indice);

  if (div)
    {
      div.ref = div.ref - 1;

      setTimeout ('meizooutcheck(\'' + data_indice + '\')', 2000);
    }
  */
}

function meizooutcheck (data_indice)
{
  var div, parent;

  parent = document.getElementById ('meizopage' + data_indice);

  div = document.getElementById ('meizotools' + data_indice);

  if (div && parent)
    {
      if (div.ref <= 0)
	parent.removeChild (div);
    }
}

function urlencode (str) {
  str = (str + '').toString();
  return encodeURIComponent(str).replace(/!/g, '%21').replace(/'/g, '%27').replace(/\(/g, '%28').
    replace(/\)/g, '%29').replace(/\*/g, '%2A').replace(/%20/g, '+');
}

