			function maximumChars(maxChars,countFields,outputFields) {
				// 
				this.maxNumberOfChars=maxChars;
				this.countFields=countFields;
				this.errorClass='error';
				this.okClass='ok';
				this.outputFields=outputFields;				

				this.setErrorClass=function(errorClass) {
					this.errorClass=errorClass;
				}

				this.setOkClass=function(okClass) {
					this.okClass=okClass;
				}


				this.count=function() {
					
					var sum=0;
					for (i=0;i<countFields.length;i++){

						if (!document.getElementById(countFields[i]).readonly==true){
							sum+=document.getElementById(countFields[i]).value.length;	
						}
					}

					for (i=0;i<this.outputFields.length;i++){
						if (sum<=maxChars) {
							document.getElementById(''+this.outputFields[i]+'').value=''+document.getElementById(countFields[i]).value.length+' / '+(this.maxNumberOfChars-sum);
							document.getElementById(''+this.outputFields[i]+'').className = this.okClass;
						} else {
							document.getElementById(''+this.outputFields[i]+'').value=''+document.getElementById(countFields[i]).value.length+' / '+(this.maxNumberOfChars-sum);
							document.getElementById(''+this.outputFields[i]+'').className = this.errorClass;
						}
					}

				}

			}

			function openHelpWindow(help) {
				window.open('help.php?text='+help+'','Browser','toolbar=no,location=no,directories=no,status=yes,menubar=no,scrollbars=yes,resizable=yes,height=150,width=400');
			}

			function addFilename(filename) {		
				// für Filemanager
				if (document.createRange) {
					rng = document.createRange();
					el = window.opener.document.getElementById('addedFileNames');
					rng.setStartBefore(el);
					htmlFrag = rng.createContextualFragment(filename); 
					el.appendChild(htmlFrag);
				} else {
					document.getElementById('addedFileNames')=filename;
				}
			
			}


			function fieldcontrol(fieldname,fullfieldname,fieldid,datatype,mandatory) {
				// Stefans Versuch einer JavaClass zur Kontrolle über Formularfelder...
				
				if (document.getElementById(fieldid)) {
					//alert (fullfieldname+' '+fieldname);
					
					// onChange-Check-Unterdrückungsflag
					this.ignore_onChange=false;
					// onFocus-Check-Unterdrückungsflag
					this.ignore_onChange=false;
					// onBlur-Check-Unterdrückungsflag
					this.ignore_onBlur=false;
					// bereits gewarnt ?
					this.user_warned=false;

					
					// String für Fehlermeldungen
					this.errormessage="";
					this.errormessages="";


					// feldspezifische Daten
					this.fieldname=fieldname;			// Name des Formfields
					this.fieldid=fieldid;				// ID des Formfields
					this.fullfieldname=fullfieldname;	// Quasi die Feldbeschreibung, also das, was im Edit-System blau unterlegt ist
					this.fielddata=fullfieldname.value;	// im Feld enthaltene Daten
					

					// methods

					this.if_change=function() {
						// onChange
						//alert('Change '+this.fieldname);
					}

					this.if_focus=function() {
						// onFocus
						this.check_field();
					}

					this.if_blur=function() {
						// onBlur
						//alert('Blur '+this.fieldname);
						
						/*
						if (document.getElementById('errorline').value!="" && document.getElementById('errorline').value!=this.errormessages) {
							// Fehlermeldung(en) liegen vor, nud zwar neue
							this.errormessages=document.getElementById('errorline').value;
							alert ('erweiterte fehlermeldung');
						}
						*/

						this.check_field();
						
						
					}

					this.check_field=function() {
						
						if (this.fielddata==this.fullfieldname.value) {
							//alert('Nix geändert');
						} else {
							this.fielddata=this.fullfieldname.value;
							// if (!check_before_submit()) {
							check_before_submit();
							
							if (all_errors=='') {
								// Keine Fehler, errorline unsichrbar machen
								//alert('löschen');
								document.getElementById('errorline').className = "errorsno";
							}

							if (fieldflag[this.fieldname]!='') {
						
								//alert(fieldflag[this.fieldname]);
								// User hat Mist gebaut

								// Fehlerzeile sichtbar machen
								document.getElementById('errorline').className = "errorsyes";
								document.getElementById('errorlog').className = "errorsyes";
								
								this.user_warned=true;
								this.fullfieldname.className='inputerror';
								//alert('ERR');
								//myimage=String();
								//document.getElementById('help_'+this.fieldname).src='img/error.gif';
								//document.getElementById('errorlog').value=fieldflag[this.fieldname];
								if (document.createRange) {
								
									rng=document.createRange();
									el=document.getElementById('errorlog');
									rng.setStartBefore(el);
									htmlFrag=rng.createContextualFragment(all_errors);
									while(el.hasChildNodes()) {el.removeChild(el.lastChild);}el.appendChild(htmlFrag);
								} else {
									document.getElementById('errorlog').innerHTML=all_errors;
								}
						
								this.fullfieldname.focus();
							} else {
								// Alles supi
								//
								
								this.user_warned=false;
								if (document.createRange) {
									rng=document.createRange();
									el=document.getElementById('errorlog');
									rng.setStartBefore(el);
									htmlFrag=rng.createContextualFragment(all_errors);
									while(el.hasChildNodes()) {el.removeChild(el.lastChild);}el.appendChild(htmlFrag);
								} else {
									document.getElementById('errorlog').innerHTML=all_errors;
								}
								this.fullfieldname.className='inputok';
							}
							//alert('Was geändert');
						}
					}
				} // endif
			} // end of Class

	
