// TSI JavaScript Funktionen
// nutzen jQuery - Framework - Funktionalitaeten

// globale Javascript Variablen
// wird für Container mit rotierenden Inhalten im 
// Mandant BC verwendet
var containerArray = new Array();

/* 
 * Methode rotiert die Inhalte eines globalen Arrays, welches <div> - Elemente enthaelt und zeigt die ersten
 * nutzt: jQuery - Funktionalitaeten fuer Zugriff auf Elemente
 * ContainerID: ID des Funktionscontainers
 * numVisibleObjs: Anzahl der gleichzeitig  angezeigten Containerelemente  
 */
function rotateContents(ContainerID, numVisibleObjs){
  rotate(getBoxArray(ContainerID),-numVisibleObjs);
  jQuery(getBoxArray(ContainerID)).each(function (i) {
    var $hasContentToHide = jQuery(this).children().eq(0).is(".hideDummyTeaser");
    if(i < numVisibleObjs && !$hasContentToHide  ){
      jQuery(this).show();
    } else {
      jQuery(this).hide();
    }
  });
}

/*
 * Methode initialisiert alle Elemente eines Containers, welche rotierend angezeigt werden sollen
 * nutzt: jQuery - Funktionalitaeten fuer Zugriff auf Elemente
 * ContainerID: ID des Funktionscontainers
 * numVisibleObjs: Anzahl der gleichzeitig  angezeigten Containerelemente
 * cssClassName: Klassenname der relevanten css - Klasse
*/
function initRotateBoxes(cssClassName, containerID, numVisibleObjs){
  //selector = "#" + containerID + " > " + "." + cssClassName;
  arrCssClasses = cssClassName.split(" ");  
  selector = "."+arrCssClasses[arrCssClasses.length-1];
  //alert(selector);
  setBoxArray(containerID,jQuery(selector)); 
  // zuerst alle Boxen verstecken
  jQuery(getBoxArray(containerID)).each(function (i) {
    jQuery(this).hide();
  });
  // dann die sichtbaren anzeigen	
  jQuery(getBoxArray(containerID)).each(function (i) {
    var $hasContentToHide = jQuery(this).children().eq(0).is(".hideDummyTeaser");
    if(i < numVisibleObjs && !$hasContentToHide){
      jQuery(this).show();
    }
  });
}


/* Hilfsfunktionen fuer rotierende Teaserboxen */

// Funktion rotiert intern die Elemente eines Arrays durch
function rotate(a /*array*/, p /* integer, positive integer rotate to the right, negative to the left... */){ //v1.0
  for(var l = a.length, p = (Math.abs(p) >= l && (p %= l), p < 0 && (p += l), p), i, x; p; p = (Math.ceil(l / p) - 1) * p - l + (l = p))
        for(i = l; i > p; x = a[--i], a[i] = a[i - p], a[i - p] = x);
  return a;
};

// Methode liefert ein Array mit <div> - Elementen mit zu rotierende Inhalten zurueck
function getBoxArray(ContainerID) {
  if (containerArray[ContainerID] == null) {
    containerArray[ContainerID] = new Array();
  } 
  return containerArray[ContainerID];
}

// Methode initialisiert ein globales assoziatives Array mit einem Array von <div> - Elementen  
function setBoxArray(containerID,boxArray){
  containerArray[containerID] = boxArray;
}


/*
* nutzt Jquery- Funktionalitäten (Plugin: jQuery Form Plugin v2.12)
* Methode wird beim Product Formular Info&Beratung verwendet, um nach Validierungsfehlern
* Formularinhalte dynamisch per Ajax in ein DIV zu laden bzw. im Erfolgsfall die Erfolgseite
* anzuzeigen (Workarround bzgl. Tabulator - Navigation beim Produkt) 
*/
function registerAjaxForm(submitFormId,divAjaxId) {
   var submitFormIdSelector = '#' + submitFormId;
   var divAjaxIdSelector = '#' + divAjaxId;
   // attach handler to form's submit event 
   jQuery(submitFormIdSelector).submit(function() { 
      // submit the form 
      // prepare Options Object 
      var options = {
                      target:    divAjaxIdSelector, 
    	 success:   function() {
                          registerAjaxForm(submitFormId,divAjaxId);
	     window.scrollTo(0,280);
		 try {
			if(formtool) {
				formtool.init();
			}
			if(crossDomainAjax) {
				crossDomainAjax.setAlternateContactFormHeader(crossDomainAjaxConstants.TARGET);
			}
		 }catch(e) {/*Nothimg*/}
	 } 
      }; 
   
      jQuery(this).ajaxSubmit(options); 
      // return false to prevent normal browser submit and page navigation      
      return false; 
   });
}

