/**
 * wiederverwendbare JavaScript Funktionen
 * the BrainStorm Project
 *
 * seid ungezwungen, diese Funktionen wiederzuverwenden!
 */




/**
 * oeffnet ein neues Fenster, wobei die JS-Parameter um
 * valign und align, sowie width und height in % ergaenzt
 * sind.
 * wichtig: in den Parametern muss die Width- und Height-
 * Definition vor der align und valign erfolgen
 *
 * @param url, die im Fenster geoeffnet werden soll
 * @param w_name Name des Fensters, das geoeffnet wird
 * @param options String, der Kommasepariert die Optionen enthaelt
 * @return boolean wurde das Fenster erfolgreich geoeffnet
 */
function bsp_newindow(url,w_name,options)
{
  /************************* WICHTIG ***********************************
  / werden Align und Valign in den Options genutzt, so MUESSEN vorher width und
  / height angegeben werden, zudem duerfen die Werte NICHT in Hochkommas gefasst werden
  / z.B. : BSP_newWindow('http://www.www.de','name','width=100,height=50%,align=center,valign=bottom');
  **********************************************************************/
  
  // Auslesen der Eigentlichen Optionen
  var a_options = options.split( "," );
  var key, value, w_width, w_height;
  var s_width=screen.availWidth;
  var s_height=screen.availHeight;
  var new_options = "";
  
  // die einzelnen Features behandeln
  for ( i=0; i<a_options.length; i++ )
  {
    // Option zerlegen in Key und Wert
    key = a_options[i].substring ( 0, a_options[i].indexOf("=") );
    value = a_options[i].substr ( key.length +1, a_options[i].length - key.length );
    
    switch ( key )
    {
      case "width":
        // wenn am Ende ein % steht, an den Bildschirm anpassen
        if ( value.substr( value.length-1, 1 ) == "%" )
          value = s_width * value.substring(0,value.length-1)/100;
          w_width = value;
      break;
      
      case "height":
        // wenn am Ende ein % steht, an den Bildschirm anpassen
        if ( value.substr( value.length-1, 1 ) == "%" )
          value = s_height * value.substring(0,value.length-1)/100;
          w_height = value;
      break;
      
      case "align":
        key = "left";
        if ( value=="left" )
          // links ausrichten
          value = 0;
        else if ( value=="right" )
          // rechts ausrichten
          value = s_width - w_width;
        else
          // mittig ausrichten
          value = s_width/2 - w_width/2;
      break;
      
      case "valign":
        key = "top";
        if ( value=="top" )
          // oben ausrichten
          value = 0;
        else if ( value=="bottom" )
          // unten ausrichten
          value = s_height - w_height;
        else
          // mittig ausrichten
          value = s_height/2 - w_height/2;
      break;
    }
    
    new_options += key + "=" + value + ",";
  }

  // das letzte Komma abschneiden
  if ( new_options.length )
    new_options = new_options.substring (0, new_options.length - 1 );
  
  var win = window.open( url, w_name, new_options );
  
  if( (! win) || win.closed )
    return false;
    
  win.focus();
  return true;
}


/**
 * checkt alle Checkboxen mit einem bestimmten Namen
 *
 * @param aname der Checkboxen
 */
function checkboxen_aktivieren( aname )
{
  checkboxen_setzen( aname, true );
}

/**
 * nimmt das Haekchen aller Checkboxen mit einem bestimmten Namen zurueck
 *
 * @param aname der Checkboxen
 */
function checkboxen_deaktivieren( aname )
{
  checkboxen_setzen( aname, false );
}

/**
 * setzt die Checked-Eigenschaft aller Checkboxen,
 * die den gleichen Namen tragen
 *
 * @param aname Name des Checkboxen-Arrays
 * @param bchecked sollen die Checkboxen ausgewaehlt sein?
 */
function checkboxen_setzen( aname, bchecked )
{
  var a_chk = document.getElementsByName( aname );
  
  if( (! a_chk ) || a_chk.length == 0 )
    return;
    
  for( var i=0; i<a_chk.length; i++ )
  {
    a_chk[ i ].checked = bchecked;
    a_chk[ i ].onclick();
  }
}



/**
 * zeigt einen Block an, oder blendet ihn aus
 *
 * @param objid ID des Blocks
 * @param anzeigen?
 */
function block_anzeige( objid, banzeigen )
{
  var obj = document.getElementById( objid );
    
  if( banzeigen )
    obj.style.display = 'block';
  else
    obj.style.display = 'none';
}


/**
 * Dies ist der entsprechende Handler fuer das onclick-Event
 * auf externe Links, die zuvor mit der Funktion modify_external_links
 * behandelt wurden
 */
function external_link_handler()
{
  // versuchen, ein neues Fenster zu oeffnen
  var newwin = window.open( this.href );
  
  // falls das neue Fenster nicht geoeffnet werden konnte,
  // den Link ganz normal verfolgen
  if( (! newwin) || newwin.closed )
    return true;
  
  return false;
}


/**
 * Diese Funktion veranlasst alle Links (a) mit einer
 * bestimmten CSS-Klasse im Dokument,
 * ihr Ziel in einem neuen Fenster zu oeffnen.
 * @param extclassname Name der CSS-Klasse
 */
function modify_external_links( extclassname )
{
  var a_links = document.getElementsByTagName( 'a' );
  
  for( var i=0; i<a_links.length; i++ )
  {
    if( a_links[ i ].className == extclassname )
      a_links[ i ].onclick = external_link_handler;
  }
}



