// global sind:
// datenx[] - Parameter und Daten für ganze Teile
// foto[] - Parameter und Daten und einzelne Fotos
// updates[] - Update-History
// bildpar[] - Daten für aktuelle Bilder im Display
// findp[] - search
// spots[] - Startseite
// moredatenvisited[] - besuchte more-Seiten
// hwtb. - alles Beatles-relevante
var item_ie6=-1; // für offline tests wenn datei.htm?x-Syntax offline nicht erkannt wird
var extsvrtyp1="bluepink";
var extsvrtyp2="lisius";
var bilder_more="bilder.more/";
var bilder_more_path=bilder_more; // alle Länder außer China
var bilder_more_china=bilder_more_path+"china/";
var bilder="bilder/";
var pt1=bilder;
var pt2_cla=bilder_more+"colorlinearena/";
var pt3_psp=bilder_more+"photoshop/";
var spfade_def=new Array(
 // ONLINE thumbnails % ONLINE bilder % OFFLINE thumbnails % OFFLINE bilder
    pt1+"%"+pt1+"%"+pt1+"%"+pt1,// typ 1 (z.Zt.keine bilder da)
    pt2_cla+"%"+pt2_cla+"%"+pt2_cla+"%"+pt2_cla,// typ 2 Color Line Arena
    pt3_psp+"%"+pt3_psp+"%"+pt3_psp+"%"+pt3_psp,// typ 3 Photoshop
    pt1+"%"+pt1+"%"+pt1+"%"+pt1 // typ 4 alles unter daten-fotos.js
    );
var stdsvr=4; //standard
var phpoo="phpx/";
var ma2me="phpx/sendcontact1.php?p=";
var modedisplay='multiple'; // oder single, im Display
var dimax=9; // max Anzahl der fotos im Display
var thumbsimpreview=1; // thumbs oder texte im Preview-Fenster links
var anzeigeimdisplay=0; // 0 wenn z.B. Hilfe oder Links im Main-Fenster sind
var anzeigeheight=640; // falls Ermittlung der Anzeige-Fensterhöhe misslingen sollte
var lasthtmindisplay=""; // letzte Datei im display
var searchouttype="miniaturen";
var minisimdisplay=0; // displ_minis.htm displ_minis_search.htm
var displayminiscols=5;  // wird ermittelt
var displayminismarginleft=2; // margin left
var displayminisframdim=154; // dia-frames
var fixedpos="zoom"; // titel.htm,displ_xxx.htm,inkl.IE6
var textpos="entire"; // ^ 
var enlabel="no"; // ^
var language='deutsch';
var p_load='i/trans.gif'; // Parameter der geladenen Fotos im load-Frame
var p_ready=''; // ^
var p_width=-1; // ^
var p_height=-1; // ^
var p_multiplikator=1; // titel.htm
var maxteil=0; // nur Teile
var maxitem=0; // Teile + more
var kontakt_text="";
var kontakt_name="";
var kontakt_email="";
var moredatenvisited=new Array(); // besuchte more-Seiten
function Repfad(inp,d){return (d==1) ? inp.replace(extsvrtyp2,extsvrtyp1) : inp.replace(extsvrtyp1,extsvrtyp2);}
function Mx(s,b){var v="";for(var i=0;i<s.length;i++) v+=String.fromCharCode(s.charCodeAt(i)^b);return v;}
var ea=Mx("jmelCtjwkwkfafbwofp-gf",3);

// --

function _IP_INFO(){
 this.IP='';
 this.ip_neu=true;
 this.name='';
 this.aol='';
 this.zwei='';
 this.drei='';
 this.drei_ip2country='';
 this.drei_utrace='';
 this.flag='';
 this.optionen='';
 this.quelle='';
 this.woherflag='';
 this.xmlexists='';
 this.ergebnis='';
 this.sprache='';
 this.adminpsw='';
 this.ready=false;
}

ip_info=new _IP_INFO();

// --

