/***************************   Diverse Funktionen: ************************

* -> browserCheck(): Funktion zum Browser abfragen
* -> getElem(p1,p2,p3): gibt ein Element über 'id','name' oder 'tagname' zurück
* -> getStyle(elID): gibt ein element.style oder layer objekt zurück 
* -> formCheck(): überprüft ein Formular auf korrekt ausgefüllte Felder
* -> dialog(): Hilfsfunktion zu formCheck
* -> fileNameCheck(): Überprüft einen Dateinamen auf OS konforme Zeichen
* -> verhexe(): Umwandlung von Hex-Farbwerten in Dezimalzahlen und umgekehrt
* -> position(): Hilfsfunktion zum relativen positionieren von div-Layern
* -> mailme(): Funktion zum Verstecken von Mailadressen

*****************************************************************************/


//////////////////////////////////////////////////////////////////////////////
//*********************       browserCheck()       ***************************
//////////////////////////////////////////////////////////////////////////////

function browserCheck(){ 
  this.ver=navigator.appVersion
  this.agent=navigator.userAgent
  this.dom=document.getElementById?1:0
  this.opera5=this.agent.indexOf("Opera 5")>-1
  this.ie5=(this.ver.indexOf("MSIE 5")>-1 && this.dom && !this.opera5)?1:0; 
  this.ie6=(this.ver.indexOf("MSIE 6")>-1 && this.dom && !this.opera5)?1:0;
  this.ie4=(document.all && !this.dom && !this.opera5)?1:0;
  this.ie=this.ie4||this.ie5||this.ie6
  this.mac=this.agent.indexOf("Mac")>-1
  this.ns6=(this.dom && parseInt(this.ver) >= 5) ?1:0; 
  this.ns4=(document.layers && !this.dom)?1:0;
  this.bw=(this.ie6||this.ie5||this.ie4||this.ns4||this.ns6||this.opera5)
  return this
}
brows=new browserCheck()

var elementID, topPosition, leftPosition;
var actLayer='welcome';
var d=5;

/* Beispiele:
	Elementobjekt = getElem("id","Hinweis",null);
	Elementobjekt = getElem("name","Eingabefeld",0);
	Elementobjekt = getElem("tagname","p",8);
	Layerobjekt = getElem("index",2,null,null);
*/
function getElem(p1,p2,p3) {
 var Elem;
 var byId, byName, byTag;
 switch(p1.toLowerCase()){
 case "id":byId=true;
 				break;
 case "name":byName=true;
 				break;
 case "tagname":byTag=true;
 				break;}
 if(brows.dom) {
   if(byId) {
     if (typeof document.getElementById(p2) == "object")
     Elem = document.getElementById(p2);
     else Elem = void(0);
     return(Elem);
   }
   else if(byName) {
     if (typeof document.getElementsByName(p2) == "object")
     Elem = document.getElementsByName(p2)[p3];
     else Elem = void(0);
     return(Elem);
   }
   else if(byTag) {
     if (typeof document.getElementsByTagName(p2) == "object" ||
        (OP && typeof document.getElementsByTagName(p2) == "function"))
     Elem = document.getElementsByTagName(p2)[p3];
     else Elem = void(0);
     return(Elem);
   }
   else return void(0);
 }
 else if(brows.ie4) {
   if(byId) {
     if (typeof document.all[p2] == "object")
     Elem = document.all[p2];
     else Elem = void(0);
     return(Elem);
   }
   else if(byTag) {
     if (typeof document.all.tags(p2) == "object")
     Elem = document.all.tags(p2)[p3];
     else Elem = void(0);
     return(Elem);
   }
   else if(byName) {
     if (typeof document[p2] == "object")
     Elem = document[p2];
     else Elem = void(0);
     return(Elem);
   }
   else return void(0);
 }
 else if(brows.ns4) {
   if(byId || byName) {
   if (typeof document[p2] == "object")
     Elem = document[p2];
     else Elem = void(0);
     return(Elem);
   }
   else if(p1.toLowerCase()=="index") {
    if (typeof document.layers[p2] == "object")
     Elem = document.layers[p2];
    else Elem = void(0);
     return(Elem);
   }
   else return void(0);
 }
}

