var DEBUG = false;

/**
* Cette classe sert à faire la gestion d'une pizza et gérer sa configuration.
*
*/

/**
* Class constructor pour une instance de SpecialPizzaManager.
*/
function SpecialPizzaManager(html_index, sizes, crusts, products) {
  /*Instance du topping manager pour cette pizza*/
  this.toppingManager ;

  /*Les format disponible et leur prix */
  this.sizes = sizes ;

  /*Les croûte disponible et leur prix par format*/
  this.crusts = crusts ;

  /**Liste de produits possible poru cette item*/
  this.products = products;

  //--------------------
  //Variable pour la mémorisation des sélections de l'utilisateurs
  //--------------------
  /*Format sélectionné*/
  this.selected_size ;

  /*Croûte sélectionnée*/
  this.selected_crust ;

  /*Croûte sélectionnée*/
  this.selected_recipe ;


  //--------------------
  // Variable pour les nom des formulaires et des liste de bouton radio de sélection.
  //--------------------
  this.form_name = 'edit_special' ;

  /*nom de référence pour les bouton radio de sélection de la recette*/
  this.radio_recipe_name = 'pizza[' + html_index + '][products_id]' ;

  /*nom de référence pour les bouton radio de sélection du format*/
  this.radio_size_name = 'pizza[' + html_index + '][5]' ;

  /* nom de référence pour les bouton radio de sélection de la croûte.*/
  this.radio_crust_name = 'pizza[' + html_index + '][3]' ;

  this.radio_recipe_name = "pizza[" + html_index + "][products]" ;

  /* id de l'élément pour l'affichage du prix*/
  this.price_label = "pizza[" + html_index + "][pizza_total_price]";

}//Fin Pizza manager


/******************* DÉFINITION DES FONCTIONS DE PIZZAMANAGER *******************/
/**
* fonction pour rafraichir l'affichage du prix de la pizza total avec garniture.
*/
SpecialPizzaManager.prototype.refreshPrice = function(){
  //alert();
  var crustPrice ;
  if (!this.selected_crust > 0 || this.crusts[this.selected_size][this.selected_crust]<0)
    crustPrice = 0 ;
  else
    crustPrice = this.crusts[this.selected_size][this.selected_crust];

  var totalPrice = this.toppingManager.getPrice() + 1*this.sizes[this.selected_size] + 1*crustPrice ;
  //alert("price = " + this.toppingManager.getPrice());
  totalPrice = parseFloat(totalPrice) ;
  var html ;
  if (DEBUG==true)
    var html = "<br>Size : " + parseFloat(this.sizes[this.selected_size]).toFixed(2) + " $<br>Crust : " + crustPrice + " $<br>Garnitures : " + this.toppingManager.getPrice() + " $<br>Total : " + totalPrice.toFixed(2)  ;
  else
    var html = totalPrice.toFixed(2)  ;
  document.getElementById(this.price_label).innerHTML = html  ;
}

/**
* rafraichi l'état (enabled/disabled) des boutons de sélection de croûte
*/
SpecialPizzaManager.prototype.refreshOptions = function(){
  var crust = document.forms[this.form_name][this.radio_crust_name] ;
  //active ou désactive les valeurs de croûte approprié
  for (var c=0 ; c<crust.length; c++){
    if (this.crusts[this.selected_size][crust[c].value] < 0){
      //desactive cette croûte
      if (crust[c].checked == true){
        crust[c].checked = false;
        this.selected_crust = -1 ; //reset la croûte sélectionnée
      }
      crust[c].disabled = true ;

    }else{
      crust[c].disabled = false;
    }
  }

  //si aucune croûte n'est sélectionné, sélectionne l apremier activé que l'on trouve
  if (this.selected_crust < 0){
    for (var c=0; c < crust.length; c++){
      if (crust[c].disabled == false){
        this.selected_crust = crust[c].value ;
        crust[c].checked = true ;
      }
    }
  }
}

