////////////
// jQuery //
////////////

jQuery.ajaxSetup({dataFilter:function(data,type)
{
  if(type=="json" && typeof data=="string" && data.length>=4 && data.substring(0,2)=="/*" && data.substring(data.length-2)=="*/")
    return data.substring(2,data.length-2);
  return data;
}});

$(function()
{
  // Focus first input element
  $(":input[type!='hidden']:first").focus();
  // Handle enter
  $("body").keydown(function(event)
  {
    if(event.keyCode==13)
      submitForm.call(event.target);
  });
  // Hover for span, div and tr links
  $("span.link, div.link, tr.link").hover(
    function()
    {
      var span=$(this)
      var classnames=span.attr("class").split(/\s+/);
      for(var i=0;i<classnames.length;i++)
        if(classnames[i].search(/-hover$/)==-1)
          span.addClass(classnames[i]+"-hover");
    },
    function()
    {
      var span=$(this)
      var classnames=span.attr("class").split(/\s+/);
      for(var i=0;i<classnames.length;i++)
        if(classnames[i].search(/-hover$/)!=-1)
          span.removeClass(classnames[i]);
    }
  );
  setTableClasses();
});

function getChildElements(parent)
{
  var i,j,childs,elements,count;

  childs=parent.childNodes;
  count=0;
  for(i=0;i<childs.length;i++)
    if(childs[i].nodeType==1)
      count++;
  elements=new Array(count);
  j=0;
  for(i=0;i<childs.length;i++)
    if(childs[i].nodeType==1)
      elements[j++]=childs[i];
  return elements;
}

function setTableClasses() {
  var t,r,c,e2,e2,a;
  t=document.getElementsByTagName("table");
  for (var i=0; i<t.length; i++) {
    r=t[i].getElementsByTagName("tr");
    for (var j=0; j<r.length; j++) {
      if (j % 2 == 0)
        r[j].className = "oddRow " + r[j].className;
      else
        r[j].className = "evenRow " + r[j].className;
      c=getChildElements(r[j]);
      c[0].className = "firstCell " + c[0].className;
      c[c.length-1].className = "lastCell " + c[c.length-1].className;

      if(t[i].className == "zebra")
      {
        e1 = document.createElement(c[0].tagName);
        a = document.createAttribute("class");
        a.nodeValue = "beforeFirst";
        e1.setAttributeNode(a);
        if (j % 2 == 0)
        {
          e2 = document.createElement("img");
          a = document.createAttribute("src");
          a.nodeValue = "/media/background/oddrow_topleft.png";
          e2.setAttributeNode(a);
          e1.appendChild(e2);
        }
        r[j].insertBefore(e1,c[0]);
  
        e1 = document.createElement(c[0].tagName);
        a = document.createAttribute("class");
        a.nodeValue = "afterLast";
        e1.setAttributeNode(a);
        if (j % 2 == 0)
        {
          e2 = document.createElement("img");
          a = document.createAttribute("src");
          a.nodeValue = "/media/background/oddrow_topright.png";
          e2.setAttributeNode(a);
          e1.appendChild(e2);
        }
        r[j].appendChild(e1);
      }
    }
  }
}

/**
 * Opens an URL.
 *
 * @param url
 *   String, the URL.
 * @param target
 *   String, the target (can be null).
 */
function openURL(url,target)
{
  window.open(url,target==null || target==""?"_self":target);
  return false;
}

/**
 * Submit a form.
 *
 * @param this
 *   HTMLElement, an element in the form.
 * @param processback
 *   Optional, Number, the processback value.
 */
function submitForm(processback)
{
  var form=$(this).parents("form");
  $("input[name='processback']",form).val(processback===undefined?"":processback);
  form.submit();
  return false;
}

/**
 * Does a POST request.
 *
 * @param url
 *   String, the URL. 
 * @param data
 *   String/Object, the data to post.
 * @param process
 *   Function(response), function to process the response.  
 */
function postRequest(url,data,process)
{
  $.ajax(
  {
    url: url,
    type: "POST",
    dataType: "html",
    data: typeof data=="string"?data:$.param(data),
    complete: function(res, status)
    {
      if(status=="success" || status=="notmodified")
        process(res.responseText);
      else if(status=="error" && res.status==401)
        // Session timeout => reload complete page to show login
        window.location.reload();
      else
        alert("Es ist ein Fehler aufgetreten. Bitte probieren Sie es sp\u00E4ter nochmal.");
    }
  });
}