//////////////////////////////////////////////////////////////////////////////
//*********************       getStyle()       *******************************
//////////////////////////////////////////////////////////////////////////////

function getStyle(elID){//gibt ein element.style oder layer objekt zurück
if(!brows.ns4){
	var s=getElem('id',elID).style;}
else{
	var s=getElem('id',elID)}
if(s!=null)return s;
else return void(0);}


//////////////////////////////////////////////////////////////////////////////
/********************       formCheck()       ********************************
//////////////////////////////////////////////////////////////////////////////

erstes Argument ist der Formular-Name im form-Tag, danach wird für jedes zu prüfende Feld folgendes Argument eingegeben:
'Feld,Feldname,Kriterium,1', dabei ist Feld der Name des Feldes im input-Tag, Feldname der Name für den Fehlerdialog, 
Kriterium ist das zu prüfende Kriterium,und 1 oder 0 an 4. Stelle entscheiden ob das Feld ausgefüllt sein muss, oder nicht.
Mögliche Kriterien sind: 
'zahl': es darf kein Zeichen vorkommen, dass keine Zahl ist (ausser '.' und ',')
'text': es darf kein Zeichen vorkommen, dass eine Zahl ist
'telefon': es dürfen nur Zahlen und '-','/' und '+' vorkommen
'plz': 5-stellige Zahl
'e-mail': selbsterklärend
'checked': wenn einer von einem oder mehreren Radio-Buttons gewählt sein muss
'selected_isNot_wert': Für Auswahllisten, wert ist der Anfangswert (der voreingestellt ist)

Wenn Feld und Feldname identisch sind, reicht auch 'Feldname,Kriterium,1'


Bsp:
return formCheck('Form1',
			  'Vorname,text,1',
			  'Nachname,text,1',
			  'Telefon,telefon,1',
			  'PLZ,Postleitzahl,plz,1',
			  'Ort,text,1',
			  'Strasse,text,1',
			  'Hausnr,Hausnummer,,1',
			  'mail,E-mail,e-mail,0',
			  'Fach,Unterrichtsfach,selected_isNot_waehle,1',
			  'PLZ,Postleitzahl,plz,true');
*/ 

var feld_arr, namen_arr, krit1_arr, formName;

//hier können die Dialoge an Sprache angepasst werden
// z.B. var dialog_1 = "<?php echo $lang["dialog_1"] ?>";
var dialog_1 = "Sie haben im Feld {fieldname} nichts eingetragen!";
var dialog_2 = "Ungültige Angabe im Feld {fieldname}!";
var dialog_3 = "Bitte {fieldname} auswählen!";

