// $Id: epaper.js,v 1.65 2002/12/02 16:53:46 agraf Exp $

//
// 2002-2004 by Kevag Telekom GmbH (KTK); Author: Alexander Graf
//
// Copyright by KTK, Cusanusstr. 7, 56073 Koblenz, Germany. All rights reserved.
// Copyright in this software is owned by KTK, unless otherwise indicated.
//
// You are not allowed to distribute this software in any form or use it as
// part of another project without asking the owner for permission to use.
//

onError = null;

//
// Main configuration
//
var eP_objecthead    = 'eP';
var eP_urlprefix     = '';
var eP_includeprefix = '';

//
// Popup configuration
//
var eP_popwidth   = 170;
var eP_popborder  = 1;
var eP_popxoffset = 10;
var eP_popyoffset = 20;
var eP_popxmin    = 0;
var eP_popxmax    = 4000;
var eP_popymin    = 0;
var eP_popymax    = 4000;
var eP_lstdots    = '&bull;&nbsp;';

//
// Marker configuration
//
var eP_markborder = 2;
var eP_markcolor  = "#ff0000";
var eP_markimages = new Array(null, null, null, null); // top bottom left right
var eP_marknames  = '.1.2';

//
// Cookie configuration
//
// Only keys specified in cookieDefs should be used with eP_SetCookie and eP_GetCookie!
// You should not use Split characters in option keys/values!
var eP_cookieName = 'ePKLON2=';
var eP_cookieDefs = unescape('Overlay-1%2fMarker-1%2fPopPos-scr%2fPageNum-1%2fMarkUp-1%2fMarkWidth-0%2fStartUp-auto%2fFavorites-titel.0.lokal.0.sport.0.panor.0');
var eP_cookieWarn = 'HINWEIS:\nIhre Einstellungen konnten nicht gespeichert werden!\nSie haben möglicherweise "Cookies" dekativiert.';
var eP_cookieUID  = null; // Cookie User-ID for server-stored cookies
var eP_cookieDays = 360; // How many days the Cookie is valid
var eP_cookieUpda = 180; // After how many days the Cookie should be updated
var eP_cookiePath = unescape('%2f'); // In which paths the Cookie is valid
var eP_cookieKchr = '-'; // Split character for Key/Value
var eP_cookieSchr = unescape('%2f'); // Split character for Options
var eP_cookieLchr = '.'; // Split character for Lists in Option
// Init cookieDefs
eP_cookieDefs = eP_cookieDefs.split(eP_cookieSchr);

//
// Markup configuration
//
var eP_mark_fg  = ['black','black','white','white','white','white','black','black'];
var eP_mark_bg  = ['#99ff99','#ff66ff','#00aa00','#886800','#004699','#990099','#ffff66','#A0FFFF'];
var eP_mark_par = 'mark';
var eP_mark_tag = 'ePmarked';
var eP_mark_msg = 'Suchbegriffe: ';
var eP_mark_bck = 'Zurück zur Suche';
var eP_mark_del = 'Markierung aufheben';
var eP_mark_cnt = 0;

//
// Dummy Functions for ImageSwap
//
function ePKa(){return false}
function ePKb(){return false}
function ePKc(){return false}
function ePKd(){return false}


//
// Public popup functions based on overLIB ( http://www.bosrup.com/web/overlib/ ) by Erik Bosrup.
//

// Simple popup auto
function eP_pop(title){return eP_dts(3,title)}
// Simple popup right
function eP_popr(title){return eP_dts(1,title)}
// Simple popup left
function eP_popl(title){return eP_dts(0,title)}
// Simple popup center
function eP_popc(title){return eP_dts(2,title)}
// Simple popup fixed
function eP_popf(title,x,y){return eP_dtsf(x,y,title)}

// Caption popup auto
function eP_cap(title,text){return eP_dtc(3,title,text)}
// Caption popup right
function eP_capr(title,text){return eP_dtc(1,title,text)}
// Caption popup left
function eP_capl(title,text){return eP_dtc(0,title,text)}
// Caption popup center
function eP_capc(title,text){return eP_dtc(2,title,text)}
// Caption popup fixed
function eP_capf(title,text,x,y){return eP_dtcf(x,y,title,text)}

// List popup auto
function eP_lst(text){return eP_dtl(3,text)}
// List popup right
function eP_lstr(text){return eP_dtl(1,text)}
// List popup left
function eP_lstl(text){return eP_dtl(0,text)}
// List popup center
function eP_lstc(text){return eP_dtl(2,text)}
// List popup fixed
function eP_lstf(text,x,y){return eP_dtlf(x,y,text)}

// HTML popup auto
function eP_htm(text){return eP_dth(3,text)}
// HTML popup right
function eP_htmr(text){return eP_dth(1,text)}
// HTML popup left
function eP_html(text){return eP_dth(0,text)}
// HTML popup center
function eP_htmc(text){return eP_dth(2,text)}
// HTML popup fixed
function eP_htmf(text,x,y){return eP_dthf(x,y,text)}

// Auto popup auto
function eP_auto(title,text){return text?eP_dtc(3,title,text):eP_dts(3,title)}
// Auto popup right
function eP_autor(title,text){return text?eP_dtc(1,title,text):eP_dts(1,title)}
// Auto popup left
function eP_autol(title,text){return text?eP_dtc(0,title,text):eP_dts(0,title)}
// Auto popup center
function eP_autoc(title,text){return text?eP_dtc(2,title,text):eP_dts(2,title)}
// Auto popup fixed
function eP_autof(title,text,x,y){return text?eP_dtcf(x,y,title,text):eP_dtsf(x,y,title)}

// Clear popup
function eP_nopop(){return eP_dthide()}


//
// Public cookie functions
//

