/*
 * sitemap.js 1.51 01/01/2004
 *  - close panel if a link for a folder was clicked and resetPanelOnBookmarkClick is set
 *
 * sitemap.js 1.5  19/06/2003
 *  - add function markActiveNote to set style for active link, default 'bold' 
 *  - drop option resetPanelOnClick
 *  - drop option activeVsBlurOnIE
 +  - add tag "nowrap" to linked name col
 +  - add var iconDir
 *
 * sitemap.js 1.41 03/11/2002
 *  - add css for notes to configs
 *
 * sitemap.js 1.4  22/07/2002
 *  - add optional argument target for Note
 *  - add function preOpen
 *  - add option rememberKnotStatus
 *  - add option resetPanelOnBookmarkClick
 *  - add option resetPanelOnClick
 *  - add option clickOnFolderIcon
 *  - add option activeVsBlurOnIE
 *
 * sitemap.js 1.32 31/01/2002
 *  - add option showFolderIcon 0 off  1-3 pos of icon
 *  - add option onlyOneOpenFolderProPanel
 *  - add option clickOnFolderName
 *
 * sitemap.js 1.31 05/02/2001
 *  - Opera 5
 *
 * sitemap.js 1.3  27/11/2000
 *  - Netscape 6
 *
 * sitemap.js 1.2  20/05/2000
 *  - split array tree into arrays for each element old tree
 *  - no more type flag, an folder is an entry which has sons
 *  - a folder can have an link
 *  - while initing an default layers is shown 
 *
 * sitemap.js 1.1  20/10/1999
 *  - showTree only updates and init layers new which have been really changed
 *  - add deep to knot entry
 *  - substitute knotDeep[ id ] w/ tree[ id2treeIndex[ id ] ].deep
 *  - add alignment to img and a &nbsp; at the beginning of eyery line
 *  - add a fake img for bookmarks on top panel
 *
 * sitemap.js 1.02 14/10/1999
 *  - fix bug in initStyles
 *
 * sitemap.js 1.01 06/10/1999
 *  - fix bug in knotDeep for Netscape 4.00-4.0.5
 *
 * sitemap.js 1.0  20/09/1999
 *
 * Javascript function for displaying hierarchic directory structures with
 * the ability to collapse and expand directories.
 *
 * Copyright (c) 1999 Polzin GmbH, Duesseldorf. All Rights Reserved.
 * Author: Lutz Eymers <ixtab@polzin.com>
 * Download: http://www.polzin.com/inet/fset_inet.phtml?w=goodies
 *
 * Permission to use, copy, modify, and distribute this software
 * and its documentation for any purposes and without fee
 * is hereby granted provided that this copyright notice
 * appears in all copies. 
 *
 * Of course, this software is provided "as is" without express or implied
 * warranty of any kind.
 *
 */

window.onError=null

var idx=0
var treeId = new Array()
var treeP_id = new Array()
var treeIsOn = new Array()
var treeTyp = new Array()
var treeName = new Array()
var treeUrl = new Array()
var treeWasOn = new Array()
var treeDeep = new Array()
var treeLastY = new Array()
var treeIsShown = new Array()
var treeTarget = new Array()


function Note( id,p_id,name,url,targ ) {
  treeId[ idx ] = id
  treeP_id[ idx ] = p_id
  treeIsOn[ idx ] = false
  treeTyp[ idx ] = 'f'
  treeName[ idx ] = name
  treeUrl[ idx ] = url 
  treeWasOn[ idx ] = false
  treeDeep[ idx ] = 0
  treeLastY[ idx ] = 0
  treeIsShown[ idx ] = false
/*  treeTarget[ idx ] = (Note.arguments.length>4?Note.arguments[4]:defaultTarget) */
  treeTarget[ idx ] = targ
  idx++
}

