var $j = jQuery;

/**
* Indica si el carrito está oculto o no
*/
var carritoOculto = false;

/**
* Indica si el carrito está vacio. Es necesaria esta variable debido a que el array
* de productos es asociativo, y por ello la longitud siempre es cero
*/
var carritoVacio = true;

/**
 * Indica si el popup de cantidad de productos está activo
 */
popUpCantidad = false;

/**
* Lista de los productos seleccionados
*/
arrProductos = new Array();

/**
*	Objeto de la clase producto
*/
var objProducto;

/**
* Clase de producto. La estructura coincide con productoBO para poder utilizar JSON
*/
function prod() {
	this.arrCampos = {
		idProducto 		: {
					valor : ""
				},
		vRefFabricante 	: {
					valor : ""
				},
		vNombre 		: {
					valor : ""
				},
		vTamano 		: {
					valor : ""
				}
	};
	this.cantidad = 0;
	//Texto de la placa del producto
	this.arrPlaca = new Array();
	//El precio del producto una vez comprobado si está en campaña
	this.precioFinal = 0;
	//Si el producto forma parte de un montaje
	this.idMontaje = 0;
}

/**
 * Vacia el carrito
 * @return
 */
function vaciarCarrito() {
	arrProductos = new Array();
	carritoVacio = true;
	carritoOculto = false;
	ajaxCarrito('vaciar', '');
	actualizarCarrito();
}

/**
 * Minimiza el carrito
 */
function minimizarCarrito() {
	mostrarCargando();
	$j.ajax({
        type	: 'POST',
        url		: 'scripts/carrito.php',
        data	: 'accion=minimizar',
        // Mostramos un mensaje con la respuesta
        success	: function() {
			$j("#ocultarMostrar").html('<a href="javascript:desplegarCarrito()">(mostrar)</a>');
			$j("#carrito").slideUp();
			carritoOculto = true;
        }
	});
	cierraPopUp();
}

/**
 * Despliega el carrito
 */
function desplegarCarrito() {
	mostrarCargando();
	$j.ajax({
        type	: 'POST',
        url		: 'scripts/carrito.php',
        data	: 'accion=desplegar',
        // Mostramos un mensaje con la respuesta
        success	: function() {
			$j("#ocultarMostrar").html('<a href="javascript:minimizarCarrito()">(ocultar)</a>');
			$j("#carrito").slideDown();
			carritoOculto = false;
        }
	});
	cierraPopUp();
}

/**
 * Obtiene el carrito de la sesión
 */
function obtenerCarritoSesion(ocultar) {
	if ( !ocultar || ocultar == null ) {
		$j.ajax({
	        type	: 'POST',
	        url		: 'scripts/carrito.php',
	        data	: 'accion=obtenerCarrito',
	        // Mostramos un mensaje con la respuesta
	        success	: function(data) {
				if ( data == 'error' ) {
					Sexy.alert('Ha ocurrido un problema y no se ha podido cargar el carrito. Disculpe las molestias.');
				} else {
					if ( data != 'vacio' ){
						arrProductos = $j.parseJSON(data);
						carritoVacio = false;
						if ( arrProductos['minimizado'] ) {
							carritoOculto = true;
						} else {
							carritoOculto = false;
						}
						actualizarCarrito();
					}
				}
	        }
		});
	}
}

/**
 * Actualiza el carrito en el servidor
 */