function eP_SetCookie(key, val){
  if (!(typeof key == 'undefined')) key=eP_cooesc(key);
  var newcookie = '';
  // extract current cookie data
  var pos = document.cookie.indexOf(eP_cookieName);
  if (pos>=0){
    var end = document.cookie.indexOf(';', pos);
    if (end==-1) end = document.cookie.length;
    var pos = document.cookie.indexOf(eP_cookieSchr, pos+eP_cookieName.length); // ignore timestamp
    if (pos>=0){
      var values = eP_unesc(document.cookie.substring(pos+1,end)).split(eP_cookieSchr);
      for (var cnt=0; cnt<values.length; cnt++){
        var keyval = values[cnt].split(eP_cookieKchr);
        if (keyval.length == 2 && keyval[0] != key && keyval[1] != eP_getval(keyval[0], eP_cookieDefs, false))
          newcookie += ((!newcookie)?'':eP_cookieSchr)+values[cnt];
      }
    }
  }
  // update requested key with value
  if (val != null){ // null clears value
    // convert value to string
    if (typeof val == 'object'){ // only arrays are supported
      var newval='';
      for (var cnt=0; cnt<val.length; cnt++)
        newval += ((!newval)?'':eP_cookieLchr)+eP_cooesc(val[cnt]);
      val = newval;
    }else{
      val=eP_cooesc(String(val));
    }
    var def = eP_getval(key, eP_cookieDefs, false);
    if (def != null && def != val) newcookie += ((!newcookie)?'':eP_cookieSchr)+key+eP_cookieKchr+val;
  }
  // create new cookie incl. timestamp
  var expires = new Date(); expires.setTime(expires.getTime()+86400000*eP_cookieDays);
  var now = new Date();
  var utc = Math.floor(now.getTime()/1000)-now.getTimezoneOffset()*60;
  var uid = (eP_cookieUID)?(eP_cookieUID+'_'):'';
  document.cookie = eP_cookieName+uid+utc+eP_cookieSchr+escape(newcookie)+';expires='+expires.toGMTString()+';path='+eP_cookiePath;
  if (document.cookie.indexOf(eP_cookieName)==-1) alert(eP_cookieWarn);
}

function eP_GetCookie(key){
  if (!(typeof key == 'undefined')) key=eP_cooesc(key);
  // extract value for key from current cookie data
  var pos = document.cookie.indexOf(eP_cookieName);
  if (pos>=0){
    var end = document.cookie.indexOf(';', pos);
    if (end==-1) end = document.cookie.length;
    if (typeof key == 'undefined')
      return parseInt(document.cookie.substring(pos+eP_cookieName.length,end).split(eP_cookieSchr).shift());
    var pos = document.cookie.indexOf(eP_cookieSchr, pos+eP_cookieName.length); // ignore timestamp
    if (pos>=0){
      var result = eP_getval(key, eP_unesc(document.cookie.substring(pos+1,end)).split(eP_cookieSchr), true);
      if (result != null) return result;
    }
  }
  // if key is not found return default value
  return (typeof key == 'undefined')?0:eP_getval(key, eP_cookieDefs, true);
}

function eP_ClearCookie(){
  // set cookie back to default
  var expires = new Date(); expires.setTime(expires.getTime()+86400000*eP_cookieDays);
  var now = new Date(); var utc = Math.floor(now.getTime()/1000)-now.getTimezoneOffset()*60;
  var uid = (eP_cookieUID)?(eP_cookieUID+'_'):'';
  document.cookie = eP_cookieName+uid+utc+eP_cookieSchr+';expires='+expires.toGMTString()+';path='+eP_cookiePath;
  if (document.cookie.indexOf(eP_cookieName)==-1) alert(eP_cookieWarn);
}

function eP_CheckCookie(){
  // check cookie "timeout" & set if necessary
  var tstamp = eP_GetCookie();
  if (tstamp){
    var now = new Date();
    if (tstamp<Math.floor(now.getTime()/1000)-now.getTimezoneOffset()*60-eP_cookieUpda*86400) eP_SetCookie();
  }
}

//
// Public marker functions
//
function eP_mark(x1,y1,x2,y2){
  if (eP_markok){
    if (arguments.length == 5){
      var area = arguments[4];
      var areas = eP_marknames.split('.');
      for (var cnt=0; cnt<areas.length; cnt++)
        if (areas[cnt] == area){
          var xypos = eP_markarea[cnt];
          break;
      }
    }else
      for (var cnt=0; cnt<eP_markarea.length; cnt++)
        if (eP_markarea[cnt] != null){
          var xypos = eP_markarea[cnt];
          break;
        }
    var xroot = xypos[0];
    var yroot = xypos[1];
    if (eP_moz) {x2+=1; y2+=1} // fix for mozilla
    eP_moveObj(eP_tline, eP_markx1, yroot+y1);
    eP_moveObj(eP_bline, eP_markx1, yroot+y2+eP_markborder-1);
    eP_moveObj(eP_lline, xroot+x1, eP_marky1);
    eP_moveObj(eP_rline, xroot+x2+eP_markborder-1, eP_marky1);
    eP_clipObj(eP_tline, xroot-eP_markx1+x1+eP_markborder, 0, xroot-eP_markx1+x2+eP_markborder*2-1, eP_markborder);
    eP_clipObj(eP_bline, xroot-eP_markx1+x1, 0, xroot-eP_markx1+x2+eP_markborder-1, eP_markborder);
    eP_clipObj(eP_lline, 0, yroot-eP_marky1+y1, eP_markborder, yroot-eP_marky1+y2+eP_markborder-1);
    eP_clipObj(eP_rline, 0, yroot-eP_marky1+y1+eP_markborder, eP_markborder, yroot-eP_marky1+y2+eP_markborder*2-1);
    eP_showObj(eP_tline);
    eP_showObj(eP_bline);
    eP_showObj(eP_lline);
    eP_showObj(eP_rline);
  }else{
    if (arguments.length == 5)
      eP_markargs = new Array(x1,y1,x2,y2,arguments[4]);
    else
      eP_markargs = new Array(x1,y1,x2,y2);
  }
  return false;
}

