﻿/*--------------------------------------------< initial >-----------------------------------------*/

     /*Menueinitialisierung bei onLoad*/
    Event.observe(window, 'load', function() {
		  /*Hauptmenu(s) initialisieren*/
		  new MainMenue('fistNavContainer');
		  /*Kopfmenue: Location, Jobs, Imprssum - initialisieren*/
			new HeadMenue('headlinks');
			
			/*!Interim! -> Darf nicht bei load initialisiert werden!!!!!!!!!!! --------> new SubMenue('contentRightContainer');*/
			/*Ladezustand aller Images ueberpruefen*/
			setTimeout('doWatchImg()',300);
		});




/*------------------------------------------< Images auf Ladezustan pruefen >-----------------------------------*/

   /*Kann pruefen, ob alle Images auf der Seite geladen sind (ist gerade fuer die Frontpage wichtig - Andis special wish)
	 WIRD NACH JEDER CONTENTAENDERUNG (Ajax "Success") DURCHGEFUEHRT!!!!!
	 Aufgabe:
	 Wartet bei allen Images deren Style auf visibility:'hidden' steht so lange mit der Anzeige, bis ALLE Images der
	 Seite geladen sind.*/

	 var ImageWatcher = Class.create();
	 ImageWatcher.prototype={
	    initialize:function(){
			  this.counter=0;
			  this.timeouter=null;
			 },
	    imageDelay:function(){
				this.timeouter=setInterval(this.observeImgLoad().bind(this), 1000);
			 },
			
			observeImgLoad:function(){
					this.counter++;
					var dImages=0;
					for(var i=0;i<document.images.length;i++){
					  if(document.images[i].complete){
						  dImages++;
						  //trace($('autor').innerHTML+='<br />'+document.images[i].src+' => geladen');
						 }
					 }
					if(dImages==document.images.length){
					  this.clearMyTimeout();
					  for(var i=0;i<document.images.length;i++){
						  if(document.images[i].style.visibility=='hidden'){
							  document.images[i].style.visibility='visible';
							 }
						 }
					 }
				 if(this.counter>30){
					this.clearMyTimeout();
					try{
					 	  for(var i=0;i<document.images.length;i++){
						  //if(document.images[i].style.visibility=='hidden'){
							  document.images[i].style.visibility='visible';
							 }
						 //}
						}
						catch(e){}
				}
			 },
      clearMyTimeout:function(){			
				if(this.timeouter){clearInterval(this.timeouter);}
				this.counter=0;
			 }		 	    	   		
		};