///////////////// Ende neu 2004-03-25
			
			function dolist_ordered(myTA,starttag,endtag) {

				theList = starttag+"\n";
				listEnd = endtag;

//
				var parts=new Array();
				var selected = '';
				var delta=0;
				var description=''; // Variable zur Speicherung der Beschreibung bei Acronymen
				var i;

				if(navigator.appName=="Netscape" &&  myTA.textLength>=0 && myTA.selectionStart!=myTA.selectionEnd ) 
					selected=myTA.value.substring(myTA.selectionStart,myTA.selectionEnd);	
				
				if (selected!='') {
					// User hat nen Text selektiert und will offenbar daraus eine Tabelle bauen
					parts=selected.split('\n');
					for (i=0;i<parts.length;i++){
						//alert(parts[i]);
						theList=theList+"[:li:]"+parts[i]+"[:/li:]\n";
					}
					
					
					addText(theList+listEnd,'',true,document.formular);
				} else {
					// Noch kein Text markiert, da brauchen wir paar Prompts
					listEntry = "initial";

					while ((listEntry != "") && (listEntry != null)) {
						listEntry = prompt('Geben Sie jeden Listenpunkt gefolgt von der Eingabetaste ein. Nach Fertigstellung einen Leereintrag eingeben', "");
						if ((listEntry != "") && (listEntry != null)) theList = theList+"[:li:]"+listEntry+"[:/li:]\n";
					}
					
					//addText(theList + listEend, "", false, myTA);
					addText(theList+listEnd,'',true,document.formular);
					//textfunction(myTA,theList,listEnd);
				} // endif selected
			}
						
			
			function replace_text(text,targetfield) {
				if (document.createRange) {
					rng = document.createRange();el = document.getElementById(targetfield);rng.setStartBefore(el);htmlFrag = rng.createContextualFragment(text); while(el.hasChildNodes()) {el.removeChild(el.lastChild);}el.appendChild(htmlFrag);
				} else {
					document.getElementById(targetfield).innerHTML=text;
				}
			}

			function preview() {
				this.sourcefield=new Array();
				this.targetfield=new Array();
				
				this.counter=0;	
			
				this.add_field=function(source,target) {
					// Feld hinzufügen
					this.sourcefield[this.counter]=source;
					this.targetfield[this.counter]=target;
					this.counter++;
				}

				this.update_fields=function () {
					// alle targetfields auf den neuesten Stand bringen

					for (i=0;i<this.counter;i++) {
						this.targetfield[i].value=this.sourcefield[i].value;
						// alert (this.targetfield[i].value);
					}

				}
			}

			prev=new preview();


			function reloadImage(newImage) {
					window.opener.document.images.picturefield.src = newImage;
			}


			function insertlink(myTA) { 
				
				ltext='';
				link='';
				link=window.prompt('Geben Sie die Site ein, zu welcher die Verlinkung erfolgen soll. Die Eingabe muss ohne führendes http:// erfolgen (z.B. www.busche.de)','www.','Link erstellen');
				ltext=window.prompt('Geben Sie den Text für den Link ein',link,'Link erstellen');
				
				if (link!='' && ltext!='' && link && ltext && is_website(link)) {
					myTA.value = myTA.value.substring(0,myTA.selectionStart) + '[:href:extern:' +link + ':' + ltext + '::]' + myTA.value.substring(myTA.selectionStart,myTA.value.length);
					myTA.focus();
				} else {
					alert ('Ungültiger Link oder Operation abgebrochen');
				}
			
			}


			function textCounter(field, countfield, maxlimit) {
			 	if (countfield) {
				  if (field.value.length > maxlimit) {
					  field.value=field.value.substring(0, maxlimit);
				  }  else {
					  countfield.value=maxlimit - field.value.length;
				  }
				}
			}			

			function leave() {
				// Stefan's erste JavaScript Class ;-) 
				
				// noalert ist ein Flag. Steht es auf 1, wird keine Alert beim Verlassen der Site ausgelöst
				this.noalert=1;
				// in Leavetext packen wir den Text des Alerts
				this.leavetext='';

				this.set_leavetext=function(text) {
					this.leavetext=text;
				}

				this.switch_off=function() {
					// Alarm abstellen
					this.noalert=1;
				}
				
				this.switch_on=function() {
					// Alarm an
					this.noalert=0;
				}

				this.execute_alert=function() {
					if (this.noalert!=1) {
						//prompt(this.leavetext,'','Busche Contentmanagement');
						return confirm(this.leavetext,'1','2');
					}
				}
			}

			// grundsätzlich initialisieren wird die Class

			panic=new leave();
			// stellen den Alarm aber ab
			panic.switch_off();