function eP_nomark(){
  eP_markargs = null;
  if (eP_markok){
    eP_hideObj(eP_tline);
    eP_hideObj(eP_bline);
    eP_hideObj(eP_lline);
    eP_hideObj(eP_rline);
  }
  return false;
}


//
// Public markup functions
//
function eP_initMarkup(){
  if (!document.createDocumentFragment) return false;
  var query = document.location.search;
  var regex = eval('/'+eP_mark_par+'=([^&]+)&?/');
  if (query && regex.test(query)){
    var article = eP_getObj('article');
    if (!article) return false;
    regex.exec(query);
    query = unescape(RegExp.$1).split(';');
    for (var c=0, mc=query.length; c<mc; c++) query[c] = eP_unesc(query[c]);
    eP_showQuery(query, article);
    for (var c=0, mc=query.length; c<mc; c++)
      if (query[c].length && eP_markTraverse(article, eval('/('+query[c]+')/i')))
        eP_mark_cnt++;
  }
}

function eP_unMark(){
  var spans = new Array();
  for (var s=document.getElementsByTagName('span'), sc=s.length, c=0; c<sc; c++)
    if (s[c].id == eP_mark_tag)
      spans.push(s[c])
  while (spans.length){
    var span = spans.pop();
    var text = span.firstChild.data;
    if (span.previousSibling && span.previousSibling.nodeType == 3){
      text = span.previousSibling.data + text;
      span.parentNode.removeChild(span.previousSibling);
    }
    if (span.nextSibling && span.nextSibling.nodeType == 3){
      text += span.nextSibling.data;
      span.parentNode.removeChild(span.nextSibling);
    }
    span.parentNode.replaceChild(document.createTextNode(text), span);
  }
  eP_mark_cnt = 0;
  return false;
}


//
// Public external window functions
//

var eP_scrW    = null; // screen width
var eP_scrH    = null; // screen height
var eP_addW    = 12;   // window border width (ca.)
var eP_addH    = 38;   // window border height (ca.)
var eP_srlW    = 18;   // scrollbar width (ca.)
var eP_srlH    = 18;   // scrollbar height (ca.)
var eP_extwin  = null;
var eP_extopen = false;

// Function external - url: url of external source
//                     wid, hei: Width / Height of image or window
//                     [mode]: 0 = Normal: wid/hei are image sizes - fit to screen and add scrollbar if necessary
//                             1 = Fixed : wid/hei are window sizes - with auto scrollbar
//                             2 = Fixed : wid/hei are window sizes - without scrollbar
//                             3 = Fixed : wid/hei are window sizes - with scrollbar
//                     [extra]: other than default window arguments
function eP_ext(url,wid,hei){
  if (screen){
    if (eP_scrW == null) eP_scrW = screen.availWidth;
    if (eP_scrH == null) eP_scrH = screen.availHeight;
  }
  var mode    = ((arguments[3]!=undefined)&&(arguments[3]!=null))?arguments[3]:0;
  var extra   = ((arguments[4]!=undefined)&&(arguments[4]!=null))?arguments[4]:'locationbar=no,menubar=no,resizable=yes,status=no,dependent=yes';
  var content = ((arguments[5]!=undefined)&&(arguments[5]!=null))?arguments[5]:null;
  var poppos  = eP_GetCookie('PopPos');
  var maxW=eP_scrW, maxH=eP_scrH, offX=0, offY=0;
  if (poppos == 'bro'){
    if (eP_ope){
      var maxW=window.top.outerWidth, maxH=window.top.outerHeight; // inner
      var offX=window.top.screenLeft, offY=window.top.screenTop; // inner
    }else if (eP_ns4){
      var maxW=window.top.outerWidth, maxH=window.top.outerHeight; // OK
      var offX=window.top.screenX,    offY=window.top.screenY; // OK
    }else if (eP_moz){
      var maxW=window.top.outerWidth, maxH=window.top.outerHeight; // OK
      var offX=window.top.screenX,    offY=window.top.screenY; // OK nur bei Windows, nicht Linux
    } else if (eP_ie|eP_ie4|eP_ie5){
      var maxW=window.top.document.body.clientWidth, maxH=window.top.document.body.clientHeight; // inner
      var offX=window.top.screenLeft, offY=window.top.screenTop; // inner
    }
  }else if (poppos != 'scr' && poppos.indexOf('x') != -1){
    var wh = poppos.split('x');
    var maxW=parseInt(wh[0]), maxH=parseInt(wh[1]);
    var offX=0, offY=0;
  }
  if (wid<100) wid=100;
  if (hei<100) hei=100;
  if (maxW && maxH){
    if (mode){
      var zoW = wid;
      var zoH = hei;
      var srl = (mode==1)?'auto':(mode==2)?'no':'yes';
    }else{
      if (wid+eP_srlW+eP_addW-1 > maxW){
        var zoW = maxW-eP_addW;
        var zoH = (hei+eP_srlH+eP_addH > maxH)?maxH-eP_addH:hei+eP_srlH;
        var srl = 'yes';
      }else{
        if (hei+eP_addH > maxH){
          var zoW = wid+eP_srlW;
          var zoH = maxH-eP_addH;
          var srl = 'yes';
        }else{
          var zoW = wid;
          var zoH = hei;
          var srl = 'no';
        }
      }
    }
    var loc = ',left='+(Math.floor((maxW-zoW-eP_addW)/2)+offX)+',top='+(Math.floor((maxH-zoH-eP_addH)/2)+offY);
  }else{
    var zoW = wid;
    var zoH = hei;
    var srl = 'no';
    var loc = '';
  }
  if(eP_extopen){eP_extwin.shutdown=true;eP_extwin.close();}
  eP_extwin=window.open((url==null)?(eP_includeprefix+'/common/html/empty.html'):url,eP_objecthead+'extwin','width='+zoW+',height='+zoH+loc+',scrollbars='+srl+','+extra);
  if (content != null){
    eP_extwin.document.open();
    eP_extwin.document.write(content);
    eP_extwin.document.close();
  }
  return false;
}

