// -----------------------------   CADDIE  -------------------------------
var Cadd

Cadd = new CaddObj;  //InitCad()

function InitCad() {
	Cadd.Init()
	//Cadd.TxTVA = 0
	Cadd.Load()
	DispatchQuant()
}

function ActionPrd(O) {
	var OP, O, S, i
	Ob = ElemPAt(O,'Obj');  //alert(Lout(O)+crr+Lout(Ob))
	S = LX(Ob,'Obj');  //alert(S)
	switch (S) {
		case 'Prod':  S = ElemPAt(Ob,'!CodPrd');  ExecAction('FicheProd:'+S);  break
		case 'AppelDia':  Diaporama(LX(O,"Code"), "");  break
		case 'AddCad':		AddCad(Ob,-99);  break
		case 'Plus':  AddCad(Ob,1);  break
		case 'Mns':  	AddCad(Ob,-1);  break
	}
}

App.Change = function(O) {
  //alert(Lout(O))
  if (LX(O,'Obj')=='Quant')  AddCad(O,-99);
}


function CaddObj () {
	this.nb			= 0
	this.all		= []
	this.Prd		= null
	this.TxTVA	= 0.196
	this.TotQte = 0
	this.TVA    = 0
	this.Total  = 0
	this.TotPds = 0
	this.Port		= 0;  this.ModeCalcPort = 'Poids'
	this.colTot = 4
	this.txRem  = 0
	this.Promo	= 0
	this.TotTTC = 0
	this.Init		= Init
	this.Add		= Add
	this.CalcTotal = CalcTotal
	this.CalcQte = CalcQte
	this.Calc = Calc
	this.Load= Load
	this.Sov = Sov
	this.Clear = Clear

	function Init () {
	  if (LID("ChainePort"))  this.ChainePort = LVal("ChainePort")
		//alert("Init ChainePort=" + this.ChainePort)
	}

	function Add (Cle, Quant, Prix, Poids, Rem) {
		var Prd, S
		//if (isNaN(Cle))  id = this.all.length;  else  id = Cle
		Prd = this.all[Cle];  if (!Prd) { Prd = this[this.nb] = new Object;  this.all[Cle] = Prd;  this.nb++ }
		Prd.Cle = Cle;  Prd.Quant = Quant;  Prd.Prix = Prix;  Prd.Poids = zed(Poids);  Prd.Rem = Rem
		Prd.TotPds = Round(Prd.Poids*Quant,2)
		S = Prix*Quant;  if (Rem)  S=S-S*(Rem/100)
		Prd.Total = zed(S,2)
		this.Prd = Prd
	}

	function CalcTotal () {
	  var Tot
		for (var i=0, Tot=0; i<this.nb; i++) {
			Tot+=this[i].Total
		}
		this.CalcPortPoids()
		if (this.txRem) {
			this.Promo = Round(Tot * (this.txRem/100),2)
			Tot -= this.Promo
		}
		this.Total = Tot
		this.CalcPortMnt()
		if (this.Total)  this.Total+= this.Port
	}

	function CalcQte () {
		for (var i=0, Tot=0; i<this.nb; i++)  Tot+=ze(this[i].Quant)
		this.TotQte = Tot
		return Tot
	}

	function Calc () {
		this.CalcTotal();
		if (this.TxTVA)  this.TVA = Round(this.Total * this.TxTVA,2);  else  this.TVA=0
		this.TotTTC = Round(this.Total + this.TVA,2)
	}

	function Load () {
		var T, O, i, l, S
		S = GetCookie('Caddie');  if(!S)  return;   //alert(S)
		O = eval('('+S+')');  //alert(JSONS(O))
		l = O.Liste.length
		for (var i=0; i<l; i++) {
			T = O.Liste[i]
			this.Add(T.Cle, T.Quant, T.Prix, T.Poids, T.Rem)
		}
		this.txRem = O.txRem
		//alert(JSONS(this.all))
	}

	function Sov () {
		var Prd, Cl='', Li='', O
		O = { Liste:this.all, Total:this.Total, TVA:this.TVA, TotTTC:this.TotTTC, Port:this.Port, txRem:this.txRem, Promo:this.Promo, TotPds:this.TotPds }		//;alert(JSONS(this.all)+crr+JSONS(O))
		SetCookie("Caddie", JSO(O),null,'/')
	}

	function Clear() {
		for (var i=0, Tot=0; i<this.nb; i++) {
			this.all[this[i].Cle] = null
			this[i] = null
		}
		this.nb = 0
		this.txRem = this.Promo = 0
	}
}

CaddObj.prototype.CalcPortPoids = function() {
	if (this.ModeCalcPort!='Poids')  return
	var Li, TLi, Port=0, TPor, Pds
	for (var i=0, TotPds=0; i<this.nb; i++) {
		TotPds+= this[i].TotPds
	}
	this.TotPds = Round(TotPds,2)
	if (this.TotPds>0 && this.ChainePort) {
		TPor = this.ChainePort.split(cr)
		for (i=0; i<TPor.length; i++) {
			Li = Trim(TPor[i]);	 if (!Li)  continue;  //alert(Li)
			TLi = Li.split("=")
			if (TLi.length<2) { Port = zed(TLi[0]);  break }
			Pds = zed(TLi[0])
		  	//alert("Pds=" + Pds + ", TotPds=" + this.TotPds + " " + (Pds>=this.TotPds) + ", €=" + TLi[1])
			if (Pds>=this.TotPds) { Port = zed(TLi[1]);  break }
		}
	}
	//alert(Port)
	this.Port = Port
}

