var advSearch = false;
var resmax = 5;
var tooltip, wcScrollTimer, langScrollTimer, wcScrollMax, langScrollMax, wcScrollDir, langScrollDir;

function init()
{ var str;

  if ( location.search != "" )
  { str = unescape( location.search.substring(1) );
    if( str.indexOf( "q=" ) == 0 )
      str = str.substring( 2 );
    header.document.getElementById('text_simple').value = str;
    doSearch( 0, resmax );
  }
  else
  { content.location = "http:dataservlet?f=init";
    setFocus();
  }
}

function setFocus()
{ var elem;

  elem = header.document.getElementById( advSearch? "text_adv": "text_simple" );
  elem.focus();
}

function input(e)
{ if ( e.keyCode == 13  )
  { doSearch( 0, resmax );
  }
}

function searchnow( e )
{ doSearch( 0, resmax );
}

function mode( e )
{ switchMode();
}

function help( e )
{ //alert( "Hjælp - ikke implementeret" );
  open( "help.htm", "help",
      "width=700,height=500,resizable=yes,scrollbars=yes,status=yes" );
}

function prioMethod( e )
{ doSearch( 0, resmax );
}

function aarMethod( e )
{ header.document.getElementById( "aar1" ).value = "";
  header.document.getElementById( "aar2" ).value = "";
  setFocus();
}

function searchYear( e, year )
{ var elem;

  if ( !advSearch )
    switchMode();

  year = cleanYear( year );
  
  //elem = header.document.getElementById("text_adv");
  //elem.value = "";

  elem = header.document.getElementById("nottext");
  elem.value = "";

  elem = header.document.getElementById("langInput");
  initSelectInput( elem, "" );

  elem = header.document.getElementById("wcInput");
  initSelectInput( elem, "" );
    
  elem = header.document.getElementById("aar1");
  elem.value = year;

  elem = header.document.getElementById("aar2");
  elem.value = year;
  
  doSearch( 0, resmax );
}

function switchMode()
{ if ( advSearch )
  { document.getElementById("set").rows = "245,*";
    header.document.getElementById("adv_header").style.display = "none";
    header.document.getElementById("simple_header").style.display = "inline";
    advSearch = false;
  }
  else
  { document.getElementById("set").rows = "373,*";
    header.document.getElementById("simple_header").style.display = "none";
    header.document.getElementById("adv_header").style.display = "inline";
    advSearch = true;
  }
}

function cleanYear( year )
{ while ( -1 == "123456789".indexOf( year.charAt(0) ) )
    year = year.substring(1);
  return( year );
}

function trim( s )
{ while ( s.length > 0 && s.charAt(0) == ' ' )
    s = s.substring(1);
  while( s.length > 0 && s.charAt( s.length-1 ) == ' ' )
    s = s.substring( 0, s.length-1 );
  return( s );
}

function doSearch( first, last )
{ var parms, elem, aar1, aar2;

  if ( !checkSearch() )
    return;
  
  parms = "f=se";
  parms += "&a=" + advSearch;
  parms += "&fi=" + first;
  parms += "&la=" + last;
  
  if ( advSearch )
  { elem = header.document.getElementById("text_adv");
    parms += "&ts=" + escapePlus( elem.value );
  
    elem = header.document.getElementById("krono_adv")
    parms += "&kr=" + elem.checked;
  
    elem = header.document.getElementById("combineInput");
    parms += "&co=" + escapePlus( elem.innerHTML );

    elem = header.document.getElementById("nottext");
    parms += "&tn=" + escapePlus( elem.value );

    elem = header.document.getElementById("langInput");
    parms += "&sp=" + escapePlus( elem.innerHTML );

    elem = header.document.getElementById("wcInput");
    parms += "&wc=" + escapePlus( elem.innerHTML );
    
    elem = header.document.getElementById("aar1");
    aar1 = trim( elem.value );

    elem = header.document.getElementById("aar2");
    aar2 = trim( elem.value );
    
    parms += "&da=" + ( aar1 != "" || aar2 != "" );
    parms += "&ar=" + aar1 + "-" + aar2;
  }
  else
  { elem = header.document.getElementById("text_simple");
    parms += "&ts=" + escapePlus( elem.value );
  
    elem = header.document.getElementById("krono_simple")
    parms += "&kr=" + elem.checked;
  }
  
  //alert( "parms: " + parms );
  
  content.location = "http:dataservlet?" + parms;
  setFocus();
}

