//------------------------------------------------------
// AJAX: Objekt für Anfragenkette
//------------------------------------------------------

function SeitenRequest(container_id, php_datei, bereich) {
	this.container_id = container_id;
	this.php_datei = php_datei;
	this.bereich = bereich;
}

//------------------------------------------------------
// AJAX: Servicecfunktionen
//------------------------------------------------------
  
function AjaxChain(){

  // Array[SeitenRequest] 
  this.ajax_chain_list = new Array();
  this.current_container_id = null;
  
  // Fügt eine Anfrage der Lsite hinzu
  // @container_id : ID des Elements indem die Antwort veröffentlicht wird.
  // @php_datei : Datei die auf dem Server abgefragt wird.
  // @bereich : Bereichswert der evt. in der Datei verarbeitet wird.
  AjaxChain.prototype.add = function(container_id, php_datei, bereich){ 
    this.ajax_chain_list.push(new SeitenRequest(container_id, php_datei, bereich));
  }

  // Arbeitet die nächste Anfrage aus der Kette ab
  AjaxChain.prototype.worker = function(){
    AjaxChain.current_container_id = null;
    if(isset(this.ajax_chain_list)){
      if(this.ajax_chain_list.length > 0){
        var SeitenRequest = this.ajax_chain_list.pop();
        if(isset(SeitenRequest)){
          this.current_container_id = SeitenRequest.container_id;
          // Lädt Datei mit Bereichsparameter in das Element mit der ID
          ajax_refresh_container(SeitenRequest.container_id, SeitenRequest.php_datei, SeitenRequest.bereich);
        }
      }
    }
  }
  
  // Füllt die ChainList je nach Menüwechsel
  AjaxChain.prototype.change_menue = function(menue){
    switch(menue){
      case "anmeldung": 
        this.add("menue_container_1", "spielmenue/ergebnisse.php", "liveticker");
        break;
      case "admin": 
        this.add("menue_container_1", "spielmenue/admin.php", "admin");
        break;
      case "ergebnisse": 
        this.add("menue_container_1", "spielmenue/ergebnisse.php", "ergebnisse");
        break;
      case "auswertung": 
        this.add("menue_container_1", "spielmenue/auswertung.php", "auswertung");
        break;
      case "profil": 
        this.add("menue_container_1", "spielmenue/profil.php", "profil");
        break;
      case "tippabgabe": 
        this.add("menue_container_1", "spielmenue/tippabgabe.php", "tippabgabe");
        break;
      case "tippgruppen": 
        this.add("menue_container_1", "spielmenue/tippgruppen.php", "tippgruppen");
        break;
      default: break;
    }
    this.add("right_container_werbung", "menue/werbung.php", "werbung");
    this.worker();
  }
  
}

var AjaxChain = new AjaxChain();


//------------------------------------------------------
// AJAX: Ausführende Funktionen - Lädt eine ganze Seite
//------------------------------------------------------
  
// Fragt per Ajax den neuen Inhalt für den Informationsbereich ab
function ajax_refresh_container(container_id, php_datei, bereich){
  if((AjaxChain.current_container_id == null || !isset(AjaxChain.current_container_id)) && isset(container_id))
    AjaxChain.current_container_id = container_id;
     
  var parameter = "";
  // Formularfelder alle mitsenden
  parameter += doGet_FormDataParameters();

  if(isset(ajax_refresh_container.arguments)){
    for (var i=3; i<ajax_refresh_container.arguments.length-1; i+=2)
      parameter += "&"+ajax_refresh_container.arguments[i]+"="+ajax_refresh_container.arguments[i+1];
  }
  if(isset(php_datei))
    parameter += "&seite="+php_datei;
  if(isset(bereich))
    parameter += "&bereich="+bereich;

  WebService.send("./webservices/siteservices.php", parameter, ajax_refresh_containerInnerHTML);    
}

// Füllt das Menü mit dem übergebenen Bereich
// Das Menü ist der Informationsbereich
function ajax_refresh_containerInnerHTML(responseText){
  var objekt = null;
  if(isset(AjaxChain.current_container_id)){
    objekt = document.getElementById(AjaxChain.current_container_id);
  } else objekt = document.getElementById("menue_container_1");
      
  objekt.innerHTML = responseText;
  AjaxChain.worker();
}

//------------------------------------------------------
// AJAX: Ausführende Funktionen - Führt eine Aktion aus
//------------------------------------------------------

function ajax_execute_aktion(aktion){
  var parameter = "";
  // Formularfelder alle mitsenden
  parameter += doGet_FormDataParameters();

  if(isset(ajax_execute_aktion.arguments)){
    for (var i=1; i<ajax_execute_aktion.arguments.length-1; i+=2)
      parameter += "&"+ajax_execute_aktion.arguments[i]+"="+ajax_execute_aktion.arguments[i+1];
  }
  if(isset(aktion))
    parameter += "&aktion="+aktion;
    
  WebService.send("./webservices/fktservices.php", parameter, ajax_execute_aktionResult);
}

// Aktionsausführung mit Bestätigung
function ajax_execute_aktion_confirm(aktion, text){
  var confirm_box = window.confirm(text);
  if(confirm_box){ 
    var parameter = "";
    // Formularfelder alle mitsenden
    parameter += doGet_FormDataParameters();
  
    if(isset(ajax_execute_aktion_confirm.arguments)){
      for (var i=1; i<ajax_execute_aktion_confirm.arguments.length-1; i+=2)
        parameter += "&"+ajax_execute_aktion_confirm.arguments[i]+"="+ajax_execute_aktion_confirm.arguments[i+1];
    }
    if(isset(aktion))
      parameter += "&aktion="+aktion;
      
    WebService.send("./webservices/fktservices.php", parameter, ajax_execute_aktionResult);  
  }    
}

function ajax_execute_aktionResult(responseText){
  var obj = eval("("+responseText+")");
  // Fehlermeldung ausgeben
  if(isset(obj.errors)){ 
    Errors.setErrors(obj.errors);
    // Meldungen auf GUI ausgeben
    Errors.setMessages();
  }

  // Zu ladende Menues einreihen      
  if(isset(obj.seitenRequests)){
    for(var i=0; i < obj.seitenRequests.length; i++)
      AjaxChain.add(obj.seitenRequests[i].container_id, obj.seitenRequests[i].php_datei, obj.seitenRequests[i].bereich);  
  }
  AjaxChain.worker();
}





//------------------------------------------------------
// AJAX: Alle Formulardaten ermitteln
//------------------------------------------------------

// Liest alle Form Elemente in Form eines Strings aus
// String zur Übergabe mit Ajax
function doGet_FormDataParameters(){
  var parameter = "";
  // Formularfelder alle mitsenden
  for(var i=0; i < document.forms.length; i++){
    
    if(isset(document.forms[i])){
      current_form = document.forms[i];
      
      for (var j=0; j < current_form.elements.length; j++){
        var current_element = current_form.elements[j];
        
        if(current_element.type=="checkbox")
          parameter += "&"+current_element.id+"="+current_element.checked;
          
        else if(current_element.type=="radio"){
          if(current_element.checked)
            parameter += "&"+current_element.id+"="+current_element.value;
            
        } else
          parameter += "&"+current_element.id+"="+current_element.value;
      }
    }
  }
  return parameter;
}

