_slidein_dom = document.getElementById
_slidein_ns4 = document.layers
_slidein_ns6 = document.getElementById && !document.all
_slidein_calunits = document.layers ? "" : "px"
_slidein_prefix = 'slidein_'

function slidein_init (doc) {
   _slidein_document = doc
   _slidein_objects = new Array()
   _slidein_timer = false
}

function slidein_add (ident, x, y, w, h, title_h, title, title_style, content, content_style, frame_style, movement, delay) {

   if (_slidein_ns4) {
      return
   }

   // div tags zusammenstellen
   var html = '';
   html += '<div class="slidein" id="' + _slidein_prefix + ident + '" style="visibility: hidden; ' + frame_style + '">'
   html += '<div id="' + _slidein_prefix + ident + '_title" style="' + title_style + '">' + title + '</div>'
   html += '<div id="' + _slidein_prefix + ident + '_content" style="' + content_style + '">' + content + '</div>'
   html += '</div>'
   
   var o = new Object()
   o.crossobj = false
   o.html = html
   o.ident = ident
   o.x_current = x
   o.y_current = (movement == 'sinus') ? -h-40 : y
   o.x_target = x
   o.y_target = y
   o.w = w
   o.h = h
   o.title_h = title_h
   o.sin = 0
   o.finished = false
   o.movement = movement
   o.delay = delay
   _slidein_objects.push(o)
   
}

function slidein_start () {
   var html = ''
   for (var i = 0; i < _slidein_objects.length; i++) {
      var o = _slidein_objects[i]
      html = html + o.html
   }
   var slidein = _slidein_document.getElementById('slidein')
   slidein.innerHTML = html

   for (var i = 0; i < _slidein_objects.length; i++) {
      
      var o = _slidein_objects[i]
      
      // var slidein = _slidein_document.getElementById('slidein'+o.ident)
      // slidein.innerHTML = o.html
      
      var slidein = _slidein_document.getElementById(_slidein_prefix + o.ident)
      o.crossobj = slidein.style 
      with (slidein) {
         style.visibility = (_slidein_dom || _slidein_ie) ? "visible" : "show"
         style.position = 'absolute'
         style.left = o.x_target + _slidein_calunits
         style.top =  o.y_current + _slidein_calunits
         style.width = o.w + _slidein_calunits
         style.min_width = o.w + _slidein_calunits
         style.max_width = o.w + _slidein_calunits
         style.height = o.h + _slidein_calunits
         style.min_height = o.h + _slidein_calunits
         style.max_height = o.h + _slidein_calunits
         style.overflow = 'hidden'
         style.zIndex = 999
      }

      var slidein_title = _slidein_document.getElementById(_slidein_prefix + o.ident + '_title')
      with (slidein_title) {
         style.height = o.title_h + _slidein_calunits
      }
      
      var slidein_content = _slidein_document.getElementById(_slidein_prefix + o.ident + '_content')
      with (slidein_content) {
         style.height = (o.h - o.title_h) + _slidein_calunits
         style.overflow = 'auto'
      }
      
   }
   
   _slidein_timer = setInterval("_slidein_animation()",40) // interval 40msec -> 25fps
   
}

function _slidein_close_find (o) {
   if (o.className == 'slidein') {
      return o
   } else if (!o) {
      return false
   } else {
      return _slidein_close_find(o.parentNode)
   }
}

function slidein_close (slidein) {
   o = _slidein_close_find(slidein)
   if (!o) {
      return false
   }
   var id = o.id
   var ident = id.substring(_slidein_prefix.length,id.length)
   o.style.width = '1' + _slidein_calunits
   o.style.height = '1' + _slidein_calunits
   if (o.style.backgroundColor) {
      o.style.backgroundColor = 'none'
   }
   if (o.style.border) {
      o.style.border = '0' + _slidein_calunits
   }
   // @@@todo derzeit hartkodiert fuer alerts!
   o.innerHTML = '<img src="/alert_read.php?ident=' + ident + '" width="1" height="1" vspace="0" hspace="0" border="0" alt="" title="">'
}

function _slidein_animation () {
   var count_finished = 0
   for (var i=0; i < _slidein_objects.length; i++) {
      var o = _slidein_objects[i]
      if (o.movement != 'sinus') {
	      o.finished = true
	      o.crossobj.top = o.y_current + _slidein_calunits
      }
      if (o.finished) {
         count_finished++
         continue
      }
      if (o.delay > 0) {
         o.delay-=40
      } else if (o.sin < 90) {
         var rad = Math.PI * o.sin / 180
         var amp = o.y_target + o.h
         var off = -o.h
         o.y_current = (Math.sin(rad) * amp) + off
         o.sin += 2
      } else if (o.y_current != o.y_target) {
         o.y_current = o.y_target
         o.finished = true
         count_finished++
      } else {
         continue
      }
      o.crossobj.top = o.y_current + _slidein_calunits
   }
   if (count_finished == _slidein_objects.length) {
      clearInterval(_slidein_timer)
   }
}