function eP_extimg(url,wid,hei,tit,mod,ext){
  return eP_ext(eP_includeprefix+'/common/html/image.html?'+(tit?(escape(tit)+'&'):'')+escape(url),wid,hei,mod,ext,null);
}

function eP_extprn(url,wid,hei,tit,mod,ext){
  return eP_ext(eP_includeprefix+'/common/html/print.html?'+(tit?(escape(tit)+'&'):'')+escape(url),wid,hei,mod,ext,null);
}

function eP_tailor(url,wid,hei,tit,mod,ext){
  return eP_ext(eP_includeprefix+'/common/html/tailor.html?'+(tit?(escape(tit)+'&'):'')+escape(url),wid+8,hei+8,mod,ext,null);
}

function eP_jstailor(url,x1,y1,x2,y2,tit,mod,ext){
  return eP_ext(eP_includeprefix+'/common/html/jstailor.html?'+(tit?(escape(tit)+'&'):'')+x1+','+y1+','+x2+','+y2+'&'+escape(url),x2-x1+6,y2-y1+6,mod,ext,null);
}

// Function extclose: should be called onUnload to close external window
function eP_extclose(){
  if(eP_extopen&&eP_extwin){
    eP_extwin.shutdown=true;
    eP_extwin.close();
  }
}

// Code for external source
// ========================
//
// <SCRIPT LANGUAGE="JavaScript1.2" TYPE="text/javascript"><!--
//   var shutdown=true;
//   function eP_opened(){
//     shutdown=false;
//     opener.eP_extopen=true;
//     try{window.focus()}catch(e){}
//   }
//   function eP_closed(){
//     if (!shutdown) opener.eP_extopen=false;
//   }
// //--></SCRIPT>
//
// <BODY ... onLoad="eP_opened()" onUnload="eP_closed()"


//
// Misc public functions
//

function eP_goBack(){
  history.back();
  return false;
}

function eP_blur(what){
  if (what){
    try{
      what.blur();
    }catch(e){}
  }else{
    var bl=eP_getObj('blur');
    if (bl)
      bl.focus();
    else
      window.focus();
  }
  return false;
}

// Fill Option List
function eP_optlist(name){
  var select = eP_getObj(name);
  if (select){
    var before = (select.length)?select[select.selectedIndex].value:null;
    var oldlen = select.length;
    var newlen = (arguments.length-1)/2;
    for (var sc=0; sc<newlen; sc++) select[sc] = new Option(arguments[sc*2+1], arguments[sc*2+2]);
    for (var sc=newlen; sc<oldlen; sc++) select[newlen] = null;
    select.lenght = newlen;
    select.selectedIndex = 0;
    if (before) eP_selopt(name, before);
  }
}

// Select Option
function eP_selopt(name, target){
  var select = eP_getObj(name);
  if (select){
    for (var sc=0, sl=select.length; sc<sl; sc++)
      if (select[sc].value == target){
        select[sc].selected = true;
        break;
      }
  }
}

// Get Option Value
function eP_getopt(name){
  var select = eP_getObj(name);
  return (select && select.length && select.selectedIndex>=0)?select[select.selectedIndex].value:null;
}

// Get Option Values
function eP_getopts(name){
  var res = new Array();
  var select = eP_getObj(name);
  if (select && select.length){
    for (var c=0; c<select.options.length; c++)
      if (select.options[c].selected)
        res[res.length] = select.options[c].value;
  }
  return res;
}

// Get Option Text
function eP_getopttxt(name){
  var select = eP_getObj(name);
  return (select && select.length)?select[select.selectedIndex].text:'';
}

// Get Option Texts
function eP_getopttxts(name){
  var res = new Array();
  var select = eP_getObj(name);
  if (select && select.length){
    for (var c=0; c<select.options.length; c++)
      if (select.options[c].selected)
        res[res.length] = select.options[c].text;
  }
  return res;
}

// Get Radio-Button Value
function eP_getradio(name){
  var radio = eP_getObj(name);
  if (!radio) return null;
  var radio = radio.name;
  if (!radio) return null;
  var inputs = document.getElementsByTagName('input')
  var inplen = inputs.length;
  for (var c=0; c<inplen; c++){
    var input = inputs[c];
    if (input.name == radio && input.checked) return input.value;
  }
  return null;
}

// Go to top Function
function eP_top(){
  window.scrollTo(0,0);
  return false;
}

// Close Popup and Marker
function eP_nope(){
  eP_nopop();
  return eP_nomark();
}

//
// Public Image-Changer Functions
//

var eP_preload = null;
var eP_plcache = null;

// Funktion swapImage - name: Name des zu ersetzenden Bildes (angegeben mit NAME="")
//                      src : Quelle (URL) des Bildes, durch das ersetzt wird
function eP_swapImage(name,src){
  if (eP_plcache && document[name]){
    for(var c=0,e=eP_plcache.length;c<e;c++)
      if((eP_plcache[c].src.indexOf(src)!=-1)&&(eP_plcache[c].complete)){
        document[name].src=eP_plcache[c].src;
        return false;
      }
//    document[name].src=src;
  }
  return false;
}

// Funktion doPreload - lädt alle in eP_preload angegebenen Bild-Quellen (URL),
//                      die für den späteren Gebrauch geladen werden sollen
function eP_doPreload(){
  if (eP_preload && document.images){
    eP_plcache = new Array();
    for (var c=0,e=eP_preload.length;c<e;c++){
      eP_plcache[c] = new Image();
      eP_plcache[c].src = eP_urlprefix+eP_preload[c];
    }
  }
}