function _IP_WORLD(p1,p2,p3,p4,p5,p6,p7,p8,p9,p10,p11,p12,p13,p14,p15,p16){
 this.name=p1;
 this.altername=p2;
 this.flag=p3;
 this.zwei=p4;
 this.latitude=p5;
 this.longitude=p6;
 this.capital=p7;
 this.caplatitude=p8;
 this.caplongitude=p9;
 this.optionen=p10;
 this.region=p11;
 this.org=p12;
 this.isp=p13;     
 this.hit=p14;
 this.IP=p15;
 this.zeitpunkt=p16;
}

ip_world=new Array();

// --

function _HWTB(){ // alles beatles-relevante
 this.returnsite='index';
 this.itemvisited=new Array();
 this.spalte=0;
 this.sortmenu=1;
 this.reverse=new Array(0,0,1,1,1,1,1,1);
 this.records=new Array(1,1,1,1);
 this.komponists=new Array(0,0,0,0,0);
 this.verknuepfung="oder";
}

hwtb=new _HWTB();

// --

function _DATENX(){
 this.name=''; // entweder numerisch (Teilnum) oder ''
 this.idd='';
 this.titel=''; // A%
 this.untertitel=''; // V%
 this.teilnum=''; //  # oder ''
 this.teilnumfirst=''; // teilnum von 'Teil # a', oder ''
 this.teildsp1=''; // Teil # ODER (+)
 this.teildsp2=''; // Teil # UND (+)
 this.teildsp3=''; // (+) ODER ''
 this.teildsp4=''; // 2(a)
 this.teildsp5=''; // Teil 2a
 this.teildsp6=''; // 2a
 this.weitere=''; // weitere Teile a:idd1,b:idd2,...
 this.sort='';
 this.updatedatum=''; // 2008.09.27
 this.updateinfo=''; // er&ouml;ffnet am 25.9"
 this.path_bild='';
 this.path_thumb='';
 this.spots=''; // "S%274,317,331,369"
 this.emarker=''; // "E%360,340,40,1"
 this.info=''; // "C%Shanghais Yuyuan - Das Original"
 this.kurzinfo=''; // D%kurze Beschreibung zu diesem Sub-Teil
 this.teilinfo=''; // A%kurze Beschreibung für alle Sub-Teile
 this.gm=''; // google map koord
 this.headers=new Array(''); // "H%Hamburg-Shanghai...
 this.trailers=new Array(''); // "T%<a href='http://www.yugarden.de'...
 this.keywords='';
 this.anzahl=0;
 this.anzahlut=0;
}