function searchLoaded( a, ts, kr, co, tn, sp, wc, da, ar, controls )
{ var elem, i, interval;

  if ( ( a=="true") != advSearch )
    switchMode();

  elem = header.document.getElementById("text_simple");
  elem.value = attributeValueUnescape( ts );

  elem = header.document.getElementById("text_adv");
  elem.value = attributeValueUnescape( ts );
  
  elem = header.document.getElementById(kr=="true"?"krono_simple":"prio_simple");
  elem.checked = true;

  elem = header.document.getElementById(kr=="true"?"krono_adv":"prio_adv");
  elem.checked = true;
  
  if ( advSearch )
  { elem = header.document.getElementById("combineInput");
    initSelectInput( elem, co );

    elem = header.document.getElementById("nottext");
    elem.value = attributeValueUnescape( tn );

    elem = header.document.getElementById("langInput");
    initSelectInput( elem, sp );

    elem = header.document.getElementById("wcInput");
    initSelectInput( elem, wc );

    interval = attributeValueUnescape( ar ).split( "-" );  

    elem = header.document.getElementById("aar1");
    elem.value = interval[0];

    elem = header.document.getElementById("aar2");
    elem.value = interval[1];
  }
  
  elem = header.document.getElementById("controls");
  elem.innerHTML = attributeValueUnescape( controls );
}

function checkSearch()
{ var value1, value2;
  var aar1, aar2;
  var aarPattern = new RegExp( "==[0-9]{4}==" );

  value1 = header.document.getElementById("aar1").value;
  value2 = header.document.getElementById("aar2").value;
  value1 = trim( value1 );
  value2 = trim( value2 );
  
  if ( advSearch && ( value1 != "" || value2 != "" ) )
  { if ( value1 != "" && !( "==" + value1 + "==" ).match( aarPattern ) )
    { alert( "År skal angives som et fircifret tal");
      return( false );
    }
    if ( value2 != "" && !( "==" + value2 + "==" ).match( aarPattern ) )
    { alert( "År skal angives som et fircifret tal");
      return( false );
    }
    if ( value1 != "" && value2 != "" )
    { if ( aar1 > aar2 )
      { alert( "Det første årstal må ikke være større end det sidste" );
        return( false );
      }
    }
  }

  return( true );
}

function crossref( e, word, artikler )
{ var parms;

  parms = "f=cr&ts=" + escapePlus(word) + "&id=" + artikler ;
  open( "http:dataservlet?" + parms, "_blank",
        "left=" + (e.screenX) + ",top=" + (e.screenY-100)
        + ",width=500,height=250,resizable=yes,scrollbars=yes,status=yes" );
}

function followCrossref( e, win, a )
{ var elem;

  if ( advSearch )
    switchMode();

  elem = header.document.getElementById("text_simple");
  elem.value = attributeValueUnescape( a );
  doSearch( 0, resmax );
  win.close();
}

function escapePlus( s )
{ var i;

  s = encodeURI( s );
  //s = escape( s );
  while ( -1 != ( i = s.indexOf( "+" ) ) )
    s = s.substring( 0, i ) + "%2B" + s.substring( i+1 );
  while ( -1 != ( i = s.indexOf( "#" ) ) )
    s = s.substring( 0, i ) + "%23" + s.substring( i+1 );
  while ( -1 != ( i = s.indexOf( "&" ) ) )
    s = s.substring( 0, i ) + "%26" + s.substring( i+1 );
  return( s );
}

function attributeValueUnescape( s )
{ var i;

  for ( i = 0; i < s.length; i++ )
  { if ( s.charAt(i) == '$' )
    { s = s.substring( 0, i )
        + String.fromCharCode( parseInt(s.substring(i+1,i+3),16) )
        + s.substring( i+3 );
    }
  }
  
  return( s );
}