function ajaxCarrito(accion, objProducto) {
	var data;
	if (accion == 'anadir') {
		data = 'accion='+accion+'&id='+objProducto.arrCampos.idProducto.valor+'&cantidad='+objProducto.cantidad+'&idMontaje='+objProducto.idMontaje;
		//texto de la placa
		for ( var i=0; i<objProducto.cantidad; i++ ) {
			if ( objProducto.arrPlaca['placa_'+i] ) {
				data += '&placa_'+i+'='+objProducto.arrPlaca['placa_'+i];
			}
		}
	} 
	if (accion == 'quitar') {
		//quitar
		data = 'accion='+accion+'&id='+objProducto.arrCampos.idProducto.valor;
	}
	if (accion == 'quitarMontaje') {
		//quitar montaje
		data = 'accion='+accion+'&nombreMontaje='+objProducto.arrCampos.vNombre.valor;
	}
	if (accion == 'textoPlaca') {
		//añadir el texto de la placa
		data = 'accion='+accion+'&id='+objProducto.arrCampos.idProducto.valor;
		for ( var i=0; i<objProducto.cantidad; i++ ) {
			if ( objProducto.arrPlaca['placa_'+i] || objProducto.arrPlaca['placa_'+i] === '' ) {
				data += '&placa_'+i+'='+objProducto.arrPlaca['placa_'+i];
			}
		}
	}
	if (accion == 'imagenPlaca' || accion == 'quitarImagenPlaca') {
		//añadir las imágenes de la placa
		data = 'accion='+accion+'&id='+objProducto.arrCampos.idProducto.valor;
		if ( objProducto.arrPlaca['imagen_1'] ) {
			data += '&imagen_1='+objProducto.arrPlaca['imagen_1'];
		}
		if ( objProducto.arrPlaca['imagen_2'] ) {
			data += '&imagen_2='+objProducto.arrPlaca['imagen_2'];
		}
	}
	if (accion == 'vaciar') {
		//vaciar carrito
		data = 'accion='+accion;
	}
	mostrarCargando();
	$j.ajax({
        type	: 'POST',
        url		: 'scripts/carrito.php',
        data	: data,
        // Mostramos un mensaje en caso de error
        success	: function(data) {
			if ( data == 'error' ) {
				Sexy.alert('Ha ocurrido un error procesando su solicitud. Inténtelo de nuevo por favor.');
			}
        }
	});
	cierraPopUp();
}

/**
* Quita un producto del carrito
*/
function quitarDelCarrito(id) {
	
	//creo una copia del array de productos, reseteo el original, y le devuelvo todos los valores excepto el seleccionado
	//hay que hacerlo de esta manera ya que el array es asociativo
	var arrProductosAux = arrProductos;
	var objProducto;
	arrProductos = new Array();
	carritoVacio = true;
	for ( nombre in arrProductosAux ) {
		for ( idProducto in arrProductosAux[nombre] ) {
			//compruebo si tiene el mismo id y no forma parte de un montaje
			if ( idProducto == id && !( Number(arrProductosAux[nombre][idProducto].idMontaje) ) ) {
				objProducto = arrProductosAux[nombre][idProducto];
			} else {
				//copio el producto
				if ( arrProductos[nombre] ==  null ) {
					arrProductos[nombre] = new Array();
				}
				arrProductos[nombre][idProducto] = arrProductosAux[nombre][idProducto];
				carritoVacio = false;
			}
		}
	}
	
	//actualizo el carrito en el servidor y en el navegador
	ajaxCarrito('quitar', objProducto);
	actualizarCarrito();
	
}

/**
* Quita un montaje del carrito
*/
function quitarMontajeDelCarrito(idMontaje) {
	/**
	 * 1. Encuentro el producto gracias al id
	 * 2. Creo una copia del array de productos, reseteo el original, y le devuelvo todos los valores excepto el montaje seleccionado
	 */
	//1. Encuentro el producto gracias al idMontaje
	var objProducto;
	for ( nombre in arrProductos ) {
		for ( idProducto in arrProductos[nombre] ) {
			if ( arrProductos[nombre][idProducto].idMontaje == idMontaje ) {
				objProducto = arrProductos[nombre][idProducto];
			}
		}
	}
	
	if ( objProducto ) {
		//2. Creo una copia del array de productos, reseteo el original, y le devuelvo todos los valores excepto el montaje seleccionado
		var arrProductosAux = arrProductos;
		arrProductos = new Array();
		carritoVacio = true;
		for ( nombre in arrProductosAux ) {
			if ( nombre != 'minimizado' && nombre != objProducto.arrCampos.vNombre.valor) {
				//copio el producto
				if ( arrProductos[nombre] ==  null ) {
					arrProductos[nombre] = new Array();
				}
				arrProductos[nombre] = arrProductosAux[nombre];
				carritoVacio = false;
			}
		}

		//actualizo el carrito en el servidor y en el navegador
		ajaxCarrito('quitarMontaje', objProducto);
	}
	actualizarCarrito();
}

/**
* Añade un producto al carrito
*/
function anadirAlCarrito(ajax){
	
	ajax = typeof(ajax) != 'undefined' ? ajax : true;
	
	//seteo la cantidad y actualizo el array de productos
	if ( !objProducto.cantidad ) {
		objProducto.cantidad = $j("#cantidadPopUp").val();
	}
	if ( arrProductos[objProducto.arrCampos.vNombre.valor] ==  null ) {
		arrProductos[objProducto.arrCampos.vNombre.valor] = new Array();
	}
	arrProductos[objProducto.arrCampos.vNombre.valor][objProducto.arrCampos.idProducto.valor] = objProducto;
	carritoVacio = false;
	
	//actualizo el carrito en el servidor y en el navegador
	if ( ajax ) {
		ajaxCarrito('anadir', objProducto);
	}
	actualizarCarrito();
	
}