var _marker="<img src='i/marker-pl"+((IE6)?"_8":"")+".png' alt='' border=0>";
var _item=1;
_teilnum1st=new Array();
_daten=new Array();
datenx=new Array(); // GV
 for(var i=0;i<_items_tabelle.length;i+=2){
  var itt=_items_tabelle[i+1];
  datenx[_item]=new _DATENX();
  dx=datenx[_item];
  dx.name=_item;
  dx.sort=((_item<10)?'0':'')+_item; //um später die Reihenfolge zu sortieren
  
  for(k in itt){
   var w=itt[k];
   var w2=(w.length > 2) ? w.slice(2) : "";
  
   switch(w.charAt(0)){
   	case 'I':
   	 dx.idd=w2;
   	 break;
   	
   	case 'M': // (+) more
   	 dx.name='+';
   	 break;

 	  case 'A':
   	 dx.titel=w2;
   	 break;

   	case 'V':
   	 dx.untertitel=w2;
   	 break;
 	   	    	 
   	case 'H':
   	 dx.headers[dx.headers.length]=w2;
   	 break;
 	
 	  case 'T':
   	 dx.trailers[dx.trailers.length]=w2;
   	 break;
  
   	case 'U':
   	 z=w.split('%');
   	 dx.updatedatum=z[1];
   	 dx.updateinfo=z[2];
   	 break;
  
   	case 'G':
   	 dx.gm=w2;
   	 break;
  
   	case 'D':
   	 dx.kurzinfo=w2;
   	 break;

   	case 'A':
   	 dx.teilinfo=w2;
   	 break;
    
   	case 'P':
   	 var st=(w.length==1) ? stdsvr : eval(w.charAt(2));
     v=spfade_def[--st].split('%');
     dx.path_thumb=(online)?v[0]:v[2];
   	 dx.path_bild=(online)?v[1]:v[3];
   	 break;
  
   	case 'C':
   	 dx.info=w2;
   	 break;
  
   	case 'S':
   	 dx.spots=w2;
   	 break;
  
   	case 'E':
   	 dx.emarker=w2;
   	 break;
  
   	case 'K':
   	 dx.keywords=w2;
   	 break;
  
   	case 'W':
   	 dx.weitere=w2;
   	 break;
    } // switch()
   }
  
  _daten[_item]=_items_tabelle[i];
  ++_item;
  }

 // --

 for(i in datenx){
  dx=datenx[i];
  ++maxitem;
  if(!isNaN(dx.name)){
   /* Teile 1 ... x */
   ++maxteil;
   dx.teilnum=maxteil;
   dx.teilnumfirst=maxteil;
   dx.teildsp1=
   dx.teildsp2=
   dx.teildsp4=maxteil;
   dx.teildsp5="Teil "+maxteil;
   dx.teildsp6=maxteil;
   if(dx.weitere){
   	dx.teildsp2+=" "+_marker.replace("pl","a");
    dx.teildsp3=_marker.replace("pl","a");
    dx.teildsp4+=_marker.replace("pl","a");
    dx.teildsp5+="a";    
    dx.teildsp6+="a";  
    }
   _teilnum1st[dx.idd]=i;
   dx.sort+='a';
   }
  else{
   if(dx.weitere){
   	/* (a)(b)... */
   	w1=dx.weitere.split(',');
   	for(var ii=0; ii < w1.length; ii++){
     pa=w1[ii].split(':');
     if(ii==0)
      fst=pa[1];
     if(pa[1]==dx.idd){
     	dx.teilnumfirst=eval(_teilnum1st[fst]);
     	dx.name='>';
      dx.teildsp1=_marker.replace("pl",pa[0]);
      dx.teildsp2="Teil "+dx.teilnumfirst+" "+dx.teildsp1;
      dx.sort=((dx.teilnumfirst < 10)?'0':'')+dx.teilnumfirst+pa[0];
      dx.teildsp4=dx.teilnumfirst+dx.teildsp1;
      dx.teildsp5="Teil "+dx.teilnumfirst+pa[0];
      dx.teildsp6=dx.teilnumfirst+pa[0];
      }
     }
    }
   else{
   	/* (+) */
    dx.teildsp1=dx.teildsp2=dx.teildsp4=_marker;
    dx.sort+='z';
    }
   }
  }

// --

function _FOTO(_item,descr,teilnum,totnum,update,teilz){ // ein Objekt für jedes Foto
 this.item=_item;
 this.teilz=teilz;
 this.next_icod='';
 this.prev_icod='';
 this.viewed=0;
 this.found=''; // hier den icod des nächsten und beim letzten '.'
 this.kid=''; // koordinaten-id
 this.titel=descr;
 this.path_bild='';
 this.path_thumbnail='';
 this.update=update;
 this.srcWidth=0;
 this.srcHeight=0;
 this.teilnum=teilnum; // Nummern innerhalb der Teile
 this.teildsp1='';
 this.totnum=totnum;
 this.comment='';
 this.keywords='';
 }
foto=new Array(); // GV

// updates[] initialisieren ['2008.09.10-0x'] mit ''
_updates=new Array();
var icod,ui;
var totnum=0; //GV
var descr_last="";
var udate_last="";