// new

			function pagebreak(myTA) {
				//Pagebreak inserten an der aktuellen Stelle des Cursors
				//myTA.value = myTA.value.substring(0,myTA.selectionStart) + '[:PB:]'+ myTA.value.substring(myTA.selectionStart,myTA.value.length);
				//myTA.focus();
			
				addText('[:PB:]','',true,document.formular);

			}

			function check_text_length(myTA) {
				// Prüft, ob Textlänge einen bestimmten Wert überschreitet.
				// Ist das der Fall, wird geprüft, ob Pagebreaks vorhanden sind. Wenn nicht, wird gewarnt und ggf.
				// automatisiert gesetzt
				var reg= /\[:PB:\]/;
				var cr= /\n\n/;
				var absatz;
				var maxchars=2000; // MAXIMALE Anzahl an Zeichen, die auf einer Seite stehen dürfen

				if (myTA.value.length>=maxchars) {
					// aha, zu lang für eine Seite
					// Sind Pagebreaks drin ?
					if (!reg.test(myTA.value)) {
						// Nee, mosern !
						if (confirm('Der Text ist zu lang, um auf einer Seite dargestellt zu werden. Sie haben keine Seitenumbrüche gesetzt, so dass diese nun automatisiert dem Text hinzugefügt werden. Wenn Sie das nicht wollen, betätigen Sie bitte den CANCEL-Button')) {
							absatz=myTA.value.split('\n\n'); // in Absätze verhackstückeln
							chars=0;
							newtext='';
							if (absatz.length>1) {
								// jeden Absatz fetchen
								for(i=0;i<absatz.length;i++) {
									part=absatz[i];
									// Absatz speichern
									newtext+=part;
									// Zeichen zählen
									chars+=part.length;
									// Prüfen, ob Seite überschritten wurde
									if (chars>=maxchars && i!=(absatz.length-1)) {
										// tatsächlich, wir brauchen einen Umbruch
										chars=0;
										newtext+='[:PB:]\n\n';
									} else {
										if (i!=(absatz.length-1)) {
											newtext+='\n\n';
										}
									}
								} // for i
								myTA.value=newtext;
							} else {
								// Text ist saulang und hat noch nichtmal einen Zeilenumbruch *arghhh
								alert('Im Text befindet sich kein Zeilenumbruch. Ergo können Absätze nicht automatisiert gesetzt werden. Bitte korrigieren Sie diesen desolaten Zustand');
							}
						} // end confirm
					}
				}
			}

			function textfunction(myTA,starttag,endtag) {
				var selected = '';
				var delta=0;
				var description=''; // Variable zur Speicherung der Beschreibung bei Acronymen

				if(navigator.appName=="Netscape" &&  myTA.textLength>=0 && myTA.selectionStart!=myTA.selectionEnd ) 
					selected=myTA.value.substring(myTA.selectionStart,myTA.selectionEnd);	
				
				if (selected!='') {
					// Sonderfall Acronym abhandeln...
					if (starttag=='ACR') {
						while (description=='' || !description) {
							description=prompt('Geben Sie eine Erklärung für den markierten Bereich ein:','','');
						}

						endtag=':'+description+':]';
						starttag='[:acr:';
					}
					
					addText(starttag,endtag,true,document.formular);
				}
				
			}


			// end new
			function addText(theTag, theClsTag, isSingle, theForm)
			{
				// Funktion ist aus dem PaniniForum entliehen
				
				var isClose = false;
				var message = theForm.description;
				var set=false;
				var old=false;
				var selected="";
				//alert('thetag: '+theTag);
				if((navigator.appName=="Netscape" &&  message.textLength>=0) || (theTag=='[:PB:]') ) { // mozilla, firebird, netscape
					
					if(theClsTag!="" && message.selectionStart!=message.selectionEnd) {
						selected=message.value.substring(message.selectionStart,message.selectionEnd);
						str=theTag + selected+ theClsTag;
						old=true;
						isClose = true;
					}
					else {
						str=theTag;
					}
					
					message.focus();
					start=message.selectionStart;
					end=message.textLength;
					endtext=message.value.substring(message.selectionEnd,end);
					starttext=message.value.substring(0,start);
					message.value=starttext + str + endtext;
					message.selectionStart=start;
					message.selectionEnd=start;
					
					message.selectionStart = message.selectionStart + str.length;
							
					if(old) { return false; }
					
					set=true;
					
					if(isSingle) {
						isClose = false;
					}
				}
				if ( (myVersion >= 4) && is_ie && is_win) {  // Internet Explorer
					if(message.isTextEdit) {
						message.focus();
						var sel = document.selection;
						var rng = sel.createRange();
						rng.colapse;
						if((sel.type == "Text" || sel.type == "None") && rng != null){
							if(theClsTag != "" && rng.text.length > 0)
								theTag += rng.text + theClsTag;
							else if(isSingle)
								isClose = true;
				
							rng.text = theTag;
						}
					}
					else{
						if(isSingle) isClose = true;
				
						if(!set) {
								message.value += theTag;
							}
					}
				}
				else
				{
					if(isSingle) isClose = true;

					if(!set) {
							message.value += theTag;
						}
				}

				message.focus();
				
				return isClose;
			}
			// end function from panini
	

			
			function reload(art,table,id) {
				window.location.href="index.php?action=update_art&selected="+art+"&table="+table+"&id="+id;
			 }

			function reload2(art,table,id) {
				window.location.href="index.php?action=update_sourcetable&selected="+art+"&table="+table+"&id="+id;
			 }
			
			function open_browser(sourcetable,sourcefield,backfield,formfield) {
				myWindow = window.open("index.php?action=browse&sourcetable="+sourcetable+"&sourcefield="+sourcefield+"&formfield="+formfield+"&backfield="+backfield,"Browser","toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=yes,resizable=yes,height=400,width=800");
			
			}

			function check_formular() {
				alert (document.formular[0].value);
				return true;
			}

			function is_alpha_mit_sz(eing) {
				var reg= /^[A-Za-zÖöÜüÄäß]*$/ ;
				if (reg.test(eing))
					return true;
				else {
					panic.switch_on();
					return false;
				}
			}

			function is_isbn_number(eing) {
				var i,num;
				var faktor=10;
				var summe=0;
				var dash=0;

				for (i=0;i<eing.length;i++) {
					num=eing.substr(i,1);

					if (num=='X' || num=='x') {
						num=10;
					}

					if (num=='-')
					{
						dash++;
					}
					
					if (num==0 || num==1 || num==2 || num==3 || num==4 || num==5 || num==6 || num==7 || num==8 || num==9 || num==10)
					{
						summe+=num*faktor;
						faktor--;
					}
				}

				//alert ('Summe: '+summe+' Faktor: '+faktor);
				
				// Nummer ist nur gültig, wenn ohne Rest durch 11 teilbar, der Faktor in der Schleife bis 0 dekrementiert wurde
				// und 3 mal ein Bindestrich vorkam

				if (summe % 11==0 && faktor==0 && dash==3)
				{
					return true;
				} else {
					return false;
				}
			}



			function is_alphanum_mit_sz(eing) {
				//var reg= /^[A-Za-z #:;,.\[\]<>()\/ÖöÜüÄäß\+\-]*$/ ;
				//if (reg.test(eing))
					return true;
				//else {
				//	panic.switch_on();
				//	return false;
				//}
			}

			function is_alphanum(eing) {
				// var reg= /^[A-Za-z0-9ÖöÜüÄä ß.,;:-]*$/ ;
				var reg= /^[A-Za-z0-9- öäüßÄÖÜ.()]*$/ ;
				if (reg.test(eing))
					return true;
				else {
					panic.switch_on();
					return false;
				}
			}

			function is_alpha(eing) {
				var reg= /^[A-Za-z]*$/ ;
				if (reg.test(eing)) 
					return true;
				else {
					panic.switch_on();
					return false;
				}
			}
			/*
			function is_alphanum(eing) {
				var reg= /^[A-Za-z0-9]*$/ ;
				if (reg.test(eing) && eing!='')
					return true;
				else {
					panic.switch_on();
					return false;
				}
			}
			*/

			function is_email(eing) {
				var reg= /^[a-zA-Z0-9]+[a-zA-Z0-9._-]*@[a-zA-Z0-9]+[a-zA-Z0-9._-]*\.[a-zA-Z]{2,5}$/;

				if (reg.test(eing) || eing=='')
					return true;
				else {
					panic.switch_on();
					return false;
				}
			}



			function is_website(eing) {
				var reg=/^[a-zA-Z0-9]+[a-zA-Z0-9._-]*\.[a-zA-Z]{2,5}(\/[a-zA-Z0-9%&=?._-]*)*$/;
				
				if (reg.test(eing) || eing=='')
					return true;
				else {
					panic.switch_on();
					return false;
				}
			}

			function is_filename(eing) {
				var reg=/^[a-zA-Z0-9\/.]*$/;
				if (reg.test(eing))
					return true;
				else {
					panic.switch_on();
					return false;
				}
			}

			function is_date(eing) {
				var reg=/^\d{4}\-\d{2}\-\d{2}$/;
				//var reg=/^\d\d\d\d-\d\d-\d\d*$/;
				if (reg.test(eing))
					return true;
				else {
					panic.switch_on();
					return false;
				}
			}


			function countall(wert,maxlen,typ,pflicht,feld) {
					
				if((wert.length >=  maxlen) && (maxlen>1))
				{
					alert("Feld "+feld+" ist zu lang (max. "+maxlen+" Zeichen");
				}
				
				if( pflicht >= 1 ) {
					if (wert.length == 0) {
						//alert ("Feld "+feld+" MUSS ausgefüllt werden.");
					}
				}
				if (typ==1) {
					if (!is_email(wert)) {
						alert ("eMail-Adresse ist nicht gültig ("+feld+")");
					}
				}

				if (typ==2) {
					
					if (!is_website(wert) && wert.length!=0) {
						alert ("URL ist nicht gültig ! ("+feld+")");
					}
				}

				if (typ==5) {
					if (!is_alpha(wert)) {
						alert ("Daten sind nicht alpha ("+feld+")");;
					}
				}
				if (typ==6) {
					if (!is_alphanum(wert)) {
						alert ("Daten nicht alphanumerisch ("+feld+")");
					}
				}

				if (typ==7) {
					if (!is_alpha_mit_sz(wert)) {
						alert ("Daten nicht alpha mit Sonderzeichen ("+feld+")");
					}
				}

				if (typ=='is_Alphanum mit Sond') {				
					if (!is_alphanum_mit_sz(wert)) {
						alert ("Daten sind nicht alphanumerisch (mit Sonderzeichen) !("+feld+")");
					}
				}

				if (typ==9) {
					if (!is_filename(wert)) {
						alert ("Daten sind kein Dateipfad !("+feld+")");
					}
				}
			}

			function keine() {
				return true;
			}

		