function formCheck(){
    feld_arr=new Array();
    namen_arr=new Array();
	krit_arr= new Array();
	fill_arr = new Array();
	form=formCheck.arguments[0];
    for(k=1;k<formCheck.arguments.length;k++){
        temp_arr = formCheck.arguments[k].split(',');
        feld_arr.push(temp_arr[0]);
		if(temp_arr.length==3){
        	namen_arr.push(temp_arr[0]);
			krit_arr.push(temp_arr[1]);
	    	fill_arr.push(temp_arr[2]);
		}
		else {
			namen_arr.push(temp_arr[1]);
	    	krit_arr.push(temp_arr[2]);
	    	fill_arr.push(temp_arr[3]);
		}
	 }
	 for(i=0;i<feld_arr.length;i++){
	    aktField=eval("document."+ form + "." +feld_arr[i]);
		if(typeof aktField.length!='undefined' && (aktField[0].type=="checkbox" || aktField[0].type=="radio")){
			aktWert=aktField[0].value;
		}
		else aktWert=trim(eval("document."+ form + "." +feld_arr[i]+".value"));
		if(fill_arr[i]==1){
			if(aktWert==""){
				dialog(namen_arr[i],'leer');
				aktField.focus();
				return false;
			}
		}
		if(krit_arr[i]=="zahl"){
			for (var j = 0; j > aktWert.length; j++){
				var ch = aktWert.substring(j, j + 1);
				if (isNaN(aktWert) && ch!="." && ch!=","){
					dialog(namen_arr[i],'noNr');
					return false;
				}
			}
		}
		if(krit_arr[i]=="text"){
			for (var j = 0; j < aktWert.length; j++){
				var ch = aktWert.substring(j, j + 1);
				if (!isNaN(ch)){
					dialog(namen_arr[i],'text');
					return false;
				}
			}
		}
		if(krit_arr[i]=="telefon"){
			if(aktWert.indexOf("-")>0){
				aktWert_arr = aktWert.split("-");
			}
			else if(aktWert.indexOf("/")>0){
				aktWert_arr = aktWert.split("/");
			}
			else if (aktWert.indexOf("+")==0){
				aktWert_arr = new Array(aktWert.substring(1));
			}
			else aktWert_arr = new Array(aktWert);
			for(z=0;z<aktWert_arr.length;z++){
				temp = trim(aktWert_arr[z]);
				if(isNaN(temp)){
						dialog(namen_arr[i],'noNr');
						return false;
				}
			}
		}
		if(krit_arr[i]=="e-mail" && aktWert!=""){ //falls eine E-mail-Adresse eingetragen ist, 
													//muss sie gültig sein
			if(!aktWert.match(/^[a-zA-Z0-9_\.-]{2,}@[a-z0-9-]{3,}\.[a-z]{2,4}|museum$/)) {
				dialog(namen_arr[i],'text');
				return false;
			}
		}
		if(krit_arr[i].indexOf('selected_isNot')==0){
			var w = krit_arr[i].split('_');
		    if(aktWert==w[2]){
		    	dialog(namen_arr[i],'choice');
			    return false;
			}		
		}
		if(krit_arr[i]=='checked'){
			isEmpty=true;
			for(z=0;z<aktField.length;z++){
				if(aktField[z].checked)isEmpty=false;
			}
			if(isEmpty){
			    dialog(namen_arr[i],'choice');
			    return false;
			}
		}
		if(krit_arr[i]=='plz'){
			if (isNaN(aktWert)||aktWert.length!='5'){
				dialog(namen_arr[i],'noNr');
				return false;
			}
		}
	}
}			

							
							
function trim(s){
	if(s.length>0){	
		while(s.indexOf(' ')==0){
			s = s.substring(1);
		}
		while(s.lastIndexOf(' ')==s.length-1){
			s = s.substring(0,s.length-1);
		}
	}
	return s;
}	

//////////////////////////////////////////////////////////////////////////////
//***********************       dialog()       *******************************
//////////////////////////////////////////////////////////////////////////////

			
function dialog(feldname, fehler){
    if(fehler=="leer"){
        d = dialog_1.split('{fieldname}');
    }
    if(fehler=="text"||fehler=="noNr"){
        d = dialog_2.split('{fieldname}');
    }
    if(fehler=="choice"){
       d = dialog_3.split('{fieldname}');
    }
    alert(d[0] + feldname + d[1]);
}	


//////////////////////////////////////////////////////////////////////////////
//********************       fileNameCheck()       ***************************
//////////////////////////////////////////////////////////////////////////////