for(var _item=1;_item<_daten.length;_item++){
 var l0item=(_item<10) ? '0'+_item : _item;
 var bildnum=0;
 var teilnum=0;
 for(x in _daten[_item]){
  // "Rathausmarkt % 370,2052,ead44201so0 % 2008.09.14(Datum für Updates) % kommentar(z.B.Datum) % keyword~keyword~..."
  //  oder
  // "Rathausmarkt % bilder/teil2/ead44201so0 % 2008.09.14(Datum für Updates) % kommentar(z.B.Datum) % keyword~keyword~..."
  u=_daten[_item][x].split('%');
  var descr=(u[0]==repeatlasttitlechar) ?  descr_last : u[0];
  descr_last=descr;

  var udate=(u[2]==repeatlasttitlechar && udate_last!="") ?  udate_last : u[2]; // Updates haben an der 3.Stelle Datum
  udate_last=udate;
  
  ++bildnum;
  if(descr==""){
   descr = "Bild " + bildnum;
   }
  if(udate){
   ui=udate+"-"+l0item; // 2008.09.14-03
   _updates[ui]='';
   }
  v=u[1].split(',');
  if(v.length==3){
   inam=v[2]; // ead1234567xy7oijztrz
   icod=inam.slice(0,10); // ead1234567
   }
  else{
   fnam=u[1];
   p=fnam.split('/');
   inam=p[p.length-1]; // ead1234567xy7oijztrz
   icod=inam.slice(0,10); // ead1234567
   }
  
  var zeitp=(udate) ? udate : datenx[_item].updatedatum;
  var teilz=datenx[_item].teildsp6;
  
  foto[icod]=new _FOTO(_item,descr,++teilnum,++totnum,zeitp,teilz);
  ++datenx[_item].anzahl; 
  }
 }

// --

var fkeyw_last="";
var kid_last="";
var comm_last="";
var kid;

for(var _item=1; _item<_daten.length; _item++){
 
 var l0item=(_item<10) ? '0'+_item : _item;
 
 if(datenx[_item].updatedatum){
  ui=datenx[_item].updatedatum+"-"+l0item;
  _updates[ui]=(datenx[_item].updateinfo) ? datenx[_item].updateinfo : "-";
  }
 
 var prev_icod='';
 udate_last='';

 for(x in _daten[_item]){

  u=_daten[_item][x].split('%'); // "Rathausmarkt % ead44201so0 % 2008.09.14 % kommentar % keyword~keyword~..."

  var inam=u[1];
  icod=inam.slice(0,10); // ead1234567  

  var udate=(u[2]==repeatlasttitlechar && udate_last!="") ?  udate_last : u[2]; // Updates haben an der 3.Stelle Datum
  udate_last=udate;
  
  var comm=(u[3]==repeatlasttitlechar && comm_last!="") ?  comm_last : u[3];
  comm_last=comm;
  
  var fkeyw=(u[4]==repeatlasttitlechar) ?  fkeyw_last : u[4];
  fkeyw_last=fkeyw;  
  
  _foto=foto[icod];
  _foto.item=_item;
  _foto.comment=comm;
  _foto.keywords=fkeyw;
  _foto.teildsp1=datenx[_item].teildsp1;
  _foto.path_thumbnail=datenx[_item].path_thumb+inam+".th.jpg";
  _foto.path_bild=datenx[_item].path_bild + inam + ".jpg";
 
  if(u.length > 5){
   kid=(u[5]==repeatlasttitlechar) ?  kid_last : u[5];
   kid_last=kid;
   }
  else{
   kid="";
   kid_last="";
   }
 
  if(fc[kid])
   _foto.kid=fc[kid];
 
  if(prev_icod){
   foto[prev_icod].next_icod=icod;
   foto[icod].prev_icod=prev_icod;
   }

  prev_icod=icod;
  // Updates der einzelnen Fotos
  if(udate){ // Updates haben an der 3.Stelle Datum
   ui=udate+"-"+l0item; // 2008.09.14-03 - wegen Sortierung
   _updates[ui]+="%" + icod + ":" + comm; // ... und an der 4. Stelle eventuell ein Kommentar
   }

  }
 }

