/*
	---------------------------------------------------------------------------
	Empresa			: Proconsi S.L.
	Fecha creación	: 29-04-2010
	Fecha ult.modif.: 10-11-2010 - David González
	Módulo			: Funciones Ajax (peticiones y callbacks) para el módulo de tienda en entorno WEB
	----------------------------------------------------------------------------
    Historial de modificaciones:
    [1] - 05-07-2010 - David González
    Quitar comas en parámeteros de ConfirmarPedido() para evitar errores al obtener la acción en explotacion.php
	[2] - 06-07-2010 - David González
    Traspasada función valorPorDefecto al funciones.js para que pueda utilizarse desde otros módulos
    [3] - 14-07-2010 - David González
    Al añadir un producto a la cesta o modificar un pedido, recargar la página automáticamente
    para que si hay cesta en el menú lateral o en la cabecera se actualice también
    [4] - 05-08-2010 - David González
	Mejora de estilos simplemodal
	[5] - 12-08-2010 - David González
	Modificación del cálculo de los portes de un pedido. Hay formas de pago que pueden implicar un recargo
	en los portes y se pueden definir diferentes zonas de envío
	[6] - 10-11-2010 - David González
	Nuevo campo nif en tienda. Este campo no es obligatorio
	[7] - 14-12-2010 - David González
	Indicar el formato de DNI correcto en caso de que el DNI no sea válido
	----------------------------------------------------------------------------
*/
///
/// Inserta un producto en la tienda
///
function NuevoProductoTienda( idProducto )
{
	var cParameters = 'accion=NuevoProductoTienda' + '&params=' + idProducto;
	AjaxRequest( '../Modulos/tienda/explotacion.php' , cParameters , CallBackNuevoProductoTienda );
}
///
/// CallBack de Ajax de inserción de producto al pedido
///
function CallBackNuevoProductoTienda( xmlhttp )
{
	if( xmlhttp.readyState == 4 && xmlhttp.status == 200 )
	{
		if( xmlhttp.responseText.substr( 0 , 2 ) == 'OK' )
		{
			//
			// SimpleModal (jQuery)
			// [3][4]
			$.modal(
				"<div id='mensajeLoginSimpleModal' class='mensajeLoginSimpleModal'> ¡Producto añadido al pedido! </div>" ,
				{
					overlay: 30,
					overlayCss: { backgroundColor: "#fff" },
					focus: true,
					opacity: 60,
					dataCss: {},
					close: true,
					closeHTML: '<div id="modalClose"><div id="modalClose_cont" class="modalClose_cont"><a href="#" onclick=\"window.location.reload()\" class="modalClose_link" title="Cerrar ventana de aviso">CERRAR</a></div></div>',
					closeClass: 'modalClose',
					escClose: true
				}
			);
		}
		else alert( 'Error añadiendo el producto a la cesta: ' + xmlhttp.responseText );
	}
}
///
/// Actualiza la cantidad de producto en el array de la SESSION
///
function actualizaValor( posicion , nValor )
{
	var cParameters = 'accion=ActualizarCantidadProducto' + '&params=' + posicion + ',' + nValor;
	AjaxRequest( '../Modulos/tienda/explotacion.php' , cParameters , CallBackModificarProducto );
}
///
/// Incrementa en una unidad el producto seleccionado
///
function IncrementarProducto( idProducto )
{
	var cParameters = 'accion=IncrementarProducto' + '&params=' + idProducto;
	AjaxRequest( '../Modulos/tienda/explotacion.php' , cParameters , CallBackModificarProducto );
}
///
/// Decrementa en una unidad el producto seleccionado
///
function DecrementarProducto( idProducto )
{
	var cParameters = 'accion=DecrementarProducto' + '&params=' + idProducto;
	AjaxRequest( '../Modulos/tienda/explotacion.php' , cParameters , CallBackModificarProducto );
}
///
/// Decrementa en una unidad el producto seleccionado
///
function BorrarProducto( idProducto )
{
	var cParameters = 'accion=BorrarProducto' + '&params=' + idProducto;
	AjaxRequest( '../Modulos/tienda/explotacion.php' , cParameters , CallBackModificarProducto );
}
///
/// Elimina del pedido todos los productos
///
function VaciarPedido()
{
	var cParameters = 'accion=VaciarPedido';
	AjaxRequest( '../Modulos/tienda/explotacion.php' , cParameters , CallBackModificarProducto );
}
///
/// CallBack de Ajax de petición de configuración de la tienda
///
function CallBackModificarProducto( xmlhttp )
{
	if( xmlhttp.readyState == 4 && xmlhttp.status == 200 )
	{
		if( xmlhttp.responseText.substr( 0 , 2 ) == 'OK' )
			window.location.reload(); //[3]
			//EjecutarFuncionPHP( 'tienda' , 'accion=PresentarGestorPedido' );
		else
			alert( 'Error modificando producto en el pedido: ' + xmlhttp.responseText );
	}
}
///
/// Validamos el formulario de Datos de Entrega (Paso 2): todos los campos deben estar rellenos
///
function ConfirmarPedido()
{
	var cNombre = document.getElementById( 'nombre' ).value;
	var cDireccion = document.getElementById( 'direccion' ).value;
	var cCp = document.getElementById( 'cp' ).value;
	var cLocalidad = document.getElementById( 'localidad' ).value;
	var cProvincia = document.getElementById( 'provincia' ).value;
	var cTelefono = document.getElementById( 'telefono' ).value;
	var cEmail = document.getElementById( 'email' ).value;
	//
	// Validación
	if( cNombre.replace(/^\s*|\s*$/g , '') == '' || valorPorDefecto( cNombre ) )
	{
		alert( 'Todos los campos deben ser cumplimentados. Por favor, revíse el campo del nombre.' );
		document.getElementById( 'nombre' ).focus();
		return false;	
	}
	else if( cDireccion.replace(/^\s*|\s*$/g , '') == '' || valorPorDefecto( cDireccion ) )
	{
		alert( 'Todos los campos deben ser cumplimentados. Por favor, revíse el campo de la dirección postal.' );
		document.getElementById( 'direccion' ).focus();
		return false;
	}
	else if( cCp.replace(/^\s*|\s*$/g , '') == '' || valorPorDefecto( cCp ) )
	{
		alert( 'Todos los campos deben ser cumplimentados. Por favor, revíse el campo del código postal.' );
		document.getElementById( 'cp' ).focus();
		return false;
	}
	else if( cLocalidad.replace(/^\s*|\s*$/g , '') == '' || valorPorDefecto( cLocalidad ) )
	{
		alert( 'Todos los campos deben ser cumplimentados. Por favor, revíse el campo de la localidad.' );
		document.getElementById( 'localidad' ).focus();
		return false;
	}
	else if( cProvincia.replace(/^\s*|\s*$/g , '') == '' || valorPorDefecto( cProvincia ) )
	{
		alert( 'Todos los campos deben ser cumplimentados. Por favor, revíse el campo de la provincia.' );
		document.getElementById( 'provincia' ).focus();
		return false;
	}
	else if( cTelefono.replace(/^\s*|\s*$/g , '') == '' || valorPorDefecto( cTelefono ) )
	{
		alert( 'Todos los campos deben ser cumplimentados. Por favor, revíse el campo del teléfono.' );
		document.getElementById( 'telefono' ).focus();
		return false;
	}
	else if( cEmail.replace(/^\s*|\s*$/g , '') == '' || valorPorDefecto( cEmail ) )
	{
		alert( 'Todos los campos deben ser cumplimentados. Por favor, revíse el campo del e-mail.' );
		document.getElementById( 'email' ).focus();
		return false;
	}
	else if( !checkEmail( cEmail ) )
	{
		alert( 'Campo e-mail incorrecto. Por favor, revíselo.' );
		document.getElementById( 'email' ).focus();
		return false;	
	}
	else if( !checkTelefono( cTelefono ) )
	{
		alert( 'Campo teléfono incorrecto. Por favor, revíselo.' );
		document.getElementById( 'telefono' ).focus();
		return false;	
	}
	else if( !checkCp( cCp ) )
	{
		alert( 'Campo código postal incorrecto. Por favor, revíselo.' );
		document.getElementById( 'cp' ).focus();
		return false;	
	}
	//
	// Validación DNI/NIE (Sólo si existe) [6]
	var cNif = "";
	if( document.getElementById( 'nif' ) != undefined )
	{
		var cTipoIdentificador = "NIF";
		if( document.getElementById( 'selectTipoNif' ) )
			cTipoIdentificador = document.getElementById( 'selectTipoNif' ).value;
		cNif = document.getElementById( 'nif' ).value;
		if( !checkNIF( cNif , cTipoIdentificador ) )
		{
			if( cTipoIdentificador == "NIF" )
				alert( 'Campo DNI incorrecto. El NIF debe tener 8 dígitos y una letra, sin espacios ni ningún otro separador' ); //[7]
			else
				alert( 'Campo DNI incorrecto. El NIE debe comenzar por X o Y, seguido de 7 dígitos y una letra, sin espacios ni ningún otro separador' ); //[7]
			document.getElementById( 'nif' ).focus();
			return false;
		}
	}
	var cParameters = 'accion=GrabarDatosEntrega&params=';
	cParameters += urlEncode(cNombre) + '***' + urlEncode(cDireccion) + '***' + cCp + '***' + urlEncode(cLocalidad) + '***' + urlEncode(cProvincia) + '***' + cTelefono + '***' + urlEncode(cEmail) + '***' + urlEncode(cNif); //[1][6]
	//
	// ¡¡¡OJO!!! Se quitan aquí las posibles comas que se hayan podido meter en los campos porque si no da fallo
	// al obtener la acción, puesto que en otras funciones la variable params utiliza comas para separar valores
	// (Ver parte final del explotacion.php de tienda)
	// [1]
	cParameters = cParameters.replace( ',' , '' );
	AjaxRequest( '../Modulos/tienda/explotacion.php' , cParameters , CallBackConfirmarPedido );
}
///
/// CallBack de Ajax de petición de configuración de la tienda
///
function CallBackConfirmarPedido( xmlhttp )
{
	if( xmlhttp.readyState == 4 && xmlhttp.status == 200 )
	{
		if( xmlhttp.responseText.substr( 0 , 2 ) == 'OK' )
			EjecutarFuncionPHP( 'tienda' , 'accion=PresentarPedido' );
		else
			alert( 'Error modificando producto en el pedido: ' + xmlhttp.responseText );
	}
}
///
/// Testea la 'posibilidad' de que la dirección e-mail pasada sea válida
///
function checkEmail( cEmail ) 
{
	var filter = /^([a-zA-Z0-9_.-])+@(([a-zA-Z0-9-])+.)+([a-zA-Z0-9]{2,4})+$/;
	if ( !filter.test( cEmail ) ) 
		return false;
	return true;
}
/*
///
/// Comprueba que el valor pasado es el de por defecto
/// [2]
function valorPorDefecto( cValor )
{
	var cNoValido = 'INTRODUZCA'; 
	if( cValor.substring( 0 , 10 ).toUpperCase() == cNoValido )
		return true;
	return false;
}
*/
///
/// Testea la 'posibilidad' de que la dirección e-mail pasada sea válida
///
function checkTelefono( cTelefono ) 
{
	var filter = /^[0-9]{2,3}-? ?.?[0-9]{6,7}$/;
	if ( !filter.test( cTelefono ) ) 
		return false;
	return true;
}
///
/// Testea la 'posibilidad' de que la dirección e-mail pasada sea válida
///
function checkCp( cCp ) 
{
	var filter = /^([1-9]{2}|[0-9][1-9]|[1-9][0-9])[0-9]{3}$/;
	if ( !filter.test( cCp ) ) 
		return false;
	return true;
}
///
/// Muestra el resumen de pedido
/// CallBack de index.php (situa el retorno en la retícula MAIN)
///
function PresentarPedido()
{
	var cParameters = 'accion=PresentarPedido';
	AjaxRequest( '../Modulos/tienda/explotacion.php' , cParameters , CallBackEjecucion );
}
///
/// Redirige a la forma de pago adecuada (Paso4)
/// CallBack de index.php (situa el retorno en la retícula MAIN)
///
function PasarelaPago()
{
	var oPasarela = document.getElementsByName( 'formaPago' );
	var cFormaPago = '';
	for( i=0; i<oPasarela.length; i++ )
		if( oPasarela.item(i).checked )
			cFormaPago = oPasarela.item(i).value;		
	//		
	if( cFormaPago == '' )
	{
		alert( 'Debe seleccionar un modo de pago. Por favor, seleccione una forma de pago.' );
		return false;
	}
	//
	// Si se han definido zonas de envío, obligar a seleccionar una
	// [5]
	var oZonasEnvio = document.getElementsByName( 'zonasPortes' );
	var cZonaEnvio = '';
	for( i=0; i<oZonasEnvio.length; i++ )
		if( oZonasEnvio.item(i).checked )
			cZonaEnvio = oZonasEnvio.item(i).value;
	//	
	if( oZonasEnvio.length > 0 && cZonaEnvio == '' )
	{
		alert( 'Debe seleccionar una zona de envío. Por favor, seleccione una zona de envío.' );
		return false;
	}
	//
	var cParameters = 'accion=PresentarFormaPago&params=' + cFormaPago;
	AjaxRequest( '../Modulos/tienda/explotacion.php' , cParameters , CallBackEjecucion );
}
///
/// Muestra la información de la forma de pago seleccionada
///
function infoFormaPago( cSeleccionado , cResto )
{
	var aDivs = cResto.split( ';' );
	for( var i=0; i<aDivs.length; i++ )
	{
		document.getElementById( 'formaPago' + aDivs[i] ).checked = false;
		document.getElementById( 'infoFormaPago' + aDivs[i] ).style.display = 'none';
	}
	document.getElementById( 'formaPago' + cSeleccionado ).checked = true;
	document.getElementById( 'infoFormaPago' + cSeleccionado ).style.display = 'block';
	//
	// Comprobar si la forma de pago seleccionada implica un recargo en los portes
	// [5]
	var cParameters = 'pago=' + cSeleccionado;
	AjaxRequest( '../Modulos/tienda/calcular_portes.php' , cParameters , CallBackActualizarPortes );
}
///
/// Presenta la página de finalización de la compra
///
function FinCompra()
{
	var cParameters = 'accion=PresentaFinCompra';
	AjaxRequest( '../Modulos/tienda/explotacion.php' , cParameters , CallBackEjecucion );
}
///
/// Al seleccionar una zona de envío, actualiza los portes
/// [5]
///
function ZonaEnvio( oElemento )
{
	var cParameters = 'zona=' + oElemento.value;
	AjaxRequest( '../Modulos/tienda/calcular_portes.php' , cParameters , CallBackActualizarPortes );
}
///
/// CallBack de Ajax para actualizar los portes del pedido
/// [5]
///
function CallBackActualizarPortes( xmlhttp )
{
	if( xmlhttp.readyState == 4 && xmlhttp.status == 200 )
	{
		var oPortes = xmlhttp.responseText.split(";");
		document.getElementById("totalPortes").innerHTML = oPortes[0];
		document.getElementById("totalPedido").innerHTML = oPortes[1];
	}
}