// Function addPreload - fügt Bilder in die Preload-Liste ein
//
function eP_addPreload(){
  if (eP_preload == null) eP_preload = new Array();
  for (var c=0,e=arguments.length,o=eP_preload.length;c<e;c++)
    eP_preload[c+o] = arguments[c]
}

// Magic Link functions ;-)
var ePlnkobj = null;
var ePlnktim = null;
function ePpaglnk(obj,txt,be,af,fr,to){
  if (ePlnktim) {
    window.clearTimeout(ePlnktim); ePlnktim=null;
    if (ePlnkobj && ePlnkobj != obj) ePreslnk();
  }
  if (!obj.save) {
    obj.save = obj.innerHTML;
    var res = '';
    for (var cnt=fr; cnt<=to; cnt++)                                                                                                     res += (res?',':txt)+' <span id="'+be+cnt+af+'" onClick="return ePgolnk(this);">'+cnt+'</span>';
    obj.innerHTML = res;
  }
  ePlnkobj = obj;
  document.body.onmouseout = ePoutlnk;
}
function ePgolnk(obj){
  window.location.href = obj.id;
  return false;
}
function ePoutlnk(){
  document.body.onmouseout = null;
  ePlnktim = window.setTimeout('ePreslnk()',200);
}
function ePreslnk(){
  if (ePlnkobj) { ePlnkobj.innerHTML = ePlnkobj.save; ePlnkobj.save = null; }
  ePlnkobj = null;
  ePlnktim = null;
}

//
// Non public common functions
//

// Unescape with + Symbol
function eP_unesc(text){
  if (text)
    return unescape(text.split('+').join(' '));
  else
    return '';
}

// Escape with + Symbol
function eP_esc(text){
  if (text)
    return escape(text.split(' ').join('+'));
  else
    return '';
}
// Get object by ID
function eP_getObj(name){
  if (eP_ns4) return document[name]
  else if (eP_ie4) return document.all[name]
  else if (eP_dom) return document.getElementById(name);
}

// Make an object visible
function eP_showObj(obj){
  if (!obj) return;
  if (eP_ns4) obj.visibility = "show";
  else obj.style.visibility = "visible";
}

// Hide an object
function eP_hideObj(obj){
  if (!obj) return;
  if (eP_ns4) obj.visibility = "hide";
  else obj.style.visibility = "hidden";
}

// Move an object
function eP_moveObj(obj,x,y){
  if (!obj) return;
  if (eP_ns4){
    if (x!=null) obj.left = x;
    if (y!=null) obj.top = y;
  }else{
    if (x!=null) obj.style.left = x;
    if (y!=null) obj.style.top = y;
  }
}

// Resize an object
function eP_resizeObj(obj,w,h){
  if (!obj) return;
  if (eP_ns4){
    obj.width = w;
    obj.height = h;
  }else{
    obj.style.width = w;
    obj.style.height = h;
  }
}

// Clip an object
function eP_clipObj(obj,x1,y1,x2,y2){
  if (!obj) return;
  if (eP_ns4){
    obj.clip.left = x1;
    obj.clip.top = y1;
    obj.clip.right = x2;
    obj.clip.bottom = y2;
  }else
    obj.style.clip = 'rect('+y1+','+x2+','+y2+','+x1+')';
}

// Write to an object
function eP_writeObj(obj,text){
  if (!obj) return;
  if (eP_ns4){
    var doc = obj.document;
    doc.open();
    doc.write(text);
    doc.close();
  }else
    obj.innerHTML = text;
}

function eP_getheightObj(obj){
  if (obj) return (eP_ns4)?obj.clip.bottom:obj.offsetHeight;
  return null;
}

function eP_getwidthObj(obj){
  if (obj) return (eP_ns4)?obj.clip.right:obj.offsetWidth;
  return null;
}


//
// Non public popup functions
//

// Simple popup
function eP_dts(direction, text){
  if (eP_popok){
    eP_popyoffset = 20;
    txt = '<table width="'+eP_popwidth+'" border="0" cellpadding="'+(eP_popborder+2)+'" cellspacing="0" class="'+eP_objecthead+'outer"><tr><td class="'+eP_objecthead+'head">'+eP_unesc(text)+'</td></tr></table>'
    eP_popdir = direction;
    eP_writeObj(eP_popobj, txt);
    return eP_dtshow();
  }else{
    eP_popsav = "eP_dts("+direction+",'"+text+"')";
    return false;
  }
}
function eP_dtsf(x, y, text){
  if (eP_popok){
    eP_popxf = x;
    eP_popyf = y;
    eP_dts(4, text);
  }else{
    eP_popsav = "eP_dtsf("+x+","+y+",'"+text+"')";
    return false;
  }
}

// Caption popup
function eP_dtc(direction, title, text){
  if (eP_popok){
    eP_popyoffset = 20;
    txt = '<table width="'+eP_popwidth+'" border="0" cellpadding="'+eP_popborder+'" cellspacing="0" class="'+eP_objecthead+'outer"><tr><td><table width="100%" border="0" cellpadding="2" cellspacing="0"><tr><td class="'+eP_objecthead+'head">'+eP_unesc(title)+'</td></tr></table><table width="100%" border="0" cellpadding="2" cellspacing="0"><tr><td class="'+eP_objecthead+'text">'+eP_unesc(text)+'</td></tr></table></td></tr></table>'
    eP_popdir = direction;
    eP_writeObj(eP_popobj, txt);
    return eP_dtshow();
  }else{
    eP_popsav = "eP_dtc("+direction+",'"+title+"','"+text+"')";
    return false;
  }
}
function eP_dtcf(x, y, title, text){
  if (eP_popok){
    eP_popxf = x;
    eP_popyf = y;
    eP_dts(4, title, text);
  }else{
    eP_popsav = "eP_dtcf("+x+","+y+",'"+title+"','"+text+"')";
    return false;
  }
}