// --

// Anzahl der Bilder in den Unter-Teilen
for(i in datenx)
 if(datenx[i].teilnumfirst){
  datenx[datenx[i].teilnumfirst].anzahlut += datenx[i].anzahl;
  }
 else{
 	if(datenx[i].name=='+')
 	 datenx[i].anzahlut += datenx[i].anzahl;
  }
 
for(i in datenx)
 if(datenx[i].name=='>')
 	datenx[i].anzahlut = datenx[datenx[i].teilnumfirst].anzahlut;

// die letzten Updates
updates=new Array(); // GV, updates.htm
u=new Array();
for(i in _updates) u[u.length]=i;
u.sort();
u.reverse();
for(i in u){
 updates[u[i]]=_updates[u[i]]; // lassen!
 }

// --

function _BILDPAR(d,n,s,i,t,x,y,z){
 this.defined=d;
 this.name=n;
 this.src=s;
 this.id=i;
 this.title=t;
 this.x=x;
 this.y=y;
 this.zIndex=z;
}

bildpar=new Array();

function Init_bildpar(){
 for(var i=0;i<dimax;i++){  
  bildpar[i]=new _BILDPAR(false,'','','','',0,0,0); // GV, wo Fotos nach Verlassen der Hauptanzeige aufbewahrt werden
  }
}

// --

_u11=new Array('&uuml;','&auml;','&ouml;','&szlig;','ö','ä','ü','ß');
_u12=new Array('ue', 'ae', 'oe', 'ss', 'oe', 'ae', 'ue', 'ss');

function Umlkonv1(cs){

 var a,i;
 cs=cs.toLowerCase();
  for(i in _u11)
   do{
   a=cs;
    cs=cs.replace(_u11[i],_u12[i]);
   }while(a != cs);

 return cs;

}

// --

_u21=new Array('&uuml;','&auml;','&ouml;','&Uuml;','&Auml;','&Ouml;','&szlig;','&quot;','&prime;','&bull;','&nbsp;');
_u22=new Array('ü', 'ä', 'ö','Ü','Ä','Ö','ß','\"','\'','-',' ');

function Umlkonv2(cs){

 if(cs=="")
  return "";

 if(!isNaN(cs))
  return cs+" ";

 var a,i;
 
 for(i in _u21)
  do{
    a=cs;
    cs=cs.replace(_u21[i],_u22[i]);
    }while(a != cs);
   
 return cs;

}

// --

function _FINDP(){
 this.icod;
 this.text;
 this.keywords;
 this.found=0;
}
findp=new Array();  // GV search

var fitem=-1;
var findex=0;
var ksep1='~';
var ksep2='.';

function Setsearchpar(){
 if(!findp.length){ // wird einmal ausgeführt
  var st;
  for(icod in foto){
   _foto=foto[icod];
   if(fitem != _foto.item){
   	fitem=_foto.item;
   	findex=1;
   	findp[fitem]=new Array();
    }
   findp[fitem][findex]=new _FINDP();
   findp[fitem][findex].text=Umlkonv1(_foto.titel);
   findp[fitem][findex].icod=icod;
   z=_foto.keywords.split('~');
   kws="";
   for(i in z)
    kws+="~"+z[i];
   kws+="~";
   findp[fitem][findex].keywords=kws;
   ++findex;
   }
 }
}

// --

function Gb(x){return (x<10)?x:String.fromCharCode(55+x);}

function Cencode(s){
var s1="";
for(var i=0;i<s.length;i++){
 ch=s.charAt(i);
 if( (ch >= 'a' && ch<='z') || (ch >= 'A' && ch<='Z') || (ch >= '0' && ch <= '9') || (ch == '_')){
  s1+=ch;
  }
 else{
  num=s.charCodeAt(i);
  hb=parseInt(num/16);
  lb=num - hb*16;
  s1+='%'+Gb(hb)+Gb(lb);
  }
 }
return s1;
}