/**
* Actualiza el carrito de la compra
*/
function actualizarCarrito() {
	//Si hay productos muestro el carrito, si no, lo oculto
	if ( carritoVacio ) {
		$j("#carritoCompra").slideUp();
   	} else {
		var html = "";
		var precioTotal = 0;
		//Formato del html
		/*<table class="producto">
			<tbody>
				<tr>
					<th colspan="4">Copa 1</th>
				</tr>
				<tr>
					<td class="encabezado">Código</td>
					<td class="encabezado">Cm.</td>
					<td class="encabezado">Cant.</td>
					<td class="encabezado">Precio</td>
				</tr>
				<tr>
					<td class="id">1</td> --oculto
					<td class="referencia">14009/1</td>
					<td class="cms">28</td>
					<td class="precio">58.50€</td>
					<td class="cantidad">5</td>
				</tr>
			</tbody>
		</table>*/
		//Formato del array
		/*arrProductos[nombre]=>
						arrProducto[id]=>
									[cantidad]
									[precio]
									[idMontaje]
									arrCampos=> [vRefFabricante]=>valor
											 	[vTamano]=>valor
											 	[idProducto]=>valor
						arrProducto[id]=>
									[cantidad]
									[precio]
									[idMontaje]
									arrCampos=> [vRefFabricante]=>valor
											 	[vTamano]=>valor
											 	[idProducto]=>valor
					  [nombre]=>
						arrProducto[id]=>
									[cantidad]
									[precio]
									[idMontaje]
									arrCampos=>		[vRefFabricante]=>valor
											 		[vTamano]=>valor
											 		[idProducto]=>valor
		  arrProductos['minimizado']=> 'true/false'
		*/
		for ( nombre in arrProductos ) {
			if ( nombre != 'minimizado' ) {
				html += '<table class="producto"><tbody>';
				html += '<tr><th colspan="5">' + nombre + '</th></tr>';
				html += '<tr><td class="encabezado">Código</td><td class="encabezado">Cm.</td><td class="encabezado">Cant.</td><td class="encabezado">Precio</td><td></td></tr>';
				for ( producto in arrProductos[nombre] ) {
					html += '<tr>';
					html += '<td class="id">' + arrProductos[nombre][producto].arrCampos.idProducto.valor + '</td>';
					//Enlace a la ficha del producto o al montaje
					if ( Number(arrProductos[nombre][producto].idMontaje) ) {
						html += '<td class="referencia"><a href="montadorTrofeos.php?idMontaje=' + arrProductos[nombre][producto].idMontaje + '&amp;apartado=montador">' + arrProductos[nombre][producto].arrCampos.vRefFabricante.valor + '</a></td>';
					} else {
						html += '<td class="referencia"><a href="ficha.php?id=' + arrProductos[nombre][producto].arrCampos.idProducto.valor + '">' + arrProductos[nombre][producto].arrCampos.vRefFabricante.valor + '</a></td>';
					}
					html += '<td class="cms">' + arrProductos[nombre][producto].arrCampos.vTamano.valor + '</td>';
					html += '<td class="cantidad">' + arrProductos[nombre][producto].cantidad + '</td>';
					html += '<td class="precio">' + roundNumber( ( arrProductos[nombre][producto].cantidad * arrProductos[nombre][producto].precioFinal ), '2' ) + '€</td>';
					//Cambiamos la llamada a la función javascript si es un montaje. El valor por defecto de idMontaje es 0
					if ( Number(arrProductos[nombre][producto].idMontaje) ) {
						html += '<td class="icoQuitar"><img onclick="quitarMontajeDelCarrito(\'' + arrProductos[nombre][producto].idMontaje + '\')" class="quitarCarrito" src="imagenes/quitar_carrito.gif" width="15" height="15" alt="Quitar montaje del carrito" title="Quitar montaje del carrito" /></td>';
					} else {
						html += '<td class="icoQuitar"><img onclick="quitarDelCarrito(\'' + arrProductos[nombre][producto].arrCampos.idProducto.valor + '\')" class="quitarCarrito" src="imagenes/quitar_carrito.gif" width="15" height="15" alt="Quitar del carrito" title="Quitar del carrito" /></td>';
					}
					html += '</tr>';
					precioTotal += arrProductos[nombre][producto].cantidad * arrProductos[nombre][producto].precioFinal;
				}
				html += '</tbody></table>';
			}
		}
		
		html += '<div class="realizarPedido"><a href="comprar.php?apartado=catalogo">Realizar Compra</a></div>';
		html += '<div class="precioTotal">Total: <strong>' + roundNumber(precioTotal,'2') + '€</strong><div>';

		//Efecto que muestra y oculta el carrito
		if ( carritoOculto ) {
			$j("#ocultarMostrar").html('<a href="javascript:desplegarCarrito()">(mostrar)</a>');
			$j("#carrito").html(html);
			$j("#carrito").hide();
			$j("#carritoCompra").slideDown();
		} else {
			$j("#carrito").slideUp(null, function(){
				$j("#carrito").html(html);
			});
			$j("#carrito").slideDown();
			$j("#carritoCompra").slideDown();
		}
   	}
}