function mouseover(e)
{ var elem;

  elem = getSource( e );
  setState( elem, 2 );
}

function mouseout(e)
{ var elem;

  elem = getSource( e );
  setState( elem, 1 );
}

function mousedown(e)
{ var elem;

  elem = getSource( e );
  setState( elem, 3 );
}

function mouseup(e)
{ var elem;

  elem = getSource( e );
  setState( elem, 2 );
}

function stopEvent( e )
{ if ( e.stopPropagation )
    e.stopPropagation();
  else
    e.cancelBubble = true;
}

function setState( elem, state )
{ var src, i;

  src = elem.src;
  i = src.lastIndexOf( '_' );
  src = src.substring( 0, i );
  switch (state)
  { case 0:
      src = src + "_inactive.png";
      break;
    case 1:
      src = src + "_idle.png";
      break;
    case 2:
      src = src + "_mouseover.png";
      break;
    case 3:
      src = src + "_down.png";
      break;
  }
  elem.src = src;
}

function select( e, cmd)
{ var elem, cnt;

  elem = getSource( e );
  switch (cmd)
  { case "first":
      cnt = parseInt( elem.getAttribute('bookmark') );
      doSearch(0,resmax);
      break;
    case "prev":
      cnt = parseInt( elem.getAttribute('bookmark') );
      doSearch(cnt-resmax,cnt);
      break;
    case "next":
      cnt = parseInt( elem.getAttribute('bookmark') );
      doSearch(cnt+resmax,cnt+2*resmax);
      break;
    case "last":
      cnt = parseInt( elem.getAttribute('bookmark') );
      cnt = cnt - ( (cnt-1) % resmax + 1 );
      doSearch(cnt,cnt+resmax);
      break;
    default:
      alert( "w'hat" );
      break;
  }
}

function openSelect( e )
{ var src, elem;

  src = getSource( e );
  if ( src.id == "combineButton" )
  { elem = header.document.getElementById( "combineSelect" );
    elem.style.display = ( elem.style.display=="none"? "block": "none" );
  }
  else if ( src.id == "langButton" )
  { elem = header.document.getElementById( "langSelect" );
    elem.style.display = ( elem.style.display=="none"? "block": "none" );
  }
  else if ( src.id == "wcButton" )
  { elem = header.document.getElementById( "wcSelect" );
    elem.style.display = ( elem.style.display=="none"? "block": "none" );
  }
}

function closeSelect( e, wrapper )
{ var src;

  src = header.document.getElementById( "combineSelect" );
  if ( src.style.display == "block" && !eventInside( e, wrapper, src ) )
    src.style.display = "none";
  src = header.document.getElementById( "langSelect" );
  if ( src.style.display == "block" && !eventInside( e, wrapper, src ) )
    src.style.display = "none";
  src = header.document.getElementById( "wcSelect" );
  if ( src.style.display == "block" && !eventInside( e, wrapper, src ) )
    src.style.display = "none";
}

function toggleSelect( e )
{ var src, src1, state, all, div;

  src = getSource( e );
  div = src;
  state = src.getAttribute("selected");
  all = src.getAttribute( "all" );
  state = ( state=="1"?"0":"1" );
  setSelectCell( src, state );
  if ( all == "1" )
  { for( ; src.tagName != "TABLE"; src = src.parentNode );
    for( src = src.firstChild; src.tagName != "TR"; src = src.firstChild );
    for( src = src.nextSibling; src; src = src.nextSibling )
    { if ( src.tagName == "TR" )
      { for ( src1 = src.firstChild; src1; src1 = src1.nextSibling )
        { if ( src1.tagName == "TD" )
            setSelectCell( src1, "0" );
        }
      }
    }
    clearSelectInput( div );
  }
  else
  { for( ; src.tagName != "TABLE"; src = src.parentNode );
    for( src = src.firstChild; src.tagName != "TR"; src = src.firstChild );
    for( src = src.firstChild; src.tagName != "TD"; src = src.nextSibling );
    setSelectCell( src, "0" );
    setSelectInput( div );
  }
}