// --

monate=new Array("","Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec");

// --

// TESTFUNKTIONEN
// _Show() wird vom input-Eingabefeld im Search-Fenster aufgerufen
// Syntax:  show::KEY z.B. show::headers
function _Show(was){

 var z='';

 switch(was){
  case 'headers':
   var i0=1;
   for(var x=1; x<=maxitem; x++){
    for(i in datenx[x])
     if(i!='headers' && i!='trailers') z+=i+'='+datenx[x][i]+'<br>\n';
    z+='<br>\n';
    for(k in datenx[x].headers)  z+='headers['+k+']='+datenx[x].headers[k]+'<br>\n';
    z+='<br>\n';
    for(k in datenx[x].trailers) z+='trailers['+k+']='+datenx[x].trailers[k]+'<br>\n';
    z+='<hr>';
    }
  break;
  
  case 'updates':
   for(i in updates)
    z+=i+" : "+updates[i]+"<br>\n";
  break;

  case 'fotos': // es dauert
   for(ii in foto){
    z+='['+ii + '] ';
    var z2='';
    for(jj in foto[ii])
     z2+=jj+'=\''+foto[ii][jj]+'\' ';
    z+=z2+'<br>\n<br>\n';
    }
  break;

  case 'find': // es dauert
   for(ii in findp){
    for(jj in findp[ii]){
     z+='Item:' + ii + ' foto #' +  jj + ': ';
    var z2='';
    for(kk in findp[ii][jj])
     z2+= kk + '=' + findp[ii][jj][kk] + '  ';
    z+=z2+'<br>\n';
    }
   }
  break;

  case 'doppelte':
   lin=new Array();
   var n=0;
   for(var i=1;i<_daten.length;i++){ // ausser Kontorhausviertel
    for(j in _daten[i]){
     x=_daten[i][j].split('%')
      y=x[1].split(',');
      icod=y[y.length-1];
      lin[n++]=icod;
     }
    }
   z='Doppelte Fotos: ';
   for(var i=0;i<lin.length-1;i++)
    for(var j=i+1;j<lin.length;j++)
     if(lin[i]==lin[j])
	    z+=lin[i]+' ';
  break;
  }
V(z,"");
}

// Viewallofitem() wird vom input-Eingabefeld im Search-Fenster mit qqq aufgerufen. Item zunächst wählen!
function Viewallofitem(){
_kw=eingabe._kw;
if(item >=1 && item <= maxitem){
 var z='<table border=0 cellpadding=0 cellspacing=4>';
 for(i in foto){
  f=foto[i];
  if(f.item == item){
   z1 ='<tr><td align="right"><img src="'+f.path_thumbnail+'" alt=""></td>';
   z1+='<td bgcolor=#303030 style="color:#c0c0c0; font-size:11px; font-family:verdana; padding:3px;">' + i + '  "' + f.titel + '"  ' + f.keywords + '<br><br><span style="color:#60c050;">';
   ky=f.keywords.split('~');
   for(j in ky){
    kn=ky[j];
    if(kn)
 	   z1+='&nbsp;'+_kw[kn]+'<br>';
    }
   z+=z1;
   z+='</td></tr>';
   }
  }
 z+='</table>';
 }
else
  {
	z='Kein item';
  }

V(z,"");
}

// V() kann temporär in ein Frame um Texte auszugeben die zu lang für alert() sind
function V(text,wohin){

 if(wohin==undefined) wohin='display';
 if(wohin=='undefined') wohin='display';
 if(wohin=="") wohin='display';
 var z='<html>\n<head>\n<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">\n<title>v</title>\n</head>\n<body bgcolor=#404050>\n<font color=#d0d0e0>\n';
 z+=text;
 z+='</body>\n</html>\n';
 t=window.open('',wohin);
 t.document.open('text/html');
 t.document.write(z);
 t.document.close();
}