/*
* nutzt Jquery- Funktionalitäten (Plugin: jQuery Form Plugin v2.12)
* Methode initialisiert beim ersten Seitenaufruf bei einem Product Formular Info&Beratung einen DIV - Container, 
* um nach Validierungsfehlern  Formularinhalte dynamisch per Ajax in ein DIV zu laden bzw. im Erfolgsfall die Erfolgseite
* anzuzeigen (Workarround bzgl. Tabulator - Navigation beim Produkt) 
*/
function registerAForm(submitFormId, divAjaxId) {
   var submitFormIdSelector = '#' +  submitFormId;
   var divAjaxIdSelector = '#' + divAjaxId;
   jQuery(document).ready(function() { 
      // attach handler to form's submit event 
     jQuery(submitFormIdSelector).submit(function() { 
         // submit the form 
         // prepare Options Object 
         var options = { 
    	    target:   divAjaxIdSelector, 
    	    success:  function(){
				if(checkBrowserName('MSIE') || checkBrowserName('Opera') ){
					registerAjaxForm(submitFormId,divAjaxId);
				}	
                window.scrollTo(0,280);
				try {
					if(formtool) {
						formtool.init();
					}
					if(crossDomainAjax) {
						crossDomainAjax.setAlternateContactFormHeader(crossDomainAjaxConstants.TARGET);
					}
				}catch(e) {/*Nothimg*/}
		    } 
         }; 
         
         jQuery(this).ajaxSubmit(options); 
         // return false to prevent normal browser submit and page navigation 
         return false; 
      });
   });
  
}

/* --------------- Methoden fuer Taxonomy-AjaxContainer --------------- */

/*
* Methode realisiert Ajax-Request
* wenn Ajax-Request fertig --> HTML-Inhalt hinter Div schreiben, Ajax-Div loeschen
* bringt Problem beim Rotieren, deshalb auskommentiert
* kann bei jQuery-Version 1.2 gegen replaceWith() getauscht werden
*/
function doAjax(divId,url) {
  jQuery(document).ready(function(){
     /* jQuery-Version 1.1.1 */
     /*jQuery(divId).load(url,null,
         function (responseText, textStatus, XMLHttpRequest) {
           //htmlCode = $(divId).html();
           //$(divId).after(htmlCode);
           //$(divId).remove();
         });*/
     /* jQuery-Version 1.2.6 */
     // Workaround fuer Startseite, evtl. dynamisieren
     if(divId == "#ajax_554914" || divId == "#ajax_564608"){
       jQuery(divId).addClass("appetizerBox");
       jQuery(divId).css("display","none");
     }
     jQuery.ajax({
       url: url,
       cache: true,
       success: function(html){
      // alert(html.substring(10,12));
        if (html.match(/nC/))
	html = html.replace(/nC/,"");
         jQuery(divId).replaceWith(html);
       }
     })
  });
}
/*
* Methode blendet Ajax-Div und Reiter-Divs wieder ein
* Array entthaelt ID des Ajax-Divs und
* ggf. IDs von Reiter bzw. ReiterContent
* wenn Verwendung von replaceWith --> Ajax-Div ausblenden unnoetig
*/
function successAjax(divIds) {
for (var i = 0; i < divIds.length; i++)
   jQuery(divIds[i]).removeClass("nodisplay");
}


// Boxenhoehe auf einer Zeile, jQuery erforderlich
function boxHeight(id) {
  jQuery(document).ready(function(){
    h = 0;
    count = 0;
    divName = "div#" + id + "> div";
    jQuery(divName).each(function(i) {
      if(this.offsetHeight > h) {
        h = this.offsetHeight;
      }
      count++;
    })
    
    if(count > 1) {  
      jQuery(divName).css("height",h-2);
      // nicht fuer Grids
      jQuery(divName+".lGrid").css("height","auto");
      jQuery(divName+".mGrid").css("height","auto");
      jQuery(divName+".sGrid").css("height","auto");
      jQuery(divName+".xsGrid").css("height","auto");
      // SF Medianarchiv
      jQuery(divName + " div.tabCo div.mBox").css("height",h-36);
    }
  });
}