function chooseSelect( e )
{ var src, div;

  src = getSource( e );
  for( div = src; div.tagName != "DIV"; div = div.parentNode );
  
  if ( div.id == "combineSelect" )
    header.document.getElementById( "combineInput" ).innerHTML = src.innerHTML;
  div.style.display = "none";
}

function setSelectCell( cell, value )
{ cell.setAttribute( "selected", value );
  cell.style.background = ( value=="0"? "white": "#3a79b8" );
  cell.style.color = ( value=="0"? "#3a79b8": "white" );
}

function clearSelectInput( cell )
{ var div;

  for( div = cell; div.tagName != "DIV"; div = div.parentNode );
  if ( div.id == "langSelect" )
  { header.document.getElementById( "langInput" ).innerHTML = "";
    setLangScroll();
  }
  else if ( div.id == "wcSelect" )
  { header.document.getElementById( "wcInput" ).innerHTML = "";
    setWcScroll();
  }
}

function setSelectInput( cell )
{ var value, cell1, cell2, div, i, j, div1;

  for( div = cell; div.tagName != "DIV"; div = div.parentNode );
  
  for( ; cell.tagName != "TABLE"; cell = cell.parentNode );
  for( cell = cell.firstChild; cell.tagName != "TR"; cell = cell.firstChild );
  value = "";
  i = 0;
  cell1 = cell;
  for( cell = cell.nextSibling; cell && cell.tagName != "TR"; cell = cell.nextSibling );
  
  while( true )
  { for( cell1 = cell1.nextSibling; cell1 && cell1.tagName != "TR"; cell1 = cell1.nextSibling );
    if ( !cell1 )
    { i++;
      cell1 = cell;
    }
    for ( cell2 = cell1.firstChild, j = 0; cell2; cell2 = cell2.nextSibling )
    { if ( !cell2 )
        break;
      if ( cell2.tagName == "TD" )
      { j++;
        if ( j > i )
          break;
      }
    }
    if ( !cell2 )
      break;
    
    if ( cell2.getAttribute( "selected" ) == "1" )
    { value += ( value==""? "": ", " );
      value += cell2.innerHTML;
    }

  }

  if ( div.id == "langSelect")
  { div1 = header.document.getElementById( "langInput" );
    div1.innerHTML = value;
    setLangScroll();
  }
  else if ( div.id == "wcSelect" )
  { div1 = header.document.getElementById( "wcInput" );
    div1.innerHTML = value;
    setWcScroll();
  }
}

function setWcScroll()
{ var div, value;

  div = header.document.getElementById( "wcInput" );
  div.style.left = 0;
  if ( wcScrollTimer )
    clearTimeout( wcScrollTimer );
  wcScrollTimer = null;
  wcScrollDir = -1;
  value = div.innerHTML;
  div.innerHTML = "<span>" + value + "</span>";
  wcScrollMax = div.firstChild.scrollWidth - parseInt( div.parentNode.style.width ) + 20;
  div.innerHTML = value;
  if ( wcScrollMax > 0 )
    wcScrollTimer = setTimeout( "doWcScroll()", 1000 );
}

function doWcScroll()
{ var div, pos;

  div = header.document.getElementById( "wcInput" );
  pos = parseInt( div.style.left );
  if ( pos > 0 )
  { wcScrollDir = -1;
    div.style.left = 0;
    wcScrollTimer = setTimeout( "doWcScroll()", 1000 );
  }
  else if ( pos < -wcScrollMax )
  { wcScrollDir = 1;
    div.style.left = -wcScrollMax;
    wcScrollTimer = setTimeout( "doWcScroll()", 1000 );
  }
  else
  { div.style.left = pos + 2*wcScrollDir;
    wcScrollTimer = setTimeout( "doWcScroll()", 10 );
  }
}

