function Carrello(){
  var carrello = new Array()
  var carrello_bkp = new Array()
  
  var obj = this //Contiene un riferimento alla propria istanza
  var carItemIcon = bUrl+'immagini/icon_verde.gif'
  var carNoItemIcon = bUrl+'immagini/icon_clear.gif'
  var test1 = 'test1'
  this.test2 = 'test2'

  var acquistoShown = false
  this.acquistoHS = function(){
    acquistoShown = !acquistoShown
	$('prezzo_acquisto').toggle()
	$('rie_acquisto').toggle()
	$('totPrezzoAcquisto').toggle()
    for(var x = 0; $('prezzo_acquisto_'+x) != undefined || $('rie_noScelta_'+x) != undefined; x++){
	  if($('prezzo_acquisto_'+x) != undefined) $('prezzo_acquisto_'+x).toggle()
	  else{
	    if(acquistoShown) $('rie_noScelta_'+x).colSpan = ($('rie_noScelta_'+x).colSpan+1)*1
		else $('rie_noScelta_'+x).colSpan = ($('rie_noScelta_'+x).colSpan-1)*1
	  }
	}
	
	return false
  }
  
  this.openCategoria = function(categoria){
    $('areaCentrale').innerHTML = ""
    return cngPage($(categoria+'_cat').href, 'areaTop', categoria)
  }
  
  this.openProdotto = function(categoria){
    this.openCategoria(categoria)
    return cngPage($(categoria+'_marca').href, 'areaCentrale', categoria, false)
  }
  
  this.remProdotto = function(cat){
    return ajRequest(bUrl+'carrello/remProdotto', remFromCarrDone, 'cat='+URLEncode(cat))
  }
  
  function remFromCarrDone(res){
	var cat = res.responseText

	$(cat+'_icon').src = carNoItemIcon
	$(cat+'_marca_modello').hide()
	
	carrello_bkp = carrello.kCopy()
	delete carrello[cat]
  }
  
  this.salva = function(confName){
    return ajRequest(bUrl+'carrello/salva', salvaDone, 'name='+URLEncode($('confNome').value))
  }
  
  function salvaDone(res){
    if(res.responseText == res.responseText*1){
	  for(var x = 0; $('confId'+x) != undefined; x++)
	    if($('confId'+x).value == res.responseText){$('confNome'+x).value = $('confNome').value; break;}
	  if($('confId'+x) == undefined && $('conf_configurazioni') != undefined) cngPage('/prods/area_configurazioni/index', 'areaCentrale', 'area privata')
	  alert('Configurazione salvata')
	}
	else alert("Problemi! Configurazione NON salvata")
  }
  
  this.loadCarr = function(carrId){
    if(carrId == undefined) carrId = false

    return ajRequest(bUrl+'carrello/getCarrello', loadCarrDone, 'id='+carrId)
  }
  
  function loadCarrDone(res){
    for(var cat in carrello)
	  if(typeof carrello[cat] == 'string' && $(cat+'_marca_modello') != undefined){
	    $(cat+'_icon').src = carNoItemIcon
	    $(cat+'_marca_modello').hide()
	  }

	carrello_bkp = carrello.kCopy()
	
	var tmpCarr = new Array()
	carrello = new Array()
    tmpCarr = URL2Array(res.responseText)

	for(var x = 0; tmpCarr['cat'+x] != undefined; x++){
	  var cat = URLEncode(tmpCarr['cat'+x])
	  carrello[cat] = tmpCarr['cat'+x+'_codice']
	  $(cat+'_marca').innerHTML = tmpCarr['cat'+x+'_marca']
	  $(cat+'_marca').href = bUrl+'categoria_prodotto/'+cat+'/'+carrello[cat]
	  $(cat+'_modello').innerHTML = tmpCarr['cat'+x+'_modello']
	  $(cat+'_modello').href = bUrl+'categoria_prodotto/'+cat+'/'+carrello[cat]
	  if(tmpCarr['cat'+x+'_incompatib'] == '1') $(cat+'_incompatib').show()
	  else $(cat+'_incompatib').hide()
	  $(cat+'_marca_modello').show()
	  $(cat+'_icon').src = carItemIcon
	}
	
	if($('confNome') != undefined) $('confNome').value = tmpCarr['conf_nome']
	else if($('confNome_span') != undefined) $('confNome_span').innerHTML = tmpCarr['conf_nome']
  }
  
  this.copyConf = function(carrId){
    if(carrId == undefined) carrId = false

    return ajRequest(bUrl+'carrello/copyConf', copyConfDone, 'id='+carrId)
  }
  
  function copyConfDone(res){
    cngPage('/prods/area_configurazioni/index', 'areaCentrale', 'area privata')
  }
  
  this.undo = function(){
    return ajRequest(bUrl+'carrello/undo', loadCarrDone)
  }
  
  this.svuota = function(){
    return ajRequest(bUrl+'carrello/svuota', svuotaDone)
  }

  function svuotaDone(res){
    carrello_bkp = carrello.kCopy()
    
	loadCarrDone(res)
  }
  
  this.add2Carrello = function(pCode, var1, var2){
    var urlData = ''
	if($('add2CarrDone') != undefined) $('add2CarrDone').hide()
	//urlData = 'code='+URLEncode(pCode)
	urlData = 'codice='+URLEncode(pCode)
	if($('variante1') != undefined) urlData += '&var1='+URLEncode($('variante1').value)
	else if(var1 != undefined) urlData += '&var1='+URLEncode(var1)
	if($('variante2') != undefined) urlData += '&var2='+URLEncode($('variante2').value)
	else if(var2 != undefined) urlData += '&var2='+URLEncode(var2)

    return ajRequest(bUrl+'categoria_prodotto/add2Carrello', add2CarrelloDone, urlData)
  }

  function add2CarrelloDone(res){
    obj.loadCarr()
	if($('add2CarrDone') != undefined) $('add2CarrDone').show()
  }
  
  this.riepilogoVarCng = function(pCode, campo, num){
    var var1 = ($('variante1_'+num) == undefined)?undefined:$('variante1_'+num).value
    var var2 = ($('variante2_'+num) == undefined)?undefined:$('variante2_'+num).value
    obj.add2Carrello(pCode, var1, var2)
	obj.riepilogoRegistra(campo, num)
  }
  
  this.riepilogoRegistra = function(campo, num){
    var urlData = "", valore

    if(num == undefined) valore = $(campo).value
	else{
      valore = $(campo+'_'+num).value
	  urlData = "categoria="+URLEncode($('categoria_'+num).innerHTML)+"&num="+num+"&"
	  if(campo == 'attivo' && !$(campo+'_'+num).checked) valore = '0'
	}
	
    urlData += "campo="+URLEncode(campo)+"&valore="+URLEncode(valore)
	return ajRequest(bUrl+'riepilogo/salva', riepilogoRegistraDone, urlData)
  }
  
  function riepilogoRegistraDone(res){
	  //alert(res.responseText)
    if(res.responseText == '') return;
    var resData = URL2Array(res.responseText)
	
	if(resData['num'] != undefined){
	  var num = resData['num']
	  $('peso_'+num).innerHTML = resData['peso']
	  $('prezzo_listino_'+num).innerHTML = resData['prezzo_listino']
	  if($('sconto_'+num).value == undefined) $('sconto_'+num).innerHTML = resData['sconto']
	  else $('sconto_'+num).value = resData['sconto']
	  if($('prezzo_scontato_'+num).value == undefined) $('prezzo_scontato_'+num).innerHTML = resData['prezzo_scontato']
	  else $('prezzo_scontato_'+num).value = resData['prezzo_scontato']
	}
	
	$('totPeso').innerHTML = resData['totPeso']
	$('totPrezzo').innerHTML = resData['totPrezzo']
	if($('totPrezzoAcquisto') != undefined) $('totPrezzoAcquisto').innerHTML = resData['totPrezzoAcquisto']
	$('totSconto').innerHTML = resData['totSconto']
	$('totPrezzoScontato').innerHTML = resData['totPrezzoScontato']
	
	if(resData['usaScontoOfferta'] != '1') $('scontoOffertaTR').hide()
	else{
	  if($('scontoOfferta').value == undefined) $('scontoOfferta').innerHTML = resData['scontoOfferta']
	  else $('scontoOfferta').value = resData['scontoOfferta']
	  if($('prezzoScontatoOfferta').value == undefined) $('prezzoScontatoOfferta').innerHTML = resData['prezzoScontatoOfferta']
	  else $('prezzoScontatoOfferta').value = resData['prezzoScontatoOfferta']
	  $('scontoOffertaTR').show()
	}
  }

  this.setScontoOfferta = function(){
    var totPrezzoScontato = $('totPrezzoScontato').value.replace(",", ".")
    var prezzoScontatoOfferta = $('prezzoScontatoOfferta').value.replace(",", ".")
    var sconto = 100-roundTo((prezzoScontatoOfferta/totPrezzoScontato)*100, 1)
  
    $('scontoOfferta').value = sconto
  }
  
  this.setSconto = function(num){
    var valore = $('confValore'+num).value.replace(",", ".")
    var valoreOrig = $('confValoreOrig'+num).value
    var sconto = 100-roundTo((valore/valoreOrig)*100, 1)
  
    $('confSconto'+num).value = sconto
  }
  
  this.setValore = function(num){
    var sconto = roundTo($('confSconto'+num).value.replace(",", "."), 1)
    var valoreOrig = $('confValoreOrig'+num).value
    var valore = roundTo(valoreOrig-(sconto*valoreOrig)/100, 2)+""
  
    $('confValore'+num).value = valore.replace(".", ",")
  }
  
  this.delConfigurazione = function(confId){
    ajRequest(bUrl+'area_configurazioni/elimina', delConfigurazioneDone, 'id='+confId)
  }
  
  function delConfigurazioneDone(res){
 	for(var x = 0; $('confId'+x) != undefined; x++)
	  if($('confId'+x).value == res.responseText){
	    $('conf'+x).hide()
		if($('confOrdinamento'+x) != undefined) $('confOrdinamento'+x).name = "eliminato"
		$('confNome'+x).name = "eliminato"
		$('confId'+x).name = "eliminato"
		if($('confValore'+x) != undefined) $('confValore'+x).name = "eliminato"
		if($('confValoreOrig'+x) != undefined) $('confValoreOrig'+x).name = "eliminato"
		break;
	  }
 }

  this.saveConfigurazioni = function(frm){
    return ajRequest(bUrl+'area_configurazioni/salvaTutte', saveConfigurazioniDone, Form.serialize(frm))
  }
  
  function saveConfigurazioniDone(res){
    $('confNome').value = res.responseText
    alert('Configurazioni salvate')
  }
  
  this.sendPreventivo = function(frm){
    //Controllo i campi del FORM
    if(frm.nome.value.Trim()=="" || 
       frm.cognome.value.Trim()=="" || 
	   frm.mail.value.Trim()==""){
      alert("Nome, cognome ed indirizzo mail, sono campi obbligatori");
      return false;
    }

    return ajRequest(bUrl+'invio_preventivo/sendPreventivo', sendPreventivoDone, Form.serialize(frm))
  }

  function sendPreventivoDone(res){
    if(res.responseText == 0) alert("Spiacenti: problemi nell'invio del preventivo")
    else alert("Preventivo inviato correttamente")
  }
}