// List popup
function eP_dtl(direction, text){
  if (eP_popok){
    eP_popyoffset = 20;
    var tag = '';
    var txt = '<table width="'+eP_popwidth+'" border="0" cellpadding="'+eP_popborder+'" cellspacing="0" class="'+eP_objecthead+'outer"><tr><td>';
    var txtlst = text.split(' ');
    var txtlen = txtlst.length;
    for (var cnt=0, mode=null, dot='', sty='poptxt'; cnt<txtlen; cnt+=2){
      if (txtlst[cnt] == '2'){
        if (tag) tag += ', ';
        tag += eP_unesc(txtlst[cnt+1]);
        eP_popyoffset = 15;
      }else if (mode == txtlst[cnt])
        txt += '</p><p class="'+eP_objecthead+sty+'">'+dot+eP_unesc(txtlst[cnt+1]);
      else{
        if (mode) txt += '</p></td></tr></table>';
        mode = txtlst[cnt];
        if (cnt+2 < txtlen && txtlst[cnt+2] == mode && eP_lstdots){
          dot = eP_lstdots;
          sty = 'poplst';
        }else{
          dot = '';
          sty = 'poptxt';
        }
        txt += '<table width="100%" border="0" cellpadding="2" cellspacing="0"><tr><td class="'+eP_objecthead+((mode=='1')?'head':'text')+'"><p class="'+eP_objecthead+sty+'">'+dot+eP_unesc(txtlst[cnt+1]);
      }
    }
    if (mode) txt += '</p></td></tr></table>';
    txt += '</td></tr></table>';
    if (tag) tag = '<table width="'+eP_popwidth+'" border="0" cellpadding="0" cellspacing="0"><tr><td align="right"><table border="0" cellpadding="'+eP_popborder+'" cellspacing="0" class="'+eP_objecthead+'outer" style="margin-bottom:-1px"><tr><td><table border="0" cellpadding="1" cellspacing="0"><tr><td class="'+eP_objecthead+'tab">'+tag+'</td></tr></table></td></tr></table></td></tr></table>';
    eP_popdir = direction;
    eP_writeObj(eP_popobj, tag+txt);
    return eP_dtshow();
  }else{
    eP_popsav = "eP_dtl("+direction+",'"+text+"')";
    return false;
  }
}
function eP_dtlf(x, y, text){
  if (eP_popok){
    eP_popxf = x;
    eP_popyf = y;
    eP_dtl(4, text);
  }else{
    eP_popsav = "eP_dtlf("+x+","+y+",'"+text+"')";
    return false;
  }
}

// HTML popup
function eP_dth(direction, text){
  if (eP_popok){
    eP_popyoffset = 20;
    eP_popdir = direction;
    eP_writeObj(eP_popobj, text);
    return eP_dtshow();
  }else{
    eP_popsav = "eP_dth("+direction+",'"+text+"')";
    return false;
  }
}
function eP_dthf(x, y, text){
  if (eP_popok){
    eP_popxf = x;
    eP_popyf = y;
    eP_dth(4, text);
  }else{
    eP_popsav = "eP_dthf("+x+","+y+",'"+text+"')";
    return false;
  }
}

// Clear popup
function eP_dthide(){
  eP_popsav = null;
  if (eP_bok && eP_popact){
    eP_popact = false;
    eP_hideObj(eP_popobj);
  }
  return false;
}

// Show popup
function eP_dtshow(){
  if (eP_bok && !eP_popact){
    eP_dtmove();
    eP_popact = true;
    eP_showObj(eP_popobj);
  }
  return false;
}

// Move popup
function eP_dtmove(){
  if (!eP_bok) return false;
  if (eP_popdir == 4){
    eP_moveObj(eP_popobj, eP_popxf, eP_popyf);
    eP_popdir = -1;
  }else if (eP_popdir == 3){
    newx = eP_popx+eP_popxoffset;
    if (newx < eP_popxmin) newx = eP_popxmin;
    if (newx+eP_popwidth > eP_popxmax) newx = eP_popxmax-eP_popwidth;
    newy = eP_popy+eP_popyoffset;
    if (newy < eP_popymin) newy = eP_popymin;
    if (newy+eP_getheightObj(eP_popobj) > eP_popymax) newy = eP_popy-(eP_popyoffset/2)-eP_getheightObj(eP_popobj);
    eP_moveObj(eP_popobj, newx, newy);
  }else if (eP_popdir == 2)
    eP_moveObj(eP_popobj, eP_popx+eP_popxoffset-(eP_popwidth/2), eP_popy+eP_popyoffset);
  else if (eP_popdir == 1)
    eP_moveObj(eP_popobj, eP_popx+eP_popxoffset, eP_popy+eP_popyoffset);
  else if (eP_popdir == 0)
    eP_moveObj(eP_popobj, eP_popx-(eP_popxoffset/2)-eP_popwidth, eP_popy+eP_popyoffset);
  return true;
}

// Popup move handler
function eP_mouseMoveGO(e){
  if (eP_popsav){
    eval(eP_popsav);
    eP_popsav = null;
  }
  if (eP_ns4){eP_mouseMoveNS4(e);document.onmousemove=eP_mouseMoveNS4}
  else if (eP_ie4){eP_mouseMoveIE4(e);document.onmousemove=eP_mouseMoveIE4}
  else if (eP_ie5 || (eP_dom&&eP_ie)){eP_mouseMoveIE5(e);document.onmousemove=eP_mouseMoveIE5}
  else if (eP_dom){eP_mouseMoveDOM(e);document.onmousemove=eP_mouseMoveDOM}
}

function eP_mouseMoveNS4(e){
  eP_popx=e.pageX;
  eP_popy=e.pageY;
  if (eP_popact) eP_dtmove();
  return true;
}

