//---------------//
// Canasta v 2.0 //
//---------------//

//==================================== Objetos Producto =======================================//


//Constructor
//-----------------------------------------------------------------------------------------------
function Producto(codigo, nombre, precio, cantidad, maximo, rubro, cantEmails){
  this.codigo        =  codigo;
  this.nombre        =  nombre;
  this.precio        =  precio;
  this.cantidad      =  cantidad;
  this.rubro			   =  rubro;
  this.cantEmails	   =  cantEmails;
  this.maximo        =  maximo;
  this.incrementar   =  _idPrivadoCanastaJS_incrementar;
  this.modificarCant =  _idPrivadoCanastaJS_modificarCant;
}  

//Métodos
//-----------------------------------------------------------------------------------------------
function _idPrivadoCanastaJS_incrementar(){
  this.cantidad++;
}
  
//-----------------------------------------------------------------------------------------------
function _idPrivadoCanastaJS_modificarCant(valor){
  this.cantidad = valor;
}  


//===================================== Objeto Canasta ========================================//

//Constructor
//-----------------------------------------------------------------------------------------------
function Canasta(){
  this.Arreglo          =  new Array(); 
  this.cantidad         =  0;
  this.totalCompra      =  0;
  this.indice           =  0;
  this.limpiar          =  _idPrivadoCanastaJS_limpiar;
  this.agregarProducto  =  _idPrivadoCanastaJS_agregarProducto;
  this.eliminar         =  _idPrivadoCanastaJS_eliminar;
  this.prodEn           =  _idPrivadoCanastaJS_prodEn;
  this.recalcular       =  _idPrivadoCanastaJS_recalcular;
  this.vaciar           =  _idPrivadoCanastaJS_vaciar;  
  this.listarProds      =  _idPrivadoCanastaJS_listarProds; 
  this.cargarContenido  =  _idPrivadoCanastaJS_cargarContenido;
  this.cantidadDe       =  _idPrivadoCanastaJS_cantidadDe;
  this.maximoDe         =  _idPrivadoCanastaJS_maximoDe;
  this.buscar           =  _idPrivadoCanastaJS_buscar;
  this.agregarUnoA      =  _idPrivadoCanastaJS_agregarUnoA;
}

//Métodos
//-----------------------------------------------------------------------------------------------
function _idPrivadoCanastaJS_limpiar(){
  this.Arreglo = new Array();
  this.cantidad = 0;
  this.indice = 0;
  this.totalCompra = 0;
}

//-----------------------------------------------------------------------------------------------
function _idPrivadoCanastaJS_buscar(codigo){
  var j = 0;
  var prod;
  while(j < this.cantidad  && (prod = this.prodEn(j)).codigo != codigo) j++;
  if(j >= this.cantidad) return "";
  return prod;  
}

//-----------------------------------------------------------------------------------------------
function _idPrivadoCanastaJS_cantidadDe(codigo){
  var prod = this.buscar(codigo); 
  if(prod != "") return prod.cantidad;
  return -1; //Número que indica error : el producto no existe
}

//-----------------------------------------------------------------------------------------------
function _idPrivadoCanastaJS_maximoDe(codigo){
  var prod = this.buscar(codigo); 
  if(prod != "") return prod.maximo;
  return -1; //Número que indica error : el producto no existe
}

//-----------------------------------------------------------------------------------------------
function _idPrivadoCanastaJS_agregarProducto(codigo,nombre,precio, maximo, rubro, cantEmails){   
  var valPrecio = parseFloat(precio);
  this.totalCompra += valPrecio;
  var prod = this.buscar(codigo);
  if(prod == ""){
   this.Arreglo[this.Arreglo.length]=new Producto(codigo, nombre, valPrecio, 1, maximo, rubro, cantEmails);
   this.cantidad++;
  }
  else prod.incrementar();
}  

//-----------------------------------------------------------------------------------------------
function _idPrivadoCanastaJS_listarProds(){
  cadena = "";
  j = 0; 
  while(j < this.cantidad){
    prod = this.prodEn(j);
    cadena += _idPrivadoCanastaJS_convertir(prod.codigo) + "/";
    cadena += _idPrivadoCanastaJS_convertir(prod.precio) + "/";
    cadena += _idPrivadoCanastaJS_convertir(prod.cantidad) + "/";
    cadena += prod.rubro + "/";
    cadena += _idPrivadoCanastaJS_convertir(prod.cantEmails) + "$";    
    j++;
  }   
  if(j != 0){ 
    cadena += _idPrivadoCanastaJS_float_a_cad(this.totalCompra);
  }
  return cadena; 
} 

//-----------------------------------------------------------------------------------------------
function _idPrivadoCanastaJS_cargarContenido(cadena){
  if(cadena != ""){ 
    var codigo, nombre, precio, cantidad;
    var i = 0, j = 0;
    while(true){
      j = cadena.indexOf("/", j);
      codigo = cadena.substring(i,j);
      i = j = j+1;
      j = cadena.indexOf("/", j);
      nombre = cadena.substring(i,j);
      i = j = j+1;
      j = cadena.indexOf("/", j);
      precio = cadena.substring(i,j);
      i = j = j+1;
      j = cadena.indexOf("$", j);
      cantidad = cadena.substring(i,j);
      i = j = j+1;
      this.agregarProducto(parseInt(codigo), nombre, precio);
      (this.prodEn(this.cantidad - 1)).cantidad += parseInt(cantidad) - 1;
      if(cadena.charAt(i) == '*'){
        this.totalCompra = parseFloat(cadena.substring(i+1,cadena.length));
        break;
      }
    }
  }
} 

//-----------------------------------------------------------------------------------------------
function _idPrivadoCanastaJS_vaciar(){  
  this.Arreglo.length = 0;
  this.cantidad = 0; 
}

//-----------------------------------------------------------------------------------------------
function _idPrivadoCanastaJS_prodEn(lugar){
  return this.Arreglo[lugar];
}  

//-----------------------------------------------------------------------------------------------
function _idPrivadoCanastaJS_eliminar(codigo){
  j = 0; 
  while(j < this.cantidad &&  this.Arreglo[j].codigo != codigo) j++;
  if(j <= this.cantidad){
   prod = this.prodEn(j);
   this.totalCompra -= prod.precio * prod.cantidad; 
   this.Arreglo[j] = this.Arreglo[this.Arreglo.length - 1];
   this.Arreglo.length = this.Arreglo.length - 1;
   this.cantidad--;
   if(this.cantidad==0) this.totalCompra = 0; //debido a errores de redondeo
  } 
} 

//-----------------------------------------------------------------------------------------------
function _idPrivadoCanastaJS_recalcular(valor, codigo){
  var prod = this.buscar(codigo);
  if(prod != ""){
   this.totalCompra -= prod.precio * prod.cantidad; 
   prod.modificarCant(parseInt(valor)); 
   this.totalCompra += prod.precio * prod.cantidad;
  }
}

//-----------------------------------------------------------------------------------------------
function _idPrivadoCanastaJS_agregarUnoA(prod){
  prod.incrementar();
}


//-----------------------------------------------------------------------------------------------
function _idPrivadoCanastaJS_convertir(numero){
  var cadenanum = new Number(numero);
  return cadenanum.toString();
}

//-----------------------------------------------------------------------------------------------
function _idPrivadoCanastaJS_float_a_cad(numero){
  var val = Math.round(numero * 100)/100;
  return _idPrivadoCanastaJS_convertir(val);
}

