function getBrowser()
{
  if (navigator.userAgent.indexOf('Safari') != -1)
    return "safari";
  if (navigator.userAgent.indexOf('Opera') != -1)
    return "opera";
  if (navigator.appName == 'Netscape')
    return "ff";
  return "ie";
}

function toggleVisibleByID(id, on, meth)
{
  if (!meth)
    meth = 'inline';
  if (document.getElementById) {
    e = document.getElementById(id);
    if (on == -1)
      on = e.style["display"] == meth ? "none" : meth;
    else
      on = (on ? meth : "none");
    e.style.display = on;
  }
}

function toggleVisibleFade(id, on, meth, cb_ondone, slow)
{
  var e = document.getElementById(id);
  if (e)
  {
    if (!meth)
      meth = "inline";

    var old_state = e.style.display;
    var new_state;

    if (on == -1)
      new_state = e.style.display == "none" ? meth : "none";
    else
      new_state = (on ? meth : "none");

    /* wenn sich was verändert hat */
    if (old_state != new_state)
    {
      if (!cb_ondone)
        cb_ondone = false;

      if (!slow || slow < 2)
        slow = 20;

      if (new_state == "none")
      {
        if (cb_ondone)
          AJS.fx.fadeOut(e, { onComplete: function() { AJS.hideElement(e);
                                                       cb_ondone(id);
                                                     } });
        else
          AJS.fx.fadeOut(e, { onComplete: function() { AJS.hideElement(e); } });

        //fade_out_cb(id, slow, 100, function() { hideByID(id, cb_ondone); });
      }
      else
      {
        AJS.showElement(e);
        if (cb_ondone)
          AJS.fx.fadeIn(e, { onComplete: function() { cb_ondone(id); } });
        else
          AJS.fx.fadeIn(e);

        //fade_in_cb(id, slow, 0, function() { showByID(id, meth, cb_ondone); });
      }
    }
  }
  return false;
}


function toggleVisibleNoFade(id, on, meth, cb_ondone)
{
  var e = document.getElementById(id);
  if (e)
  {
    if (!meth)
      meth = "inline";

    var old_state = e.style.display;

    var new_state;

    if (on == -1)
      new_state = e.style.display == "none" ? meth : "none";
    else
      new_state = (on ? meth : "none");

    if (old_state != new_state)
    {
      if (new_state == "none")
      {
        AJS.hideElement(e);
        if (cb_ondone)
          cb_ondone(id);

        //AJS.fx.fadeOut(e, { onComplete: function() { AJS.hideElement(e); } });
      }
      else
      {
        AJS.showElement(e);
        if (cb_ondone)
          cb_ondone(id);
      }
    }
  }
  return false;
}

function hideByID(id, cb_ondone)
{
  AJS.hideElement(AJS.$(id));

  if (cb_ondone)
    cb_ondone(id);
}

function showByID(id, meth, cb_ondone)
{
  AJS.showElement(AJS.$(id));

  if (cb_ondone)
    cb_ondone(id);
}

// Toggles visibility of element by checked-state of checkbox-element
// s: source, id-name of checkbox-element
// d: destination, id-name of element to be shown or hidden
function toggleVisibleByCheckbox(s, d, fade) {
  if (document.getElementById) {
    se = document.getElementById(s);
    de = document.getElementById(d);
    if (fade)
    {
      //alert(se.checked);
      toggleVisibleFade(d, !se.checked);
    }
    else
    {
      t = (se.checked ? '' : 'none');
      de.style.display = t;
    }
  }
}


function toggleVisibleByCheckboxInvert(s,d) {
  if (document.getElementById) {
    se = document.getElementById(s);
    de = document.getElementById(d);
    t = (se.checked ? 'none' : '');
    de.style.display = t;
  }
}

// Toggles visibility of element by selection-state of select-box-element
// s: source, id-name of select-element
// d: destination, id-name of element to be shown or hidden
function toggleVisibleBySelectBox(s,v,d) {
  if (document.getElementById) {
    se = document.getElementById(s);
    de = document.getElementById(d);
    t = ((v ? se.value==v : se.value) ? '' : 'none');
    de.style.display = t;
  }
}

//Toggles visibility of element by selection-state of select-box-element
//s: source, id-name of select-element
//d: destination, id-name of element to be shown or hidden
function toggleInVisibleBySelectBox(s,v,d,fade) {
   if (document.getElementById) {
    se = document.getElementById(s);
    de = document.getElementById(d);
    var visible = !(v ? se.value==v : se.value); 
    if (fade)
    {
      //alert(se.checked);
      if (!visible)
         rs_fade(d, true);
      else if (AJS.$(d).style.display == 'none')
         rs_fade(d, false);
    }
    else
    {
       de.style.display = (visible ? '' : 'none');
    }
   }
}

function fade_out(id, delay, o)
{
  if(o < 0)
    return;

  var e = document.getElementById(id);
  if (!e)
    return;

  setOpacity(e, o);
  o-=10;
  setTimeout(function() { fade_out(id, delay, o); }, delay);
  return true;
}

function fade_out_cb(id, delay, o, callback)
{
  if(o < 0)
  {
    if (callback)
      callback();
    return;
  }

  setOpacity(document.getElementById(id), o);
  o-=10;
  setTimeout(function() { fade_out_cb(id, delay, o, callback); }, delay);
  return true;
}