/**
* rafraichi l'état (enabled/disabled) des boutons de sélection de croûte
*/
SpecialPizzaManager.prototype.refreshSize = function(){

  var sizes = document.forms[this.form_name][this.radio_size_name] ;
  if (!sizes.length ){
    this.selected_size = sizes.value;
    return;
  }
  //active ou désactive les valeurs de croûte approprié
  for (var c=0 ; c<sizes.length; c++){
    if (this.crusts[sizes[c].value][this.selected_crust] < 0){
      //desactive ce format
      if (sizes[c].checked == true){
        sizes[c].checked = false;
        this.selected_size = -1 ; //reset la croûte sélectionnée
      }
      sizes[c].disabled = true ;

    }else{
      sizes[c].disabled = false;
    }
  }

  //si aucune croûte n'est sélectionné, sélectionne l apremier activé que l'on trouve
  if (this.selected_size < 0){
    for (var c=0; c < sizes.length; c++){
      if (sizes[c].disabled == false){
        this.selected_size = sizes[c].value ;
        sizes[c].checked = true ;
      }
    }
  }
}

/**
* change le format de la pizza pour celui spécifié
*/
SpecialPizzaManager.prototype.setSize = function(){
  /* Code sélection du format qui ajuste les croûte
  var sizeList = document.forms[this.form_name][this.radio_size_name];
  for (var s=0; s < sizeList.length; s++){
    if (sizeList[s].checked)
      this.selected_size = sizeList[s].value ;
  }

  //alert (this.selected_size + "   " + this.selected_crust);
  this.toppingManager.refreshDisplay();
  this.refreshOptions(); //refresh crust selection list
  this.refreshPrice(); //refresh the price label and variable */

  var sizeList = document.forms[this.form_name][this.radio_size_name];
  for (var c=0; c < sizeList.length; c++){
    if (sizeList[c].checked)
      this.selected_size = sizeList[c].value ;
  }

  this.refreshPrice() ; //refresh the price label and variable
}



/**
* Change la croûte pour celle spécifié
*/
SpecialPizzaManager.prototype.setCrust = function(){
  /* Code sélection de croûte straight
  var crustList = document.forms[this.form_name][this.radio_crust_name];
  for (var c=0; c < crustList.length; c++){
    if (crustList[c].checked)
      this.selected_crust = crustList[c].value ;
  }

  this.refreshPrice() ; //refresh the price label and variable  */

  var crustList = document.forms[this.form_name][this.radio_crust_name];

  for (var s=0; s < crustList.length; s++){
    if (crustList[s].checked){
      this.selected_crust = crustList[s].value ;
    }
  }

  //alert (this.selected_size + "   " + this.selected_crust);
  this.refreshSize(); //refresh crust selection list
  this.toppingManager.refreshDisplay();
  this.refreshPrice(); //refresh the price label and variable
}

/**
* Génère le code HTML pour l'édition de cette pizza
*/
SpecialPizzaManager.prototype.outputHTML = function(){

    var html = "";
    html += "<form name='" + this.formName + "' method='POST' action='pizza_info.php'>" ;
    document.write("HELLOWORLD");
    document.write(html);
}


/**
* Gère la recette pour cet pizza, i.e. Greques, All Dressed, Etc.
*/
SpecialPizzaManager.prototype.setRecipe = function(){

  var recipeList = document.forms[this.form_name][this.radio_recipe_name];

  if (!recipeList.length){
    this.selected_recipe = recipeList.value ;
  }
  else{
    for (var r=0; r < recipeList.length; r++){
      if (recipeList[r].checked){
        this.selected_recipe = recipeList[r].value ;
      }
    }
  }

  this.toppingManager.changeRecipe(this.products[this.selected_recipe]['toppings']);
  this.toppingManager.refreshDisplay();
  this.refreshPrice(); //refresh the price label and variable
}