function initDiv ( )
{
  if ( isDOM || isDomIE )
  {
    divPrefix='<div style="position:absolute; left:'+x0+'; top:0; visibility:hidden;" ID="sitemap'
    divInfo='<div class="sitemap" style="position:absolute; visibility:visible left:'+x0+'px; top:0;" ID="sitemap'
  }
  else
  {
    divPrefix='<div id="sitemap'
    divInfo='<div class="sitemap" id="sitemap'
  }
  document.writeln( divInfo +  'info">Bitte haben Sie etwas Geduld.<br>&nbsp;<br>Es werden die Eintr&auml;ge aus<br>&nbsp;<br>der Datenbank initialisiert.</div> ' )

  onFocusTxt=' onFocus="if(this.blur) this.blur()"'

  for ( var i=1; i<idx; i++ )
  {
    // linked Name ? 
    if ( treeUrl[i] )
      linkedName = '<a id="note_' + treeId[i] + '" class="notef' + (treeTyp[i]=='f'?1:0) + 'l1" href="' + treeUrl[i] + '" target="' + treeTarget[i] + '" onClick="sitemapClick(' + treeId[i] + ',1)"' + onFocusTxt  +'>' + treeName[i] + '</A>'
    else
      if (treeTyp[i]=='f' && clickOnFolderName)
        linkedName = '<a class="notef1l0" href="javascript:sitemapClick(' + treeId[i] + ',1)"' + onFocusTxt + '>' + treeName[i] + '</A>'
      else
        linkedName =  '<font class="notef' + (treeTyp[i]=='f'?1:0) + 'l0">' + treeName[i] + '</font>'

    // folder or bookmark
    if ( treeTyp[i] == 'b' ) 
      iconImg = '<img src="' + iconDir + 'file.gif" border="0" height="' + deltaY + '" width="12" hspace="0" vspace="4">'
    else 
      if (clickOnFolderIcon && treeUrl[i] != '' )
        iconImg = '<a href="' + treeUrl[i] + '" target="' + treeTarget[i] + '" onClick="sitemapClick(' + treeId[i] + ')" onFocus="if(this.blur) this.blur()"><img src="' + iconDir + 'folder_off.gif" border="0" name="folder' + treeId[i] + '" hspace="0" vspace="4"></a>'
      else
        iconImg = '<a href="javascript:sitemapClick(' + treeId[i] + ')" onFocus="if(this.blur) this.blur()"><img src="' + iconDir + 'folder_off.gif" border="0" name="folder' + treeId[i] + '" hspace="0" vspace="4"></a>'

    folder_deep = treeDeep[ id2treeIndex[ treeId[i] ] ]
    folder_style = (folder_deep?'top':'sub')
    spacerX = folder_deep * deltaX + ((showFolderIcon==3||showFolderIcon==1)&&treeTyp[i]=='b'?deltaImg:0)

    tdSpacer=''
    if (spacerX) tdSpacer='<td><img align="absmiddle" src="' + iconDir + 'file.gif" border="0" width="' + (spacerX) + '" height="' + deltaY + '"></TD>'

    tdIcon=''
    tdIconWidth=0
    if (treeTyp[i]=='f' && showFolderIcon) {
      tdIcon='<td width="' + deltaImg + '">' + iconImg  + '</td>'
      tdIconWidth=deltaImg
    }

    document.writeln( divPrefix + treeId[i] + '" class="sitemap' + folder_style + '"><nobr><table width="' + deltaL + '" border="0" cellspacing="0" cellpadding="0"><tr valign="middle">' + (showFolderIcon!=1?tdSpacer+tdIcon:tdIcon+tdSpacer) + '<td width="' + (deltaL-spacerX-tdIconWidth) + '" nowrap>' + '&nbsp;<img align="absmiddle" src="' + iconDir + 'file.gif" border="0" width="1" height="' + deltaY + '">' + linkedName + '</td></tr></table></nobr></div><br>')  
  }
}

function initStyles ( )
{
  document.writeln( '<style type="text/css">' + "\n" + '<!--' )
  for ( var i=1,y=y0; i<idx; i++ )
  {  
    document.writeln( '#sitemap' + treeId[i] + ' {POSITION: absolute; VISIBILITY: hidden; LEFT: '+x0+'px; TOP: '+y0+'px}' )
    if ( treeIsOn[ id2treeIndex[ treeP_id[i] ] ] )
      y += deltaY
  }
  document.writeln( '#sitemapinfo {POSITION: absolute; VISIBILITY: visible; LEFT: '+x0+'px; TOP: '+y0+'px}' )
  document.writeln( '//-->' + "\n" + '</style>' )
}


function marActiveKnote(id) {
  if ( isDOM ) {
    if ( lastActiveId && lastActiveId != id  )
      document.getElementById( 'note_' + lastActiveId ).style.fontWeight="normal"  
    document.getElementById( 'note_' + id ).style.fontWeight="bold"  
  } else if ( isDomIE ) {
    if ( lastActiveId && lastActiveId != id  )
      document.all[ 'note_' + lastActiveId ].style.fontWeight="normal"  
    document.all[ 'note_' + id ].style.fontWeight="bold"  
  }
  lastActiveId = id
}