function setLangScroll()
{ var div, value;

  div = header.document.getElementById( "langInput" );
  div.style.left = 0;
  if ( langScrollTimer )
    clearTimeout( langScrollTimer );
  langScrollTimer = null;
  langScrollDir = -1;
  value = div.innerHTML;
  div.innerHTML = "<span>" + value + "</span>";
  langScrollMax = div.firstChild.scrollWidth - parseInt( div.parentNode.style.width ) + 20;
  div.innerHTML = value;
  if ( langScrollMax > 0 )
    langScrollTimer = setTimeout( "doLangScroll()", 1000 );
}

function doLangScroll()
{ var div, pos;

  div = header.document.getElementById( "langInput" );
  pos = parseInt( div.style.left );
  if ( pos > 0 )
  { langScrollDir = -1;
    div.style.left = 0;
    langScrollTimer = setTimeout( "doLangScroll()", 1000 );
  }
  else if ( pos < -langScrollMax )
  { langScrollDir = 1;
    div.style.left = -langScrollMax;
    langScrollTimer = setTimeout( "doLangScroll()", 1000 );
  }
  else
  { div.style.left = pos + 2*langScrollDir;
    langScrollTimer = setTimeout( "doLangScroll()", 10 );
  }
}

function initSelectInput( inp, value )
{ var div, values, cell, cell1, i, found;

  inp.innerHTML = value;
  values = value.split( ", " );
  if ( inp.id == "langInput" || inp.id == "wcInput" )
  { div = header.document.getElementById( inp.id=="langInput"? "langSelect": "wcSelect" );
    for( cell = div.firstChild; cell.tagName != "TR"; cell = cell.firstChild );
    cell1 = cell.firstChild;
    setSelectCell( cell1, ( value==""? "1": "0" ) );
    for( cell = cell.nextSibling; cell; cell = cell.nextSibling )
    { if ( cell.tagName == "TR" )
      { for ( cell1 = cell.firstChild; cell1; cell1 = cell1.nextSibling )
        { if( cell1.tagName == "TD" )
          { for ( i = 0, found = false; i < values.length; i++ )
            { if ( values[i] == cell1.innerHTML )
                found = true;
            }
            setSelectCell( cell1, ( found? "1": "0" ) );
          }
        }
      }
    }
  }
}

function eventInside( e, wrapper, src )
{ var leftBias, topBias;

  leftBias = wrapper.offsetLeft;
  topBias = wrapper.offsetTop - 5;

  return(
    src.offsetLeft <= e.clientX - leftBias &&
    e.clientX - leftBias <= src.offsetLeft + src.offsetWidth &&
    src.offsetTop <= e.clientY - topBias &&
    e.clientY - topBias <= src.offsetTop + src.offsetHeight );
}

function getSource( e )
{ return( e.target? e.target: e.srcElement );
}

function showTooltip( e )
{ showTooltip1( e, content )
}

function showTooltip1( e, frame )
{ var x, y, inner, outer, txt;

  x = e.clientX + frame.document.body.scrollLeft + 10;
  y = e.clientY + frame.document.body.scrollTop;
  inner = frame.document.getElementById( "tooltipInner" );
  outer = frame.document.getElementById( "tooltipOuter" );
  txt = getSource( e ).getAttribute( "tooltip" );
  if ( txt == null )
    txt = getSource( e ).parentNode.getAttribute( "tooltip" );
  inner.innerHTML = txt
  outer.style.left = x;
  outer.style.top = y;
  outer.style.display = "inline";
  tooltip = outer;
}

function hideTooltip( e )
{ if ( tooltip )
    tooltip.style.display = "none";
  tooltip = null;
}

function showHelpTooltip( e, frame )
{ var x, y, inner, outer, src;

  x = e.clientX + frame.document.body.scrollLeft + 10;
  y = e.clientY + frame.document.body.scrollTop;
  inner = frame.document.getElementById( "tooltipInner" );
  outer = frame.document.getElementById( "tooltipOuter" );
  for( src = getSource(e); !src.getAttribute( "tooltip" ); src = src.parentNode );
  inner.innerHTML = src.getAttribute( "tooltip" );
  
  outer.style.left = x;
  outer.style.top = y;
  outer.style.display = "inline";
  tooltip = outer;
}

function hideHelpTooltip( e )
{ if ( tooltip )
    tooltip.style.display = "none";
  tooltip = null;
}