function fade_in(id, delay, o)
{
  if(o > 100)
    return;

  setOpacity(document.getElementById(id), o);
  o+=10;
  setTimeout(function() { fade_in(id, delay, o); }, delay);
  return true;
}

function fade_in_cb(id, delay, o, callback)
{
  if (callback)
    callback();

  if(o > 100)
    return;
  setOpacity(document.getElementById(id), o);
  o+=10;
  setTimeout(function() { fade_in(id, delay, o); }, delay);
  return true;
}

function setOpacity(obj, opacity)
{
  if (!obj)
    return;
  opacity = (opacity == 100) ? 99.999 : opacity;

  // IE/Win
  obj.style.filter = "alpha(opacity="+opacity+")";

  // Safari<1.2, Konqueror
  obj.style.KHTMLOpacity = opacity/100;

  // Older Mozilla and Firefox
  obj.style.MozOpacity = opacity/100;

  // Safari 1.2, newer Firefox and Mozilla, CSS3
  obj.style.opacity = opacity/100;
}

function delete_loading_div(id)
{
  var e = document.getElementById(id);
  if (!e)
    return;
  e2 = e.offsetParent;
  e2.removeChild(e);
}

function insert_loading_div(id)
{
  function putLoad(e, x, y, w, h)
  {
    var n = "loading_" + id;
    var s = "<span style='position:relative;top:45%;'><img alt='Loading...' src='../images/loading.gif'/>&nbsp;Loading...</span>";

    var scale = 0.6;
    var nw = Math.max(150, w*scale);
    var nh = Math.max(50, h*scale);
    var d = document.createElement("div");
    e.insertBefore(d, e.firstChild);
    d.id = n;
    d.style.display = "inline";
    d.style.color = "#000000";
    d.style.backgroundColor = "#fff";
    d.style.border = "2px solid #8af";
    d.style.padding = "0px";
    d.style.margin = "0";
    d.style.position = "absolute";
    d.style.left = x+(w-nw) / 2;
    d.style.top = y+(h-nh) / 2;
    d.style.zIndex = 1000;
    d.style.width = nw;
    d.style.height= nh;
    d.innerHTML = s;
    d.style.textAlign = "center";
    d.style.verticalAlign = "bottom";
    return n;
  }
  return doOnAbsPos(id, putLoad);
}

// Ermittle absolute Position des Elements relativ zum Body-Tag.
function doOnAbsPos(id, callback)
{
  var o = document.getElementById(id)
  if (!o)
    return false;

  var tNode = o;
  var xPos = 0;
  var yPos = 0;
  while (tNode && tNode.nodeName != "BODY")
  {
     xPos += tNode.offsetLeft;
     yPos += tNode.offsetTop;
     tNode = tNode.offsetParent;
  }
  //alert(tNode.nodeName);
  return callback(tNode, xPos, yPos, o.offsetWidth, o.offsetHeight);
}

function fadeOnCheckboxById(dest, cb_id)
{
  rs_fade(dest, AJS.$(cb_id).checked);
  return true;
}

function rs_fade(dest, out)
{
  if (out)
    AJS.fx.fadeOut(AJS.$(dest), { onComplete : function() { AJS.$(dest).style.display = 'none'; } });
  else
    AJS.fx.fadeIn(AJS.$(dest), { onStart : function() { AJS.$(dest).style.display = ''; } });
  return true;
}

var TextAreaResizer = {
    decorate: function(ta) {
        ta = AJS.$(ta);
        if (!ta)
          return false;

        var on_start = function() {
            var root = AJS.dnd.current_root;
            handler.style.position = 'absolute';

            var ta_pos = AJS.$AP(ta);
            AJS.setTop(handler, ta_pos.y + ta.offsetHeight);
            AJS.setLeft(handler, ta_pos.x);
        }

        var on_drag = function() {
            var root = AJS.dnd.current_root;
            var ta_pos = AJS.$AP(ta);
            var d_e_top = AJS.$AP(root).y;

            if(d_e_top > ta_pos.y) {
                AJS.setWidth(root, ta.offsetWidth);
                AJS.setHeight(ta, d_e_top - ta_pos.y);
            }
        }

        var move_filter = function(x, y) {
          if (!ta)
            return false;
            var ta_top = AJS.$AP(ta).y;
            return [x, y < ta_top && ta_top || y];
        }

        var handler = AJS.DIV({className: 'ta_handler'});
        AJS.setWidth(handler, ta.offsetWidth);

        AJS.dnd.dragAble(handler, {move_x: false,
                                   on_drag: on_drag,
                                   on_start: on_start,
                                   move_filter: move_filter});
        AJS.insertAfter(handler, ta);
    }
};

function RS_WZ_SHOW_FUNC2(s)
{
   var p=s.indexOf('[FENPIC;');
   var q=s.indexOf('[RSGPIC;');
   var pi='<img src="../diagrams/';
   if ((p>1) || (q>1))
   {
      if (p>1)
      {
         var s1=s.substr(p, 120);
         var p2=s1.indexOf(']');
         var sf=s1.substring(8, p2);
         return s.substring(0,p)+pi+'fen2pic.php3?'+sf+'" border=0>'+s.substring(p+p2+1,10000);
      }
      if (q>1)
      {
         var s1=s.substr(q, 120);
         var p2=s1.indexOf(']');
         var sf=s1.substring(8, p2);
         return s.substring(0,q)+pi+'rs_game2pic.php3?'+sf+'" border=0>'+s.substring(q+p2+1,10000);
      }
  }
  return false
}