function sitemapClick( id )
{
  var from = 0
  var i = id2treeIndex[ id ]

  if (sitemapClick.arguments.length==2)
    from = sitemapClick.arguments[1]

  if (treeUrl[i]!='' && (from==1 || from==0 && clickOnFolderIcon ) )  
    marActiveKnote( id )

  if ( resetPanelOnBookmarkClick && treeTyp[i]=='b' ) {
    closeFolderOnPanel( id, false )
    return
  }

  if ( resetPanelOnBookmarkClick && treeTyp[i]=='f' && ( from==1 && clickOnFolderName && treeUrl[i]!='' || from==0 && clickOnFolderIcon && treeUrl[i]!='' ) ) {
    closeFolderOnPanel( id, true )
  }

  if ( treeTyp[i]=='f' && from==1 && !clickOnFolderName )
    return

  if ( treeTyp[i]=='b')
    return


  if ( treeIsOn[ i ] )
  // close directory
  {
    // mark node as invisible
    treeIsOn[ i ]=false
    // mark all sons as invisible
    actDeep = treeDeep[ i ]
    for( var j=i+1; j<idx && treeDeep[j] > actDeep; j++ )
    {
      if (rememberKnotStatus)
        treeWasOn[ j ] = treeIsOn[ j ]
      else
      {
        if (showFolderIcon && treeIsOn[j] )
          gif_off( treeId[j] )
        treeWasOn[ j ] = false
      }

      treeIsOn[ j ]=false
    }
    if (showFolderIcon) gif_off( id )
  }
  else
  // open directory
  { 
    treeIsOn[ i ]=true
    // remember and restore old status
    actDeep = treeDeep[ i ]
    for( var j=i+1; j<idx && treeDeep[j] > actDeep; j++ )
    {
      treeIsOn[ j ] = treeWasOn[ j ]
    }
    if (showFolderIcon) gif_on( id )
    if ( onlyOneOpenFolderProPanel )
      closeFolderOnPanel( id, true )
  }
  showTree()
}

function knotDeep( id )
{
  var deep=0
  while ( true )
    if ( treeP_id[ id2treeIndex[id] ] == 0 )
      return deep
    else
    {
      ++deep
      id = treeP_id[ id2treeIndex[id] ]
    }
  return deep  
}

function closeFolderOnPanel( id, skip_id )
{
  var i = id2treeIndex[id]
  var p_id = treeP_id[ i ]
  var deep=treeDeep[ i ]

  for( var j=(skip_id?i-1:i); j>0 && treeDeep[j]>=deep; j-- )
    if ( treeP_id[ j ] == p_id && treeIsOn[ j ] )
      sitemapClick( treeId[j], 2 )
  for( var j=i+1; j<idx && treeDeep[j]>=deep; j++ )
    if ( treeP_id[ j ] == p_id && treeIsOn[ j ] )
      sitemapClick( treeId[j], 2 )
}

function showTree()
{
  for( var i=1, y=y0, x=x0; i<idx; i++ )
  {
    if ( treeIsOn[ id2treeIndex[ treeP_id[i] ] ] )
    {
      // show current node
      if ( !(y == treeLastY[i] && treeIsShown[i] ) )
      {
        showLayer( "sitemap"+ treeId[i] ) 
        setyLayer( "sitemap"+ treeId[i], y )
        treeIsShown[i] = true
      } 
      treeLastY[i] = y
      y += deltaY
    }
    else
    {
      // hide current node and all sons
      if ( treeIsShown[ i ] )
      {
        hideLayer( "sitemap"+ treeId[i] ) 
        treeIsShown[i] = false
      }
    }
  }
}

function initIndex() {
  for( var i=0; i<idx; i++ )
    id2treeIndex[ treeId[i] ] = i
}

function gif_name (name, width, height) {
  this.on = new Image (width, height)
  this.on.src = iconDir + name + "_on.gif"
  this.off = new Image (width, height)
  this.off.src = iconDir + name + "_off.gif"
}

function load_gif (name, width, height) {
  gif_name [name] = new gif_name (name,width,height)
}

function load_all () {
  load_gif ('folder',12,10)
}

function gif_on ( id ) {
  eval("document['folder" + id + "'].src = gif_name['folder'].on.src")
}

function gif_off ( id ) {
  eval("document['folder" + id + "'].src = gif_name['folder'].off.src")
}
 