/**
* Actualiza la cantidad de productos que va a comprar el usuario
*/
function actualizarNumProductosPopUp(operacion) {
	var numActualProductos = $j("#cantidadPopUp").val();
	//añadir
	if ( operacion == "mas" ) {
		if ( numActualProductos < 9999 ){
			$j("#cantidadPopUp").val(++numActualProductos);
			precioTotalPopUp();
		}
	} else {
	//restar
		if ( numActualProductos > 1 ){
			$j("#cantidadPopUp").val(--numActualProductos);
			precioTotalPopUp();
		}
	}
}

/**
* Actualizar el precio total en el popup
*/
function precioTotalPopUp() {
	var cantidad = $j("#cantidadPopUp").val();
	if ( cantidad < 1 ) {
		cantidad = 1;
		$j("#cantidadPopUp").val(cantidad);
	}
	if ( cantidad > 9999 ) {
		cantidad = 9999;
		$j("#cantidadPopUp").val(cantidad);
	}
	var resultado = cantidad * precio;
	$j("#precioTotalPopUp").html( roundNumber(resultado,'2') );
}


/**
* Muestra el popup para introducir la cantidad de productos a comprar
*/
function mostrarPopUpCantidad(disparador, clave) {

	//obtengo el nombre, código, tamaño y precio del producto
	var id = $j(disparador).parent().parent().children(".id").html();
	var referencia = $j(disparador).parent().parent().children(".referencia").html();
	var tamano = $j(disparador).parent().parent().children(".cms").html();
	precio = $j(disparador).parent().parent().children(".precio").html();
	//quito el símbolo de euro
	precio = precio.substring(0, precio.length-1);
	//quito las posibles comas
	precio = precio.replace(/,/g,'');
	//nombre
	var nombre = $j("#id_" + clave).html();

	//creo el objeto producto
	objProducto = new prod();
	objProducto.arrCampos.idProducto.valor 		= id;
	objProducto.arrCampos.vRefFabricante.valor 	= referencia;
	objProducto.arrCampos.vNombre.valor 		= nombre;
	objProducto.arrCampos.vTamano.valor 		= tamano;
	objProducto.precioFinal				 		= precio;

	//reseteo el número de productos a uno
	$j("#cantidadPopUp").val(1);

	//actualizo el coste
	precioTotalPopUp();

	//muestro el popup
    var sombra = $j('#fondoOpaco');
    var popUp = $j('#popUpCantidad');
    //indica que el pop up está activo
    popUpCantidad = true;
    sombra.fadeTo(0,0);
    sombra.css('display','block');                                   
    sombra.fadeTo(250,0.8);
    centraPopUp(popUp);
    popUp.fadeIn(250);
}

$j(document).ready(function(){

	//cerrar el popUp al apretar 'Esc'
	$j(document).keyup(function(event){
        //Esc
        if (event.keyCode == 27) {
            cierraPopUp();
        }
      	//Flecha arriba
        if (event.keyCode == 38) {
        	actualizarNumProductosPopUp('mas');
        }
      	//Flecha abajo
        if (event.keyCode == 40) {
        	actualizarNumProductosPopUp('menos');
        }
	});

	//cerrar el popUp al clicar en el fondo
	$j('#fondoOpaco').bind("click", function() {
		cierraPopUp();
	});

	//El input de cantidad sólo debe permitir números. El parámetro anula los decimales
	$j("#cantidadPopUp").numeric("none");
	$j("#cantidadPopUp").bind("copy", function(){
		return false;
	});
	$j("#cantidadPopUp").bind("paste", function(){
		return false;
	});

	//El carrito se puede mover por la pantalla
	$j("#carritoCompra").draggable({ opacity : 0.35});
	
});