/*------------------------------------------< Menues >-------------------------------------------------*/







			/*Generelle Menuelement-Klasse*/
			var Menue = Class.create();

				Menue.prototype = {
				  initialize: function() {
				    this.parentObject=false;
						this.overColor= '#333333';
				    this.downColor= false;
				    this.outColor= false;
				    this.onItem=null;
						/*Backenddatei, welche angesprochen werden soll*/
			      this.target=null;
				    /*Alle zu dieser Menügruppe gehoehrenden Buttons*/
						this.group=new Array();
						/*Aktiver (angeklickter) Button*/
						this.onButton=null;
						/*Sollte ein aktives Submenue auf der Seite zu sehen sein, so wird dessen ID hier her gespeichert
						  um es bei einem Query ggf. an den Controller weiter senden zu koennen (dies verhindert, dass bereits
							geladene SubMenues noch ein mal geladen werden.)
					  */
					  this.SubMenueName=false;
				  },
					/*Sammelt alle zu dieser Menuegruppe gehoehrenden Button zusammen und erstellt Verweise auf Diese*/
				  collection: function() {
						/*Anzahl der Kindelemente (span-Tags = Buttons) des Navigations-Hauptcontainers*/
						var buttons=$$('#'+this.parentObject.id+' span[id]');
						for(var i=0; i<buttons.length;i++){
								var buttonItem=buttons[i];
								/*fuegt jedem Mitglied (Button) der Menuegruppe drei EventListener hinzu*/
							  Event.observe(buttonItem.id, 'mouseover', this.Events.bind(this));
							  Event.observe(buttonItem.id, 'mousedown', this.Events.bind(this));
							  Event.observe(buttonItem.id, 'mouseout', this.Events.bind(this));								
								/*Fuellt die "group"-Eigenschaft mit allen Objektverweisen zu den Buttons*/
								this.group.push(buttonItem);
						  }
				   /*Ein naechster Schritt nur dann, wenn es auch buttons in dem Container gibt*/
					 if(this.group.length){return true;}
					 else{this.Error(1);return false;}
					},
					
				 /*Verarbeitung der MouseEvents auf den Buttons*/
				 Events:function(event){
					 switch(event.type){
					    case 'mouseover':if(event.target==this.onButton){return;}
															 $(event.target.id).style.color=this.overColor;
					    break;
					    case 'mouseout':if(event.target==this.onButton){return;}
															$(event.target.id).style.color=this.outColor;
					    break;
					    case 'mousedown':if(this.onButton && this.onButton != event.target){
																$(this.onButton.id).style.color=this.outColor;
																}
															 $(event.target.id).style.color=this.downColor;
															 this.onButton=event.target;
															 this.findSubMenName();
															 this.DoQuery();
							break;						
						}
				 },					
				
				/*AJAX Methode fuer Contentaufruf*/
			  DoQuery:function(){
			  /*Ajax loader anzeigen*/
			   showLoader('show');
			   /*befindet sich ein Submenue auf der Seite*/
				 if(this.SubMenueName){
				  //trace('Submenü: '+this.SubMenueName);
					var queryString='getContent='+this.onButton.id+'&subMenueName='+this.SubMenueName;
//--------------------------->trace(this.SubMenueName+'<br />',true);
					}
				 /*befindet sich KEIN Submenue auf der Seite*/
				 else{
				   //trace('kein Submenü da.')
					 var queryString='getContent='+this.onButton.id;
				  }
				 //trace(queryString);
				 new Ajax.Request(encodeURI('./assets/scripts/controller.php?'+queryString), {
			    method:'post',
			    onFailure:function(t) {
			     this.Error(4);
				    showLoader('hide');
			    },
			    onSuccess: function(t) {
																 },            
			    onComplete:function(t) {
												//trace(t.responseText)
												showLoader('hide');
												/*Gibt im Fehlerfall den um das Wort "ERROR:"
												  bereinigten Fehlertext zurück. ERGO => true!
												  Im erfolgsfall wird false zurückgegeben*/
												var proofError=isError(t.responseText);												
												if(proofError){
												  $('contentLeft').innerHTML=proofError;
												 }
												else{
												  var responsed=t.responseText.evalJSON();
												  /*Liest den in DoQuery erhaltenen JSON-Response aus und verteilt ihn auf die dieversen Aufgaben:
												    - Content in die richigen Container fuellen.
												    - Submenueklassen initialisieren
												    - ggf. Bilder einblenden
												  */
													if(responsed.container){													  
														var contentItems=Object.keys(responsed.container);
													  var content=Object.values(responsed.container);
														for(var i=0;i<contentItems.length;i++){														  
															$(contentItems[i]).innerHTML=content[i];
														 }
													 }
													/*Enthaelt der right container ein Submenue, dass noch nicht (nicht mehr) initialisiert ist, so
													  wird dieses hier initialisiert*/
													if(responsed.initSub){
													  //trace('menü initialisiert');
														new SubMenue('contentRightContainer');
													 }
													else{//trace('KEIN Menü initialisiert');
													}
													
									       /*Images (deren Style auf "hidden" steht, erst dann anzeigen, wenn alle Images geladen sind)
									       s. Klasse ImageWatcher 
												 zeitverzoegert da der Explorer sonst ins stolpern kommt.
												 UND
												 Initialisiert ggf. eine -im neu geladenen Content befindliche- Accorion-Komponente*/									
												 setTimeout('doWatchImg();initAccordion()',300);
													
												 }
					 }
			   });
				},

        /*Welches Submenue wird gerade angezeigt (html-ID)*/
        findSubMenName:function(){
				  /*Gibt es ueberhaupt einen Submenucontainer auf der gegenwaertig angezeigten Seite?*/
					try{
					   if($('contentRightContainer')){
						  var submenue=$('contentRightContainer').down();
							}
						 else{
						 		//trace('false',true);
								this.SubMenueName=false; 
								return false;
							}
					 }
					 catch(e){}
				  if(submenue.tagName=='DIV'&& submenue.id){
					  this.SubMenueName=submenue.id;
					  //trace(submenue.id,true);
					 }
					else{
					 this.SubMenueName=false;
					 //trace('keinSubmenue',true);
					}
				 },




        /*Fehlerausgabe*/
        Error:function(eNum,specialError){
				  var errorText='<div id="contentLeftContainer"><h2>Es ist ein Fehler aufgetreten!</h2>';
					if(specialError){
					  errorText+=specialError;
					  $('contentLeft').innerHTML=errorText+detailText+'</div>';
						return true;
					 }
					
					var detailText='';
					switch(eNum){
					 case 1:detailText='Ein angefordertes Menü/Menüelement kann nicht dargestellt werden.';break;
					 case 2:detailText='Es wurde ZielScript angegeben.';break;
					 case 3:detailText='Der Zielbereich für den angeforderten Content konnte nicht gefunden werden.<br />';break;
					 case 4:detailText='<p>AJAX-&Uuml;bertragungsfehler:<br>Die &Uuml;bertagung wurde erfolglos beendet!<br>Bitte versuchen Sie die Seite erneut zu laden.';break;
					 default:detailText='Leider konnte der Grund für den Fehler nicht ermittelt werden.';
					 }
				  
				  $('contentLeft').innerHTML=errorText+detailText+'</div>';
				 }

				
				};

   /*Hauptmenue - Instanz von Menue Class
	 			 Konstruktor: HTML(<div>-Tag ID des Menue-Umhuellungscontainers)*/
     var MainMenue=Class.create();     
     MainMenue.prototype=Object.extend(new Menue(),{
		  initialize: function(parentDiv) {
			 this.parentObject=$(parentDiv);
			 this.overColor= '#301905';
			 this.downColor= '#301905';
			 this.outColor='#FFFFFF';
			 if(!$(this.parentObject) || !this.collection()){delete this;}	
		  }	
		});

   /*Submenue - Instanz von Menue Class
	 			 Konstruktor: HTML(<div>-Tag ID des SubMenue-Umhuellungscontainers)*/
     var SubMenue=Class.create();     
     SubMenue.prototype=Object.extend(new Menue(),{
		  initialize: function(parentDiv) {
			 this.parentObject=$(parentDiv);
			 this.overColor= '#333333';
			 this.downColor= '#333333';
			 this.outColor='#999999';
			 if(!$(this.parentObject) || !this.collection()){this.Error(1); delete this;}	
		  }	
		});


  /*LinkmenueKlasse (Linkleiste mit "Location", "Jobs", "Impressum")*/
     var HeadMenue=Class.create();     
      HeadMenue.prototype=Object.extend(new Menue(),{
		  initialize: function(parentDiv) {
			 this.parentObject=$(parentDiv);
			 this.overColor= '#333333';
			 this.downColor= '#333333';
			 this.outColor='#999999';
			 if(!$(this.parentObject) || !this.collection()){this.Error(1); delete this;}	
		  }	
		});