if ( !(showFolderIcon || clickOnFolderName ) ) clickOnFolderName=true

var browserName = navigator.appName
var browserVersion = parseInt(navigator.appVersion)
var isIE = false
var isNN = false
var isDOM = false
var isDomIE = false
var isDomNN = false
var layerok = false

var isIE = browserName.indexOf("Microsoft Internet Explorer" )==-1?false:true
var isNN = browserName.indexOf("Netscape")==-1?false:true
var isOpera = browserName.indexOf("Opera")==-1?false:true
var isDOM = document.getElementById?true:false
var isDomNN = document.layers?true:false
var isDomIE = document.all?true:false

if ( isNN && browserVersion>=4 ) layerok=true
if ( isIE && browserVersion>=4 ) layerok=true
if ( isOpera && browserVersion>=5 ) layerok=true

var lastActiveId=0


function hideLayer(layerName) {
  if (isDOM)
    document.getElementById(layerName).style.visibility="hidden"
  else if (isDomIE)
    document.all[layerName].style.visibility="hidden"
  else if (isDomNN) 
    document.layers[layerName].visibility="hidden"
}

function showLayer(layerName) {
  if (isDOM)
    document.getElementById(layerName).style.visibility="visible"
  else if (isDomIE)
    document.all[layerName].style.visibility="visible"
  else if (isDomNN)
    document.layers[layerName].visibility="visible"
}

function setyLayer(layerName, y) {
  if (isDOM)
    document.getElementById(layerName).style.top=y
  else if (isDomIE)
    document.all[layerName].style.top=y
  else if (isDomNN)
    document.layers[layerName].top=y
}

var id2treeIndex = new Array()

// the structure is easy to understand with a simple example
// p_id is the id of the parent
// E0                                      ( id=0,p_id=-1 )
//          E11                            ( id=1,p_id=0)
//                     E111                ( id=2,p_id=1 )
//                     E112                ( id=3,p_id=1 )
//          E12                            ( id=4,p_id=0 )
//                     E121                ( id=5,p_id=4 ) 
//          E13                            ( id=6,p_id=0 ) 
//                     E131                ( id=7,p_id=6 ) 
//                                 E1311   ( id=8,p_id=7 ) 
//                     E132                ( id=9,p_id=6 ) 
// this is a multinary tree structure which is easy to
// populate with database data :)

