// funciones del carrito y pago con paypal y visa
/*
variables que pongo en el cookie
OKAcart_prods		=>		array separada por ; cada elem tiene ID:Uds
OKAcart_elems	=>		número de elementos que hay en el carrito, sin TTE
OKAcart_tte		=>		importe total del transporte
OKAcart_total		=>		importe total del carrito, en Euros, con IVA y sin Tte

*/
var borraCart='0';
function __OKAcart() {
	this.sepOKAvars='|'; //separa las variables del cookie entre sí
	this.sepOKAvals = '@'; //separa los valores dentro de cada variable
	this.sepOKAvals2 = '$'; //separa los datos dentro de cada valor de la variable
	this.sepOKAigual = ':'; //separa el nombre de la var de su valor
	this.varOKA = 'OKAcart='; //nombre de la var del cookie
	this.fcnMuestra = null; //nombre de la función a ejecutar para mostrar en la página los valores actuales tras un cambio
	
	this.gOKAcart_vars = Array('OKAcart_prods','OKAcart_elems','OKAcart_idtte','OKAcart_tte','OKAcart_total');
	this.gOKAcart_vals = Array('null','0','0','0','0');
	this.OKAcart_prods = Array(); //lista de productos y sus unidades
	this.OKAcart_elems; //contador simple del número de productos
	this.OKAcart_idtte; //identificador de la tarifa de transporte en el carrito
	this.OKAcart_tte; //valor total del transporte en el carrito
	this.OKAcart_total; //total del carrito, con IVA y tte
	this.OKAcart_vacio = true;
	this.galleta=''; //almacena el cookie completo
	
	/*
	funciones necesarias
		-	comprobar si está puesto OKAcart en el cookie y si no ponerlo con valores iniciales
		-	_sacaVars() sacar los valores de todas las vars de OKA y colocarlos en las variables de la clase
		-	modificar el valor de una variable de OKA
		-	volver a escribir el cookie con la var OKA
	proceso
		1.-		compruebo si existe la var OKA o el cookie mismo
		2.-		si no existe lo pongo y salgo porque el carrito está vacío
		3.-		si existe, saco los valores de las vars y los pongo en las vars de la clase
	*/
	/* el cookie contiene al inicio
	OKAcart=OKAcart_prods:null|OKAcart_elems:0|OKAcart_tte:0|OKAcart_total:0 
	*/
	//this._sacaVars = _sacaVars;
	//function _sacaVars() {
	this._sacaVars = function() {
		//saca las variables OKA del cookie y pone los valores en las vars de esta clase
		//además fija el valor de la var OKAcart_vacio
		this.galleta = document.cookie;
		//alert(this.galleta)
		if (this.galleta.indexOf(this.varOKA)==-1) {return null;}
		var dat = this.galleta.split(';');
		var dat1;
		for (var d=0;d<dat.length;d++) {
			if (dat[d].indexOf(this.varOKA)!=-1) {dat1=dat[d]}
		}
		//alert(dat1)
		//var datos = this.galleta.split(this.varOKA)[1].split(this.sepOKAvars); //.split(';')[0];
		var datos = dat1.split(this.varOKA)[1].split(this.sepOKAvars);
		for (var c=0;c<datos.length;c++) {
			eval('this.'+datos[c].split(this.sepOKAigual)[0]+'="'+datos[c].split(this.sepOKAigual)[1]+'";');
		}
		//return true;
	}
	
	this._getVar = function(cual) {
		//saca el valor actual de una variable en el cookie
		var ret=0;
		this.galleta = document.cookie;
		if (this.galleta.indexOf(this.varOKA)==-1) {return null;}
		
		var dat = this.galleta.split(';');
		var dat1;
		for (var d=0;d<dat.length;d++) {
			if (dat[d].indexOf(this.varOKA)!=-1) {dat1=dat[d]}
		}
		
		//var datos = this.galleta.split(this.varOKA)[1].split(this.sepOKAvars);
		var datos = dat1.split(this.varOKA)[1].split(this.sepOKAvars);
		
		for (var c=0;c<datos.length;c++) {
			if (datos[c].split(this.sepOKAigual)[0]==cual) {ret = datos[c].split(this.sepOKAigual)[1];}
		}
		return ret;
	}
	
	this._muestraCart = function() {
		if (window.borraCart=='1') {this._borraCookie();}
		else {
			var total = _OKAc._getVar('OKAcart_total');
			if (total!='0') {
				try {document.getElementById('divcesta').className='';} catch(err) {}
				try {document.getElementById('detcesta').innerHTML = total.toString();} catch(err) {}
			}
			//alert(total)
		}
	}
	
	
	this._dimeVarsOKA = function() {
		//alerta los valores de las vars de oka en esta clase, extraídas del cookie previamente
		var txt = Array();
		for (var c=0;c<this.gOKAcart_vars.length;c++) {
			txt.push(this.gOKAcart_vars[c]+' '+this.sepOKAigual+' '+eval('this.'+this.gOKAcart_vars[c]));
		}
		alert(txt.join('\n'));
	}
	
	this._getCookie = function() {
		//muestra el cookie completo
		alert(document.cookie);
	}
	//_getCookie();
	
	this._inicia = function() {
		// inicia el cookie al llegar a la página
		if (document.cookie.indexOf(this.varOKA)==-1) {
			var fecha=new Date();
			var Periodo=fecha.getTime()+(30*24*60*60*1000);//30 días
			fecha.setTime(Periodo);
			var txt = Array();
			for (var c=0;c<this.gOKAcart_vars.length;c++) {
				txt.push(this.gOKAcart_vars[c]+this.sepOKAigual+this.gOKAcart_vals[c]);
			}
			document.cookie= this.varOKA+txt.join(this.sepOKAvars) + "; path=/; expires="+fecha.toGMTString();
		}
		//this._getCookie();
		this._sacaVars();
	}

	this._ponProducto = function(idproducto, unidades, precioU) {
		//ejemplo de llamada: _OKAc._ponProducto('128', 1, 348.00)
		if (this.OKAcart_prods=='null' && unidades>0) {
			//la var está vacía, añado el producto sin más
			this.OKAcart_prods = (idproducto.toString()+this.sepOKAvals2+unidades).toString(); //lista de productos y sus unidades
			this.OKAcart_elems = parseInt(this.OKAcart_elems)+parseInt(unidades);
			this.OKAcart_total = parseInt(this.OKAcart_total)+parseInt(precioU*unidades);
		}
		else {
			var prods = Array();
			prods = this.OKAcart_prods.split(this.sepOKAvals);
			var prodsNew = Array();//los nuevos
			var idp, uds, existe, udsNew;
			existe = false;
			for (var p=0;p<prods.length;p++) {
				idp = prods[p].split(this.sepOKAvals2)[0];
				uds = parseInt(prods[p].split(this.sepOKAvals2)[1]);
				if (idp.toString()==idproducto.toString()) {
					existe = true;
					udsNew = 0;
					udsNew = parseInt(uds)+parseInt(unidades);
					if (udsNew>0) {
						prodsNew.push(idp.toString()+this.sepOKAvals2+(parseInt(uds)+parseInt(unidades)).toString());
						this.OKAcart_elems = parseInt(this.OKAcart_elems)+parseInt(unidades);
						this.OKAcart_total = parseInt(this.OKAcart_total)+parseInt(precioU*unidades);
					}
					else if (udsNew==0) {
						this.OKAcart_elems = parseInt(this.OKAcart_elems)+parseInt(unidades);
						this.OKAcart_total = parseInt(this.OKAcart_total)+parseInt(precioU*unidades);
					}
					//else {}
				}
				else {prodsNew.push(prods[p]);}
			}
			if (!existe && unidades>0) {
				prodsNew.push(idproducto.toString()+this.sepOKAvals2+unidades.toString());
				this.OKAcart_elems = parseInt(this.OKAcart_elems)+parseInt(unidades);
				this.OKAcart_total = parseInt(this.OKAcart_total)+parseInt(precioU*unidades);
			}
			this.OKAcart_prods = prodsNew.join(this.sepOKAvals);
		}
		if (this.OKAcart_prods=='') {this.OKAcart_prods='null';}
		this._ponCookie();
		this._getActual(idproducto, precioU);
		if (unidades>0 && document.location.href.indexOf('/carrito.html')==-1) {this._gotoCart();/*alert(this._traduce2('add'));*/}
	}
	
	this._getActual = function(prod, precio) {
		//devuelve cuatro cadenas, la primera con el número de unidades y precio total actual del producto recién insertado
		//y la segunda con el total del carrito y el número de elementos que contiene
		//también recibe el nombre de la función a ejecutar después para actualizar los valores en la página
		//var funcion = (this._getActual.arguments[2])?this._getActual.arguments[2]:null;
		var pu, pc, cu, cc;
		if (this.OKAcart_prods=='null') {
			//el carro está vacío, todo es cero
			pu = 0;pc = 0;cu = 0;cc = 0;
		}
		else {
			prods = this.OKAcart_prods.split(this.sepOKAvals);
			for (var p=0;p<prods.length;p++) {
				idp = prods[p].split(this.sepOKAvals2)[0];
				uds = parseInt(prods[p].split(this.sepOKAvals2)[1]);
				if (idp.toString()==prod.toString()) {
					pu = uds;
					pc = parseInt(uds)*precio;
				}
			}
			cu = this.OKAcart_elems;
			cc = this.OKAcart_total;
		}
		//alert(this._getActual.arguments[2]);
		this._muestraCart();
		/*if (this.fcnMuestra==null) {this.actualizaPag(pu, pc, cu, cc);}
		else {eval(this.fcnMuestra+'('+pu+','+pc+','+cu+','+cc+');');}*/
	}
	
	this._gotoCart = function() {
		var ranvar = parseInt(Math.random()*99999999);
		var dir = '/shop/'+window.dwidioma+'/'+ranvar.toString()+'/carrito.html';
		window.document.location=dir;
	}
	
	this.actualizaPag = function(pu, pc, cu, cc) {
		this._gotoCart();
		//document.location.reload()
		//document.location.href='/shop/'+window.dwidioma+'/carrito.html';
		//alert('actualizaPag'+'\n'+pu+','+pc+','+cu+','+cc);
	}
	
	this._ponPrecioTte = function(idt) {
		//alert('Por favor seleccione un valor');
		if (idt==-1) {this.OKAcart_idtte = 0;}
		else {this.OKAcart_idtte = idt;}
		this._ponCookie();
		this._gotoCart();
		//document.location.reload();
	}
	
	this._checkDatosComprador = function() {
		//comprueba si el form de datos del comprador es correcto
		var d = document.forms['frmCartDatos'];
		var error = false;
		var campos = Array('nombre#text#2','apellidos#text#2','direccion1#text#3','direccion2#text#0','ciudad#text#2','codigopostal#text#5','provincia#select#0','telefono#text#3','correoe#email#5','notas#text#0','idioma#text#3','ididioma#text#1','mediopago#select#0');
		var t='['+window.dominio+']\n'+this._traduce('err0')+'\n'+this._traduce('err1')+'\n';
		var campo=nombre=valor=tipo=minval='';
		var correcto=true;
		var camposMal=Array();
		
		for (var c=0;c<campos.length;c++) {
			nombre = campos[c].split('#')[0];
			tipo = campos[c].split('#')[1];
			campo = d.elements[nombre];
			valor = campo.value;
			minval = campos[c].split('#')[2];
			
			if (tipo=='text') {
				d.elements[nombre].value=trim(valor);
				valor = d.elements[nombre].value;
				if (valor.length<minval) {correcto=false;camposMal.push(nombre);}
			}
			else if (tipo=='email') {
				d.elements[nombre].value=trim(valor);
				valor = d.elements[nombre].value;
				if (!this._compruebaMail(valor)) {correcto=false;camposMal.push(nombre);}
			}
			else if (tipo=='select') {
				if (valor=='-1') {correcto=false;camposMal.push(nombre);}
			}
		}
		
		//correcto = true; //ELIMINAR ESTO 
		
		if (!correcto) {
			for (var m=0;m<camposMal.length;m++) {
				t += ' - '+this._traduce(camposMal[m].substr(0,3))+'\n';
				d.elements[camposMal[m]].className='enrojo';
			}
			alert(t);
			d.elements[camposMal[0]].focus();
			return;
		}
		else {
			//oculto el form
			document.getElementById('divPaginaCart').className='oculto';
			if (d.mediopago.value=='paypal') {//me voy a ir a paypal
				with (document.getElementById('divEnviadoCart')) {
					className='';
					innerHTML = '<p><img src="/g/graf/loading.gif" border="0" align="absmiddle"> '+this._traduce2('cnpaypal')+' ...</p>';
				}
			}
			else {//lo mando por emilio, no muestro nada hasta no tener success
				with (document.getElementById('divEnviadoCart')) {
					className='';
					innerHTML = '<p><img src="/g/graf/loading.gif" border="0" align="absmiddle">  ...</p>';
				}
			}
			
			//ahora llamo a jq para grabar el carrito y luego construir el form que mandaré automáticamente a paypal
			var datosform = Array();
			var campo ;
			for (var c=0;c<campos.length;c++) {
				campo = campos[c].split('#')[0];
				datosform.push(d.elements[campo].name+'='+trim(d.elements[campo].value));
			}
			//el transporte
			var dt = document.forms['frmTransporte'];
			for (var c=0;c<dt.elements.length;c++) {
				datosform.push(dt.elements[c].name+'='+trim(dt.elements[c].value));
			}
			var datosf = datosform.join('&');
			
			var res = $.ajax({
				url:'/g/rec_okacart.php',
				global:false,
				cache:false,
				type:"POST",
				data:datosf,
				dataType:"txt",
				success:function(msg){
					var dat = JSON.parse(msg);
					if (dat.tipoPago=='emilio') {
						with (document.getElementById('divEnviadoCart')) {
							className='';
							innerHTML = '<p> '+_OKAc._traduce2('enviado')+'</p>';
						}
						_OKAc._borraCookie();
					}
					else if (dat.tipoPago=='paypal') {_OKAc._aPaypal(msg)}
				}
			});
		}
	}
	
	this._aPaypal = function(datos) {
		var dat = JSON.parse(datos);
		var fm = document.createElement('FORM');
		document.body.appendChild(fm);
		with (fm) {
			id = 'frmpaypal' + dat.idcarrito.toString();
			action='https://www.paypal.com/cgi-bin/webscr';
			method='post';
			target="_self";
		}
		for (dato in dat) {
			if (dato!='idcarrito') {
				elem = document.createElement('INPUT');
				with (elem) {
					type='hidden';
					name=dato;
					value=dat[dato];
				}
				fm.appendChild(elem);
			}
		}
		fm.submit();
	}
	
	this._traduce = function (texto) {
		var t = window.tradC[window.dwidioma][texto];
		return t.substr(0,1).toUpperCase()+t.substr(1,100);
	}

	this._traduce2 = function (texto) {
		return window.tradC2[window.dwidioma][texto];
	}

	this._compruebaMail = function (valor) {
		var correcto=true;
		var at="@";var dot=".";var lat=valor.indexOf(at);var lstr=valor.length
		var ldot=valor.indexOf(dot)
		if (valor.indexOf(at)==-1){correcto=false;}
		if (valor.indexOf(at)==-1 || valor.indexOf(at)==0 || valor.indexOf(at)==lstr){correcto=false;}
		if (valor.indexOf(dot)==-1 || valor.indexOf(dot)==0 || valor.indexOf(dot)==lstr){correcto=false;}
		if (valor.indexOf(at,(lat+1))!=-1){correcto=false;}
		if (valor.substr(lat-1,lat)==dot || valor.substr(lat+1,lat+2)==dot){correcto=false;}
		if (valor.indexOf(dot,(lat+2))==-1){correcto=false;}
		if (valor.indexOf(" ")!=-1){correcto=false;}
		var aceptados='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.-_@';
		for (var c=0;c<valor.length;c++) {if (aceptados.indexOf(valor.substr(c,1))=='-1') {correcto=false;}}
		return correcto;
	}
	
	this._ponCookie = function() {
		//pone el cookie con los valores que tiene ahora mismo las variables
		var fecha=new Date();
		var Periodo=fecha.getTime()+(30*24*60*60*1000);//30 días
		fecha.setTime(Periodo);
		var txt = Array();
		var valor='';
		for (var c=0;c<this.gOKAcart_vars.length;c++) {
			valor=eval('this.'+this.gOKAcart_vars[c]+';');
			//alert(valor)
			txt.push(this.gOKAcart_vars[c]+this.sepOKAigual+valor.toString());
		}
		document.cookie= this.varOKA+txt.join(this.sepOKAvars) + "; path=/; expires="+fecha.toGMTString();
		//document.getElementById('tdinforme').innerHTML = document.cookie;
	}
	
	this._borraCookie = function() {
		var fecha=new Date();
		var Periodo=fecha.getTime()+(30*24*60*60*1000);//30 días
		fecha.setTime(Periodo);
		var txt = Array();
		for (var c=0;c<this.gOKAcart_vars.length;c++) {
			txt.push(this.gOKAcart_vars[c]+this.sepOKAigual+this.gOKAcart_vals[c]);
		}
		document.cookie= this.varOKA+txt.join(this.sepOKAvars) + "; path=/; expires="+fecha.toGMTString();
	}
	
	this._borraCart=function() {
		if (confirm(this._traduce2('borra'))) {
			this._borraCookie();
			this._gotoCart();
			//document.location.reload();
		}
	}
	this._inicia();
	//this._getCookie();
	//this._sacaVars();
}
var _OKAc = new __OKAcart();
_OKAc._muestraCart();
/*
_OKAc.fcnMuestra = 'spnmCart';
var total = _OKAc._getVar('OKAcart_total');
if (total!='0') {
document.getElementById('divcesta').className='';
document.getElementById('detcesta').innerHTML = total.toString();
}
*/
/* traducción de los textos */
var tradC=[];
tradC.esp={'err0':'Error en el formulario','err1':'Los siguientes campos no son correctos:','nom':'nombre','ape':'apellidos','dir':'direccion','ciu':'ciudad','cod':'código postal','tel':'teléfono','cor':'Correo Electrónico','pro':'Provincia','pai':'País'}
tradC.eng={'err0':'Error in Form','err1':'The following fields are not correct','nom':'name','ape':'surname','dir':'direction','ciu':'city','cod':'Postcode','tel':'phone','cor':'Email','pro':'State','pai':'Country'}
tradC.fra={'err0':'Erreur sur la forme','err1':'Les champs suivants ne sont pas correctes:','nom':'name','ape':'nom','dir':'direction','ciu':'ville','cod':'Code postal','tel':'phone','cor':'Email','pro':'Province','pai':'Pays'}
tradC.cat={'err0':'Error en el formulari','err1':'Els següents camps no són correctes:','nom':'nom','ape':'cognoms','dir':'direccio','ciu':'ciutat','cod':'codi postal','tel':'telèfon','cor':'Correu Electrònic','pro':'Província','pai':'País'}
tradC.eus=tradC.esp;tradC.gal=tradC.esp;
tradC.deu={'err0':'Fehler auf der Form','err1':'Die folgenden Felder sind nicht korrekt:','nom':'Name','ape':'Nachname','dir':'Richtung','ciu':'Stadt','cod':'PLZ','tel':'phone','cor':'E-Mail','pro':'Provinz','pai':'Land'}
tradC.por={'err1':'Os seguintes campos não estão corretas:','err0':'Erro na forma','nom':'nombre','ape':'apellidos','dir':'direccion','ciu':'ciudad','cod':'Postcode','tel':'telefono','cor':'Email','pro':'Província','pai':'País'}
tradC.ita={'err0':'Errore sul modulo','err1':'I seguenti campi non sono corrette:','nom':'nome','ape':'Cognome','dir':'indirizzio','ciu':'città','cod':'CAP','tel':'telefono','cor':'E-mail','pro':'Provincia','pai':'Paese'}
tradC.fin={'err0':'Virhe muodossa','err1':'Seuraavat kentät eivät ole oikein:','nom':'nimi','ape':'Sukunimi','dir':'osoite','ciu':'kaupunki','cod':'Postinumero','tel':'puhelin','cor':'Sähköposti','pro':'Provinssi','pai':'Maa'}
tradC.sve={'err0':'Fel på blankett','err1':'Följande fält är inte korrekt:','nom':'namn','ape':'Efternamn','dir':'adress','ciu':'stad','cod':'Postnummer','tel':'telefon','cor':'Email','pro':'Provins','pai':'Land'}
tradC.dsk={'err0':'Fejl på formular','err1':'Følgende områder er ikke korrekt:','nom':'navn','ape':'Efternavn','dir':'adresse','ciu':'by','cod':'Postnummer','tel':'telefon','cor':'Email','pro':'Provins','pai':'Land'}
tradC.ndl={'err0':'Fout op formulier','err1':'De volgende velden zijn niet juist:','nom':'naam','ape':'Achternaam','dir':'adres','ciu':'stad','cod':'Postcode','tel':'telefoon','cor':'E-mailadres','pro':'Provincie','pai':'Land'}
tradC.pol={'err0':'Blad w postaci','err1':'Nastepujace obszary nie sa poprawne:','nom':'imie','ape':'Nazwisko','dir':'adres','ciu':'miasto','cod':'Kod pocztowy','tel':'telefon','cor':'Email','pro':'Powiat','pai':'Kraj'}
tradC.rom={'err0':'Eroare cu privire la forma','err1':'Urmatoarele domenii nu sunt corecte:','nom':'nume','ape':'Nume de familie','dir':'adresa','ciu':'oras','cod':'Cod postal','tel':'telefon','cor':'Email','pro':'Provincia','pai':'Tara'}
/**/
var tradC2=[];
tradC2.esp={'borra':'¿Está seguro de querer borrar su carrito de la compra?', 'cnpaypal':'Conectando con el servidor seguro de Paypal','add':'Producto añadido al carrito', 'enviado':'Su compra ha sido enviada. Nos pondremos en contacto con usted para acordar el pago.'}
tradC2.eng={'borra':'Are you sure you wish to delete your shopping cart?','cnpaypal':'Connecting to secure server of Paypal','add':'Product added to cart', 'enviado':'Your purchase has been sent. We will contact you to arrange payment.'}
tradC2.fra={'borra':'Êtes-vous sûr de vouloir effacer de votre panier?','cnpaypal':'Connexion au serveur sécurisé de Paypal','add':'Produit ajouté au panier', 'enviado':'Votre achat a été envoyé. Nous prendrons contact avec vous afin de convenir de paiement.'}
tradC2.cat={'borra':'Esteu segur de voler esborrar el seu carret de la compra?','cnpaypal':'Connectant amb el servidor segur de Paypal','add':'Producte afegit a la cistella', 'enviado':'La seva compra ha estat enviada. Ens posarem en contacte amb vostè per acordar el pagament.'}
tradC2.eus=tradC2.gal=tradC2.esp;
tradC2.deu=tradC2.por=tradC2.ita=tradC2.fin=tradC2.sve=tradC2.dsk=tradC2.ndl=tradC2.pol=tradC2.rom=tradC2.esp;