CaddObj.prototype.CalcPortMnt = function() {
	if (this.ModeCalcPort!='Total')  return
}



function AddCad(Ob, Q) {
  var TR, oi, Quant, T, Rem=0
  TR = ElemPAt(Ob,"CodB");  if (!TR)  return
  Cadd.TR = TR
  oi = LTags(TR,"INPUT",0);  if (Q==-99) { if (oi) Quant=ze(oi.value);  if (!Quant) Quant=1 }  else if (oi) Quant = ze(oi.value) + Q
  if (Quant<0)  Quant=0
  var Stock = ze(LX(TR,"Stock"))
  if (Stock>0 && Quant>Stock) { alert("Cet article n'est actuellement disponible qu'en " + Stock + " exemplaire(s)");  Quant=Stock }
  if (oi) oi.value= Quant;   //alert(Lout(TR) +crr+ LX(TR,"Prix"))
  var Prix	= zed(LX(TR,"Promo"));  if (!Prix)  Prix = zed(LX(TR,"Prix"));  if (!Prix)  return
  var Poids = zed(LX(TR,"Poids"))
  var Rems	= LX(TR,"MemoPrd")
	if (Rems) {
		T = Tableau2D(Rems,'=\r\n');	//alert(JSONS(T)+crr+Rems)
  	Rem	= RechArray(T,Quant,0,1,'>');  if (Rem<0)  Rem=0  //alert(Rem)
	}
  Cadd.Add(LX(TR,"CodB"), Quant, Prix, Poids, Rem)
  InfoCad()
  Cadd.Sov()
  if (Cadd.FinMajCad)  Cadd.FinMajCad()
    //alert(Cadd.nb + ", " + Prix + ", " + Cadd.CalcTotal() + "\n\n" + Lout(TR))
}

function DispatchQuant() {
	// affiche les quantités dans les vignettes
  var TR, i, oi, Quant, Prd
	for (i=0; i<Cadd.nb; i++) {
		Prd = Cadd[i];  oi = null
		oi = LID("Qte_" + Prd.Cle);   //alert(Prd.Cle+crr+Lout(oi))
		//if (Lien)   else if (Prd.Cle==Code)  oi = LID("Qte")
		if (oi)  oi.value = Prd.Quant
	}
	InfoCad()
}

function InfoCad() {
	// affiche les totaux du caddie dans la page
	var T, TR, Q, Opt
	Q = Cadd.CalcQte()
	Opt = ", &nbsp;&euro;"
	if (ElemPClass(Cadd.TR,'DivCad')) {
		if (Cadd.TR) {
		  if (Cadd.Prd.Rem!=undefined)  PVal(Cadd.TR.cells[Cadd.colTot-1], Cadd.Prd.Rem+'%', true)
			PVal(Cadd.TR.cells[Cadd.colTot], FormatN(Cadd.Prd.Total,2, Opt), true)
		}
	}
	Cadd.Calc()
	PVal("CadQuant", Q)
	PVal("CadTotal", FormatN(Cadd.Total,2,Opt), true)
	PVal("CadTVA", FormatN(Cadd.TVA,2, Opt), true)
	PVal("CadTotTTC", FormatN(Cadd.TotTTC,2, Opt), true)
	PVal("CadPort", FormatN(Cadd.Port,2, Opt), true)
	PVal("CadPromo", '-&nbsp;'+FormatN(Cadd.Promo,2, Opt), true)
	PVal("TotPds", Cadd.TotPds)
	PVal("Total", FormatN(Cadd.Total,2), true)
	if (LID('CmtPds'))  LID('CmtPds').title =  Cadd.TotPds
	if (Q)  Aff('MiniCad');  else  Hide('MiniCad')
}

function ClearCad() {
	for (var i=0; i<Cadd.nb; i++)  Cadd[i].Quant = 0
	DispatchQuant()
	Cadd.Clear()
	DelCookie('Caddie','/')
	InfoCad()
}

function AffCmde() {
	Aff("IFM");  Hide("TabInt");  Hide("BoxCmd");  Hide("DivCadQ");  Hide("DivCadT");
	Cadd.TR = null
	IFM.location = RootSite + "/Caddie.php"
}

function MajPromo(O) {
	var Sql, V
	V = LVal(O);  if (!V)  return
	if (Cadd.txRem) { alert("Vous bénéficiez déjà d'une remise");  return }
  Sql = "SELECT DatDoc, AdrWeb FROM base WHERE Titre LIKE '"+V+"'"
  XmlPost2("Pgm=ListBox&Sql=" + escape(Sql)+AjUrl,'',ExecPromo)
}

function ExecPromo(re) {
  var S, D, Rem
  if (!re) { alert('Code promo non trouvé');  return }
  S = Isole(re,',',1);  Rem = Isole(re,',',2);  if (!Rem)  return
  D = DateJS(S);  if (D<new Date()) { alert('Code promo expiré');  return };		//alert(S+crr+D)
  Cadd.txRem = Rem
  Cadd.Calc()
  Cadd.Sov()
  ExecAction('Caddie')
  alert("Ce code promotion vous donne droit à une remise de " + Cadd.Promo + ' €')
}