function initArray()
{
  Note(0,-1,'','')
	Note(1,0,'The Collection','/v1/englisch/01sammlung/sammlung_e.html','SMHrechts')
	Note(2,0,'Painting + Sculpture','/v1/englisch/02munds/m_s_c_e.html','SMHrechts')
		Note(200,2,'Umberto Boccioni','/v1/englisch/02munds/boccioni/ub_ls_c_e.html','SMHrechts')
		Note(201,2,'Alexander Calder','/v1/englisch/02munds/calder/ac_lh_c_e.html','SMHrechts')
		Note(202,2,'Pablo Picasso','/v1/englisch/02munds/picasso/pp_tf_c_e.html','SMHrechts')
        Note(204,2,'Georg Baselitz','/v1/englisch/02munds/baselitz/baselitz.html','SMHrechts')
		Note(205,2,'Eva + Adele','/v1/englisch/02munds/evaadele/index.html','SMHrechts')

	Note(3,0,'Photography + Media','/v1/englisch/03pundm/03pundm-intro.html','SMHrechts')
	Note(4,0,'Prints','/v1/englisch/04grafik/04grafik-intro.html','SMHrechts')
		Note(400,4,'Max Beckmann','/v1/englisch/04grafik/beckmann/mb_da_c_e.html','SMHrechts')
		Note(401,4,'Paul Klee','/v1/englisch/04grafik/klee/pk_bm_c_e.html','SMHrechts')

	Note(5,0,'Rooms','/v1/englisch/05raeume/r_c_e.html','SMHrechts')
		Note(500,5,'El Lissitzky','/v1/englisch/05raeume/lissitzky/el_ka_c_e.html','SMHrechts')
		Note(501,5,'James Turrell','/v1/englisch/05raeume/turrell/jt_pc_c_e.html','SMHrechts')

	Note(6,0,'Current Exhibitions','/v1/englisch/ausstellungen/ausstellungen_e.html','SMHrechts')
		Note(601,6,'Timm Rautert','/v1/deutsch/ausstellungen/rautert/index_e.html','SMHrechts')
		Note(602,6,'Die 1960er Jahre...','/v1/deutsch/ausstellungen/1960/index_e.html','SMHrechts')   
		Note(603,6,'Antje Schiffers','/v1/deutsch/ausstellungen/schiffers/index_e.html','SMHrechts')
		Note(604,6,'1937. Looking for...','/v1/deutsch/ausstellungen/spurensuche/index_e.html','SMHrechts')  		 
		Note(605,6,'Helen Levitt','/v1/deutsch/ausstellungen/levitt/index_e.html','SMHrechts')  
		Note(606,6,'Expedition into...','/v1/deutsch/ausstellungen/expedition/index_e.html','SMHrechts')  

	Note(7,0,'Preview','/v1/englisch/vorschau/vorschau_e.html','SMHrechts')
	Note(8,0,'Niki de Saint Phalle','/v1/englisch/ausstellungen/niki/niki_e.html','SMHrechts')
	Note(9,0,'Spectrum Prize','/v1/englisch/19spectrum/sp_e.html','SMHrechts')

    Note(10,0,'Service','/v1/deutsch/service/oeffnungszeiten_e.html','SMHrechts')
       Note(1000,10,'Opening Times','/v1/deutsch/service/oeffnungszeiten_e.html','SMHrechts')
       Note(1001,10,'Guided Tours','/v1/deutsch/service/fuehrungen_e.html','SMHrechts')
       Note(1002,10,'Events','/v1/deutsch/service/veranstaltungen_e.html','SMHrechts')
       Note(1003,10,'Events for Children','/v1/deutsch/service/kinderundjugend_e.html','SMHrechts')

     Note(11,0,'SMH Schwitters Archive','/v1/englisch/12schwarchiv/12schwitters-intro.html','SMHrechts')
       Note(1100,11,'Merzbild 29A','/v1/englisch/12schwarchiv/ks_29_c_e.html','SMHrechts')
       Note(1101,11,'Merz Picture Thirty-one','/v1/englisch/12schwarchiv/ks_31_c_e.html','SMHrechts')
       Note(1102,11,'untitled Madonna','/v1/englisch/12schwarchiv/ks_ot2_c_e.html','SMHrechts')
       Note(1103,11,'www.schwitters.info','http://www.hannover.de/stadtdia_2/sprengel/index_engl.htm','_blank')

	Note(12,0,'Education + Communication','/v1/englisch/10bundk/bk_c_e.html','SMHrechts')
	Note(13,0,'Library','/v1/englisch/15service/bib_c_e.html','SMHrechts')

    Note(14,0,'Links','/v1/englisch/blank.html','SMHrechts')
       Note(1400,14,'Restaurant <em>&nbsp;Bell Arte</em>','http://www.bellarte.de','_blank')
       Note(1401,14,'m-Art-Edition','http://www.schluetersche.de','_blank')
       Note(1402,14,'Groninger Museum','http://www.groninger-museum.nl','_blank')
       Note(1403,14,'Art Service','http://www.art-service.de','_blank')
       Note(1404,14,'AuE-Kreativschule','http://www.aue-kreativschule.de','_blank')
       Note(1405,14,'ARTE','http://www.arte-tv.com/de/kunst-musik/buchtipps/480126.html','_blank')
       Note(1406,14,'De Pont Museum','http://www.depont.nl','_blank')

  treeTyp[0] = 'f'
  treeIsOn[0] = true
  treeWasOn[0] = true
}

function preOpen() 
{
  var self_url=location.href
  var rexep = /[&?]id=(\d+(,\d+)*)/
  if (rexep.test(self_url)) 
  {
    rexep.exec(self_url)
    var a_id=RegExp.$1.split(',')
    for ( i=0; i<a_id.length; i++ )
    {
      id=a_id[i]
  		while ( id )
      {
        treeIsOn[id2treeIndex[id]] = true
        treeWasOn[id2treeIndex[id]] = true
        treeIsShown[id2treeIndex[id]] = true
			    if (treeTyp[id2treeIndex[id]] == 'f') gif_on(id)
        id=treeP_id[id2treeIndex[id]]
      }
    }
  }
}

var idx=0
initArray()
initIndex()
load_all()
for( i=1; i<idx; i++ )
{
  treeDeep[i] = knotDeep( treeId[i] )
  treeTyp[i] = (i==idx-1||treeP_id[i+1]!=treeId[i]?'b':'f')
  if ( treeDeep[i] == 0 )
    treeIsShown[i] = true
}
if ( isDomNN )
  initStyles()