function fileNameCheck(){
  fn = form1.info_file.value;
  fn = fn.substring(fn.lastIndexOf('\\')+1,fn.length);
  badCharacters = "";
  for(i=0;i<fn.length;i++){
  cv =fn.charCodeAt(i);
  if((cv == 45 || cv== 46 || cv == 95 || cv == 126) // Bindestrich, Punkt,Unterstrich und Tilde sind erlaubt
               || (cv > 47 && cv < 58) //Zahlen
               || (cv > 64 && cv < 91) //Großbuchstaben
               || (cv > 96 && cv < 123)){ //Kleinbuchstaben
  //do nothing	
  	}
  else {
  badCharacters+= fn.charAt(i);
  	}
  }
  if(badCharacters.length >0){
  	alert("Der Dateiname enthält unzulässige Zeichen die unter \nUmständen zu Problemen führen können:\n\"" +
  	badCharacters + "\" \nBitte benennen Sie die Datei um und versuchen es erneut.");
  	return false;
  }
  else return true;
}	

//////////////////////////////////////////////////////////////////////////////
//**************************       verhexe()       ***************************
//////////////////////////////////////////////////////////////////////////////

var weite=screen.width;
var hoehe=screen.height;

//wandelt eine Dezimalzahl in eine (bis zu 2-stellige) Hexadezimalzahl um
function verhexe(x){
	if(x<0)x=-x;
	if(x>255)x=255;
	var z = new Array("0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F");
	var result=z[Math.floor(x/16)].toString()+z[(x % 16)].toString();
	return result;
}

//wandelt einen Hexadezimal-Farbwert in einen Array mit den entsprechenden rgb-Werten um
function enthexe(color){
	if(color.indexOf('#')==0){
		color = color.substring(1,color.length);
	}
	r = color.substring(0,2);
	g = color.substring(2,4);
	b = color.substring(4,6);
	r = parseInt(r,16);
	g = parseInt(g,16);
	b = parseInt(b,16);
	rgb_color = new Array(r,g,b);
	return rgb_color;
}


 
//////////////////////////////////////////////////////////////////////////////
//*************************       position()       ***************************
//////////////////////////////////////////////////////////////////////////////
  
//Hilfsfunktion zum relativen positionieren von div-Layern Argumente: h_pos (horizontal) , v_pos Abstand zum jeweils am anderen Rand   
function position (layer_name,h_pos,v_pos) {
lay_style=getStyle(layer_name);
if(h_pos!=null){left_pos=weite-(parseInt(lay_style.width) + h_pos);
lay_style.left=left_pos;}
if(v_pos!=null){top_pos=hoehe-(parseInt(lay_style.height) + v_pos);
lay_style.top=top_pos;}}

//////////////////////////////////////////////////////////////////////////////
//***************************       mailme()       ***************************
//////////////////////////////////////////////////////////////////////////////

function mailme(name,domain,subject){
    addr = "mailto:" + name + "@";
    addr+=domain;
    if(mailme.arguments.length>2){
        addr+="?subject=" + subject;
    }
    window.location.href=addr;
}	

///////////////////////////////////////////////////////////////////////////////
//************************    Hover-Effekte      ********************************
///////////////////////////////////////////////////////////////////////////////


function hover (n,b){
	var i = getElem('id',n,null);
	s = i.src;
	if(s.indexOf('_a.gif')>0)return;
	if(b){
		i.src =(s.substring(0,s.lastIndexOf('.'))) + '_h.gif';
	}
	else {
		i.src =(s.substring(0,s.lastIndexOf('.')-2)) + '.gif';
	}
}

function hoverin (bildnr){
window.document.images[bildnr].src='bilder/rspeaker.gif';
}
function hoverout (bildnr){
window.document.images[bildnr].src='bilder/speaker.gif';
}

//////////////////////////////////////////////////////////////////////////////////
//**************** Navigation ***************************************************
//////////////////////////////////////////////////////////////////////////////////

function nav(currimg){
	if(currimg=='kontakt'){
		if (window.location.search != '') {
			error = window.location.search.split('=');
			if (error[1] == 'band') 
				alert('Bitte geben Sie den Bandnamen in das Feld Spamschutz ein');
			if (error[1] == 'email') 
				alert('Bitte geben Sie eine Mailadresse an');
		}
	}
	var akt = document.getElementById(currimg);
	akt.src = 'bilder/' + currimg + '_a.gif';
}		 