function eP_mouseMoveIE4(e){
  eP_popx=event.x;
  eP_popy=event.y;
  if (eP_popact) eP_dtmove();
  return true;
}

function eP_mouseMoveIE5(e){
  eP_popx=event.x+document.body.scrollLeft;
  eP_popy=event.y+document.body.scrollTop;
  if (eP_popact) eP_dtmove();
  return true;
}

function eP_mouseMoveDOM(e){
  eP_popx=e.pageX;
  eP_popy=e.pageY;
  if (eP_popact) eP_dtmove();
  return true;
}


//
// Non public marker functions
//
function eP_initM(obj, x, y, w, h, t){
  eP_moveObj(obj, x, y);
  eP_resizeObj(obj, w, h);
  eP_writeObj(obj, '<table width="'+w+'" height="'+h+'" border="0" cellspacing="0" cellpadding="0" bgcolor="'+eP_markcolor+'"><tr><td>'+(eP_markimages[t]==null?'':('<img'+' src'+'="'+eP_urlprefix+eP_markimages[t]+'" width="'+w+'" height="'+h+'"/>'))+'</td></tr></table>');
}


//
// Non public cookie functions
//
function eP_getval(key, values, unesc){
  for (var cnt=0; cnt<values.length; cnt++){
    var keyval = values[cnt].split(eP_cookieKchr);
    if (keyval.length == 2 && keyval[0] == key){
      if (!unesc) return keyval[1];
      if (keyval[1].indexOf(eP_cookieLchr) == -1) return eP_unesc(keyval[1]);
      var res=keyval[1].split(eP_cookieLchr);
      for (var lst=0; lst<res.length; lst++)
        res[lst] = eP_unesc(res[lst]);
      return res;
    }
  }
  return null;
}

function eP_cooesc(value){
  if (value.indexOf(eP_cookieKchr) != -1) value = value.split(eP_cookieKchr).join('%'+eP_cookieKchr.charCodeAt(0).toString(16))
  if (value.indexOf(eP_cookieSchr) != -1) value = value.split(eP_cookieSchr).join('%'+eP_cookieSchr.charCodeAt(0).toString(16))
  if (value.indexOf(eP_cookieLchr) != -1) value = value.split(eP_cookieLchr).join('%'+eP_cookieLchr.charCodeAt(0).toString(16))
  return value;
}


//
// Non public markup functions
//
function eP_showQuery(query, article){
  if (!eP_mark_del) return;

  var message = document.createElement('div');
  message.id = eP_mark_tag + 'message';
  message.className = eP_objecthead + 'markmsg';

  var msgdiv = document.createElement('div');
  msgdiv.className = eP_objecthead + 'markwords';
  msgdiv.appendChild(document.createTextNode(eP_mark_msg));

  var msgwrd = document.createElement('span');
  msgwrd.className = eP_objecthead + 'markwords';
  msgwrd.appendChild(document.createTextNode(query.join('  ')));
  msgdiv.appendChild(msgwrd);
  message.appendChild(msgdiv);

  if (eP_mark_bck){
    var bckdiv = document.createElement('div');
    bckdiv.className = eP_objecthead + 'markbck';
    bckdiv.appendChild(document.createTextNode(eP_mark_bck));
    bckdiv.onclick = eP_goBack;
    message.appendChild(bckdiv);
  }

  var deldiv = document.createElement('div');
  deldiv.className = eP_objecthead + 'markdel';
  deldiv.appendChild(document.createTextNode(eP_mark_del));
  deldiv.onclick = eP_hideQuery;
  message.appendChild(deldiv);

  message.appendChild(document.createTextNode('.'));

  article.insertBefore(message, article.firstChild);
}

function eP_hideQuery(){
  var message = document.getElementById(eP_mark_tag + 'message');
  message.parentNode.removeChild(message);
  eP_unMark();
}

function eP_markTraverse(obj, regex){
  var childs = new Array();
  for (var t=obj.childNodes, tc=t.length, c=0; c<tc; c++)
    childs.push(t[c])
  var hits = 0;
  while (childs.length){
    var child = childs.pop();
    if (child.nodeType == 1 && child.id != eP_mark_tag) hits += eP_markTraverse(child, regex);
    if (child.nodeType == 3) hits += eP_markColorize(child, regex);
  }
  return hits;
}

function eP_markColorize(obj, regex){
  var hits = 0;
  var text = obj.data;
  if (regex.test(text)){
    var fragment = document.createDocumentFragment();
    var chunks = (eP_moz)?text.split(regex):eP_markSplitter(text, regex);
    var clength  = chunks.length;
    for (var count=0; count<clength; count++){
      var chunk = chunks[count];
      if (chunk.length)
        if (count%2){
          hits++;
          var col = document.createElement('span');
          col.id = eP_mark_tag;
          col.style.color = eP_mark_fg[eP_mark_cnt%eP_mark_fg.length];
          col.style.background = eP_mark_bg[eP_mark_cnt%eP_mark_bg.length];
          col.appendChild(document.createTextNode(chunk));
          fragment.appendChild(col);
        }else{
          fragment.appendChild(document.createTextNode(chunk))
        }
      }
    obj.parentNode.replaceChild(fragment, obj);
  }
  return hits;
}

function eP_markSplitter(text, regex){
  var result = new Array();
  while (1){
    var pos = text.search(regex);
    if (pos >= 0){
      var match = RegExp.$1;
      result.push(text.substr(0,pos));
      result.push(match);
      text = text.substr(pos+match.length);
    }else{
      if (text.length) result.push(text);
      break;
    }
  }
  return result;
}


//
// Popup initialization
//
var eP_popx   = 0;
var eP_popy   = 0;
var eP_popact = false;
var eP_popdir = 0; // -1:nomove  0:left  1:right  2:center  3:auto  4:fixed
var eP_popxf  = 0;
var eP_popyf  = 0;
var eP_popobj = null;
var eP_popok  = false;
var eP_popsav = null;

