/**
 *
 * 
 * ficheros requeridos:
 *  
 * 
 */

carrito={
CTE_EUROS   : 1,
CTE_DOLARES : 2,
CTE_ERROR   : -1,
/* ************************************************************************
 * OBTENER DATOS DEL HTML
 * ************************************************************************/

/**
 * Formato de euros: 2.000,45&euro;
 * 
 * Convertir a 2000.45
 * 
 * @param {Object} numero
 */
eurosToFloat : function (numero)
{
	// Quitar el simbolo del euro
	numero=numero.replace("&euro;",'');
	numero=numero.replace(String.fromCharCode(8364),'');
	
	// Eliminar el separador de miles '.'
	numero=numero.replace("\.",'');
	
	// Sustituir las comas decimales por puntos decimales
	numero=numero.replace(",","\.");
	
	// Redondear
	numero=mates.redondear(numero,2);

	return numero;	
},
floatToEuros : function (numero)
{
	// Formateo de punto como separador de miles y , como separador de decimales
	numero=numero.replace("\.",",");
	
	numero=numero+String.fromCharCode(8364);
	return numero;	
},
/**
 * Formato de dolares: $2,000.45
 * 
 * Convertir a 2000.45
 * 
 * @param {Object} numero
 */
dolaresToFloat : function (numero)
{
	// Quitar el simbolo del dolar
	numero=numero.replace("$",'');
	
	// Eliminar el separador de miles '.'
	numero=numero.replace(",",'');
	
	// Ya usan el punto decimal como separador de miles
	
	// Redondear
	numero=mates.redondear(numero,2);

	return numero;	
},
floatToDolares : function (numero)
{
	// Los decimales ya estan, falta el separado de miles
	//numero=numero.replace("\.",",");
	
	numero="$"+numero;
	
	return numero;	
},
/**
 * Averigua si la moneda es euros o dolares. Cogemos como valor 
 * 
 * @param string numero
 * @return float numero parseado
 */
obtenMoneda : function(numero)
{
	var tipoMoneda; 
	
	// Primero averiguar si estamos con dolares o con euros
	if (numero.indexOf("$")>=0)
	{
		tipoMoneda=carrito.CTE_DOLARES;
	}
	else if ( (numero.indexOf(String.fromCharCode(8364))>=0) || 	// codigo ascii del euro
			  (numero.indexOf("&euro;")>=0) ) 
	{
		tipoMoneda=carrito.CTE_EUROS;
	}
	else
	{
		tipoMoneda=carrito.CTE_ERROR;
	}
	return tipoMoneda;
},
/**
 * Hay que distinguir entre dolares y euros.
 * Dolares: ',' como separador de miles y '.' decimal
 * Euros: usa el formato de la ',' como separador
 * decimal y el del '.' como separador de miles. Hay que convertirlos a reales
 * de javascript.
 * 
 * Devuelve -1 si hay algun error
 * 
 * @param string numero
 * @return float numero parseado
 */
castMoneda : function(numero)
{
	var tipoMoneda;
	
	// Primero averiguar si estamos con dolares o con euros
	tipoMoneda=carrito.obtenMoneda(numero);
	
	switch(tipoMoneda)
	{
		case carrito.CTE_DOLARES:
			numero=carrito.dolaresToFloat(numero);
		break;
		case carrito.CTE_EUROS:
			numero=carrito.eurosToFloat(numero);
		break;
		case carrito.CTE_ERROR:
			numero=-1;
		break;
		default:
			numero=-1;
		break;
	}
	return numero;
},
/**
 * Devuelve el numero de unidades como entero
 */
getUnidades : function(enlace)
{
	var unidades;
	
	unidades=jQuery("input",enlace.parentNode).val()
	
	if (isNaN(unidades)) unidades=0;
	
	return unidades; 
},
/**
 * Devuelve el precio por unidad del producto como float
 */
getPrecioUnidad : function(enlace)
{
	var precioUnidad;
	
	precioUnidad=jQuery("td > span.preciounidad",(enlace.parentNode).parentNode).text();
	precioUnidad=carrito.castMoneda(precioUnidad);
	
	return precioUnidad;
},
/**
 * Devuelve el precio subtotal del producto como float
 */
getSubtotal : function(enlace)
{
	var subTotal;
	
	subTotal=jQuery("td.subtotal",(enlace.parentNode).parentNode).text();
	subTotal=carrito.castMoneda(subTotal);
		
	return subTotal;
},
/**
 * Devuelve el precio total del producto como float
 */
getTotal : function()
{
	var total;
	
	total=jQuery("table#carrito span#total").text();
	total=carrito.castMoneda(total);
		
	return total;
},
/**
 * No solo necesitamos saber el tipo de moneda con cada numero que nos
 * encontremos. A la hora de devolver los resultados debemos formatearlos
 * segun la moneda. A traves del total, que es un valor que siempre tiene
 * que estar ahi, conoceremos la moneda. 
 */
getTipoMoneda : function()
{
	var total,tipoMoneda;
	
	total=jQuery("table#carrito span#total").text();
	tipoMoneda=carrito.obtenMoneda(total);
	
	return tipoMoneda;
},
/**
 * Actualizaciones de los datos. Es necesario pasarlos a string
 * @param float subTotal
 * @param float total
 */
asigna_precios : function(enlace,unidades,subTotal,total)
{
	var tipoMoneda;
	
	unidades=mates.redondear(unidades,0);
	subTotal=mates.redondear(subTotal,2);
	total=mates.redondear(total,2);	
		
	unidades=unidades.toString();
	subTotal=subTotal.toString();
	total=total.toString();
	
	tipoMoneda=carrito.getTipoMoneda();
	switch(tipoMoneda)
	{
		case carrito.CTE_DOLARES:
			subTotal=carrito.floatToDolares(subTotal);
			total=carrito.floatToDolares(total);;
		break;
		case carrito.CTE_EUROS:
			subTotal=carrito.floatToEuros(subTotal);
			total=carrito.floatToEuros(total);;
		break;
		case carrito.CTE_ERROR:
			subTotal=0;
			total=0;
		break;
		default:
			subTotal=0;
			total=0;
		break;
	}
	
	jQuery("input",enlace.parentNode).val(unidades);	
	jQuery("td.subtotal",(enlace.parentNode).parentNode).html(subTotal);
	jQuery("table#carrito span#total").html(total);
},
calcula_precios : function (enlace,unidades)
{
	var precioUnidad,subTotalAnterior,subTotalNuevo,total;
	
	precioUnidad=carrito.getPrecioUnidad(enlace);
	subTotalAnterior=carrito.getSubtotal(enlace);
	total=carrito.getTotal();
	if (precioUnidad < 0 || subTotalAnterior <0 || total <0)
	{
		subTotalNuevo=0;
		total=0;
	}
	else
	{
		subTotalNuevo=precioUnidad*unidades;
		total=total+(subTotalNuevo - subTotalAnterior);
	}
	
	// Actualizaciones
	carrito.asigna_precios(enlace,unidades,subTotalNuevo,total);
},
/* ************************************************************************
 * ASIGNAR EVENTOS
 * ************************************************************************/

/*
 * This hace referencia al enlace, que puede tener la clase "menos" o la "mas"
 * El padre es la celda de clase uds
 */
click_menos : function ()
{
	var unidades;
	
	try
	{
		// Obtener unidades
		unidades=carrito.getUnidades(this);
		unidades--;
		if (unidades < 0) return false;
		
		carrito.calcula_precios(this,unidades);

	}
	catch (err)
	{
		return false; // no hagas nada
	}
	return false;
},
/*
 * This hace referencia al enlace, que puede tener la clase "menos" o la "mas"
 * El padre es la celda de clase uds, que tiene otras celdas como hermanos
 * El abuelo es la fila tr
 */
click_mas : function ()
{
	var unidades;
	
	try
	{
		// Obtener unidades
		unidades=carrito.getUnidades(this);
		unidades++;
		
		carrito.calcula_precios(this,unidades);

	}
	catch (err)
	{
		return false; // no hagas nada
	}
	return false;
},
key_unidades : function()
{
	var unidades;
	
	try
	{
		// Obtener unidades
		unidades=carrito.getUnidades(this);
		
		carrito.calcula_precios(this,unidades);
	}
	catch (err)
	{
		return false; // no hagas nada
	}	
},
/*
 * Ordenes a realizar cuando se carga la pagina.
 * 
 */
asigna_evento_enlaces : function () {
	jQuery("table#carrito a.menos").click(carrito.click_menos);
	jQuery("table#carrito a.mas").click(carrito.click_mas);
	jQuery("table#carrito input.uds").keyup(carrito.key_unidades);
}

}

// Asegurarse de que JQuery esta definido con anterioridad
jQuery(document).ready(carrito.asigna_evento_enlaces);