/*---------------------------------------< KONTAKTFORMULAR - Validierung >-------------------------------*/
/*Globales KontaktFormular-Objekte
  Prinzip:
          HTML-ID:{
                   Pflichtfeld:(bool)
                   Mindestlaenge: int(Zeichen der Eingabe OHNE Leerzeichen) oder bool
                   Zeichen: regEx (der Erwarteten Mindestanforderung fuer die Eingabe) oder bool
                  }*/
kontaktValids={
               firm:{
                     name:'Firma',
                     pflicht:false,
                     minlaeng:3,
                     pruef:false
                    },
               name_1:{
                     name:'Anrede',
                     pflicht:true,
                     minlaeng:false,
                     pruef:/\b((Herr){1})|((Frau){1})\b/
                    },
               name_2:{
                     name:'Name',
                     pflicht:true,
                     minlaeng:5,
                     pruef:/([A-Za-z])+\W*/im
                    },
              abteil:{
                     name:'Abteilung',
                     pflicht:false,
                     minlaeng:3,
                     pruef:false
                    },
              tel:{
                     name:'Telefonnummer',
                     pflicht:false,
                     minlaeng:3,
                     pruef:/([0-9])+\W*/im
                    },
              fax:{
                     name:'Telefax',
                     prflicht:false,
                     minlaeng:3,
                     pruef:/([0-9])+\W*/im
                   },
              
              mail:{
                     name:'Mailadresse',
                     pflicht:true,
                     minlaeng:false,
                     pruef:/\b[A-Z0-9._%-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b/i
                    },                
               /*Individuelle Nachricht*/
               mess:{
                     name:'Nachricht',
                     pflicht:false,
                     minleang:3,
                     pruef:false
                    }
               }


function doVlaid(e){
 /*Nach erfolgreicher Valitierung zu uebergebender JSON (formatierter) String*/
 var kontakt='{';
 
 /*vor jedem Durchlauf werden zunaechst alle Labels wieder
   auf ihre Originalfarbe zuruckgestellt
   gleiches gilt fuer einen eventuell angezeigten Hinweistext
 */
 $('proofAlert').style.display='none';
 /*Tritt waehrend der Validierung ein Fehler auf, so wird diese Variable auf true gesetzt 
   ... steht sie auf true, so wird der Hinweistext im Seitenkopf eingeblendet*/
 var errors=false;
 var lableLen=$$('label').length;
 for(var i=0;i<lableLen;i++){
   /*labeltag*/
   var theLabel=$$('label')[i];
   /*Zugehoehriges HTML-Input (ID)*/
   var theHtmFor=theLabel.htmlFor;
   /*Zugriff auf die gleichnamige Objekt in "kontaktValids"*/
   var ValidObj=eval('kontaktValids.'+theHtmFor);
   theLabel.style.color='#333333';
   /*Anhand des Labels wird nun auf das dazugehoehrige Feld zugegriffen und anhand 
    der in "kontaktValids" definierten Vorgagen dessen relevanz geprueft
    (natuerlich nur dann, wenn es auch eine Eigenschaft von "kontaktValids" ist)*/
   if(ValidObj){
     /*Pflichtfeld? - Felder, die einen Eintrag enthalten werden automatisch zu Pflichtfeldern*/
     if(ValidObj.pflicht || $(theHtmFor).value.length){
       /*Mindestlaenge*/
       if(ValidObj.minlaeng && $(theHtmFor).value.length < ValidObj.minlaeng){
         theLabel.style.color='red';
         errors=true;
        }
       /*ggf.Regex*/
       if(ValidObj.pruef && !($(theHtmFor).value).match(ValidObj.pruef)){
         theLabel.style.color='red';
         errors=true;
        }       
      }   
    /*Wenn bei der Validierung des Objektes (der Eingabe) keine Fehler aufgetreten sind, so 
      wird diese dem JSON hinzugefuegt*/
      if(!errors){
       //autor($(theHtmFor).value);
       kontakt+='"'+ValidObj.name+'":'+'"'+$(theHtmFor).value+'",';
       }       
    }
  }
 /*steht nun errors auf true, so hat die Validierung einen Fehler ergeben
   und das Hinweisfeld wird eingeblendet*/
  if(errors){
   $('proofAlert').style.display='block';
  }
  /*gibt es KEINE Erros so wird das Formular verarbeitet (s. genMail)*/
  else{
    /*Die Checkbox (Bitte um Kontaktaufnahme wird hier letztendlich) noch einmal gesondert
      abgefragt.*/
    if($('recall').checked){
      kontakt+='"Kontakt":"true"}';
     }
    else{
       kontakt+='"Kontakt":"false"}';
     }
     
     //doRequest('kontakt='+kontakt,'l_Cont','./main_scr/config.php',false);
    
    
    //autor(kontakt);
    genMail(kontakt);
   }
 }


 function genMail(kontakt){

     doMail=new Ajax.Request(encodeURI('./assets/scripts/module/mail_kon.php?data='+kontakt), {
         method: 'post',
               onFailure:function(t){
							  $('kontaktresponse').innerHTML='Die Verbindung zum Mailservice konnte nicht hergestellt werden, bitte versuchen Sie es zu späteren Zeitpunkt erneut.'
							 },
               onComplete:function(t) { 
                $('alertWin01').style.display='block';
								$('kontaktresponse').innerHTML=t.responseText;
								} 
							 }); 
  }
/*<--------------------------------------- Kontaktformular--------------------------------ENDE-----------*/





/*<--------------------------------------- Upload/LogIn Bereich --------------------------------Anfang-----------*/


function doLogValide(form){  
	unvalide=false;
	var alertFeld=$$('tr[name="unvalText"]'); 
	for(var i=0;i<alertFeld.length;i++){
	  var idOf=alertFeld[i].id;
		$(idOf).style.display='none';	
	 }
   var input=$$('#k_login input');
	 for(var i=0;i<input.length;i++){
	   var inInput=input[i].value;
		 if(inInput=='' || inInput.length<5){
		 $('k_notvalide').style.display='block';
		 	unvalide=true;
		 }
	  } 
   
   if(!unvalide){
	  /*hier Ajax engine einfuegen*/
		
 
		 /*------------> Dies wieder entfernen*/
		 $('k_wrongInput').style.display='block';
	  }
   
 }














/*--------------------------< Diverse Funktionen >------------------------------*/
/*dunkelt den HauptcontentContainer ab - bzw. erhaelt diesen wieder*/ 
 function backfade(make) {
 var factor=100;
 switch(make){
   case 'dark':factor=30;break;
   case 'light':factor=100;break;
   default:factor=100;break;
  }
 $('contentLeft').style.opacity=factor/100;
 $('contentLeft').style.MozOpacity=factor/100;
 //$('contentLeft').style.filter = "alpha(opacity="+factor+")";

} 

 /*Positoniert das in "element" uebergebene HTML-Block-Element in der Mitte der Seite
   ACHTUNG! Element muss "absolut" positoniert sein bevor diese Funktion aufgerufen wird.*/
 function setToCenter(element){
	var scto=document.documentElement.scrollTop;
  var winbreit=document.body.clientWidth;
  var winhoch=document.body.clientHeight;
  var messageDimension=$(element).getDimensions();
  var pageCenter=new Array((winbreit/2),(scto/2)+(winhoch/2));
  var newPosLeft=pageCenter[0]-(messageDimension.width/2);
  var newPosTop=pageCenter[1]-(messageDimension.height/2);
  $(element).style.left=newPosLeft+'px';
  $(element).style.top=newPosTop+'px';
} 

 /*Prueft ob ein in "updateData()" zuruckgegebener String eine Fehlermeldung ist.
  Fehlermeldungen werden mit "$ERROR:" auf den ersten sechs Postitionen gekennzeichnet.
  Handelt es sich um eine Fehlermeldung, so wird die eigentliche Fehlermeldung extraiert
  und als String zurueckgereicht.*/
  function isError(responseString){	 
  if (responseString.match(/ERROR:/)) {
    var rs = responseString.split(/ERROR:/);
    return rs[1];
  } else {return false;}		
	 }

  /*Ajax ladeanzeige einblenden-ausblenden*/
			 function showLoader(init){
				 switch(init){
				   case 'show':
				   						 backfade('dark');
											 setToCenter('ajaxload');
											 $('ajaxload').appear();
					 break;
				   case 'hide':
				   						backfade('light'); 
											$('ajaxload').fade();
					 break; 
				  default: backfade('light'); $('ajaxload').fade(); break;
					}
				 }


/*Initialisiert jeweils eine neue Instanz der ImageWatcher Klasse*/
function doWatchImg(){
		  var watchImg=new ImageWatcher();
		  watchImg.observeImgLoad();
 }

/*Wird nach jedem Ajax Request aufgerufen und prueft, ob innerhalb der neu geladenen 
Komponente ein Accordion existiert. Ist dem so, so wird dieses initialisiert*/
function initAccordion(){
 if($('rpt-accordion')){
   /*Sorgt dafuer, dass immer das letzte Toggle des Arccordions beim Start aufgeklappt ist*/
	 var countToggles=document.getElementsByClassName('accordion-toggle');
	 accordion = new Accordion("rpt-accordion",countToggles.length);
  }
  else{return true;}
 }

/*Austausch der Bilder im Oberen Seitenbereich bei Aktivitaeten im !!! Accordion!!! */
 function changeTopImage(src,title){
   var topImage='<img src="./img/'+src+'.jpg" alt="RPT Produktbild" title="'+title+'" border="0" height="215" width="599">'; 
	 $('topImgContainer').innerHTML=topImage;
   return true; 
 }

/*Schliessen des Response Fensters im bereich KONTAKT*/
 function closeInfo(){
   $('alertWin01').style.display='none';
  }

   
/*Autoring-------------------------------------------------------------------------------------------------------------------------->*/


 function trace(str,history){
   var myOutput='Der &Uuml;bergabewert konnte nicht ermittelt werden.'
   switch(str){
     case '!$closeMyAutoring$!':
                                $('autor').innerHTML='&nbsp;';
                                $('autorC').style.display='none';
                                return;
     break;
     case false:myOutput='Der Wert ist boolsh: <b>false</b>.';
     break;
     case true:myOutput='Der Wert ist boolsh: <b>true</b>.';
     break;
     case null:myOutput='Der Wert ist: <b>null</b>';
     break;
     default:myOutput=String(str);
    }

    if(history){
		  $('autor').innerHTML+='<br />'+myOutput;
		 }
		else{
		 		$('autor').innerHTML=myOutput;
		 }

    $('autorC').style.display='block';    
   }

/*<-------------------------------------------------------------------------------------------------------------------------Autoring*/