function eP_initPopup(){
  if (!eP_bok) return false;
  eP_popobj = eP_getObj(eP_objecthead+'popDiv');
  if (eP_popobj){
    eP_popok = eP_GetCookie('Overlay') == '1';
    if (eP_popok)
      if (eP_popsav){
        document.onmousemove=eP_mouseMoveGO;
        if (eP_ns4) document.captureEvents(Event.MOUSEMOVE);
      }else{
        if (eP_ns4){document.onmousemove=eP_mouseMoveNS4;document.captureEvents(Event.MOUSEMOVE)}
        else if (eP_ie4){document.onmousemove=eP_mouseMoveIE4}
        else if (eP_ie5 || (eP_dom&&eP_ie)){document.onmousemove=eP_mouseMoveIE5}
        else if (eP_dom){document.onmousemove=eP_mouseMoveDOM}
      }
  }else{
    eP_popobj = null;
    eP_popok  = false;
  }
}


//
// Marker initialization
//
var eP_markok   = false;
var eP_markarea = new Array();
var eP_markargs = null;

var eP_tline = null;
var eP_bline = null;
var eP_lline = null;
var eP_rline = null;

var eP_markx1 = null;
var eP_marky1 = null;

function eP_initMarker(){
  if (!eP_bok) return false;

  eP_markborder = 2-parseInt(eP_GetCookie('MarkWidth'));

  var eP_markx2 = 0;
  var eP_marky2 = 0;

  // Markarea herausfinden und Offsets speichern
  var areas = eP_marknames.split('.');
  for (var cnt=0; cnt<areas.length; cnt++){
    var ppic = eP_getObj(eP_objecthead+'pagepic'+areas[cnt]);
    if (ppic){
      if (eP_ns4){
        var ppos = eP_getObj(eP_objecthead+'pagepos');
        var x1pos = ppos.pageX+1;
        var y1pos = ppos.pageY+1;
      }else{
        var x1pos = 0;
        var y1pos = 0;
        for (obj = ppic; obj && obj.tagName != 'BODY'; obj = obj.offsetParent){
          x1pos += obj.offsetLeft;
          y1pos += obj.offsetTop;
        }
      }
      eP_markx2 = Math.max(eP_markx2, x1pos + ppic.width + eP_markborder);
      eP_marky2 = Math.max(eP_marky2, y1pos + ppic.height + eP_markborder);
      x1pos -= eP_markborder;
      y1pos -= eP_markborder;
      eP_markx1 = (eP_markx1!=null)?Math.min(eP_markx1,x1pos):x1pos;
      eP_marky1 = (eP_marky1!=null)?Math.min(eP_marky1,y1pos):y1pos;
      eP_markarea[cnt] = new Array(x1pos, y1pos);
    }else
      eP_markarea[cnt] = null;
  }
  // Linien initialisieren
  if (!eP_markarea.length || eP_markx1==null || eP_marky1==null)
    eP_markok = false;
  else{
    eP_popxmin = eP_markx1+2;
    eP_popxmax = eP_markx2-2;
    eP_popymin = eP_marky1+2;
    eP_popymax = eP_marky2-2;
    eP_markok = eP_GetCookie('Marker') == '1';
    if (eP_markok){
      eP_tline = eP_getObj(eP_objecthead+'tline');
      eP_bline = eP_getObj(eP_objecthead+'bline');
      eP_lline = eP_getObj(eP_objecthead+'lline');
      eP_rline = eP_getObj(eP_objecthead+'rline');
      eP_initM(eP_tline, eP_markx1, eP_marky1, eP_markx2-eP_markx1, eP_markborder, 0);
      eP_initM(eP_bline, eP_markx1, eP_marky1, eP_markx2-eP_markx1, eP_markborder, 1);
      eP_initM(eP_lline, eP_markx1, eP_marky1, eP_markborder, eP_marky2-eP_marky1, 2);
      eP_initM(eP_rline, eP_markx1, eP_marky1, eP_markborder, eP_marky2-eP_marky1, 3);
    }
  }
  if (eP_markok && eP_markargs){
    if (eP_markargs.length == 5)
      eP_mark(eP_markargs[0],eP_markargs[1],eP_markargs[2],eP_markargs[3],eP_markargs[4]);
    else
      eP_mark(eP_markargs[0],eP_markargs[1],eP_markargs[2],eP_markargs[3]);
    eP_markargs = null;
  }
}

//
// Browser Detection
//
var eP_ie  = false;
var eP_ns4 = false;
var eP_dom = true;
var eP_ie4 = false;
var eP_ie5 = false;
var eP_ope = false; // not used
var eP_moz = false;
var eP_bok = true;

function eP_initBrowser(){
  eP_ie  = (document.all)?true:false;
  eP_ns4 = (document.layers)?true:false;
  eP_dom = (document.getElementById)?true:false;
  eP_ie4 = (document.all && !eP_dom)?true:false;
  eP_ie5 = (eP_dom && navigator.userAgent.indexOf('MSIE 5')>0);
  eP_ope = (eP_dom && navigator.userAgent.indexOf('Opera')>0);
  eP_moz = (eP_dom && navigator.userAgent.indexOf('Gecko')>0);
  eP_bok = eP_ns4 || eP_ie4 || eP_dom;
  return false;
}

//
// Init and Exit functions
//
var eP_extrainit = null;

function eP_init(){
  eP_initBrowser();
  if (!eP_bok) return false;
  eP_initPopup();
  eP_initMarker();
  eP_initMarkup();
  eP_doPreload();
  eP_CheckCookie();
  if (eP_extrainit==null)
    return false;
  else
    return eP_extrainit();
}

function eP_exit(){
  eP_extclose();
  eP_nopop();
  eP_nomark();
  return false;
}
