var LEFT					=  0;
var RIGHT					=  1;

var NIF						=  0;
var NOMBRE					=  1;
//var APELLIDOS				=  2;
var DIRECCION				=  2;
var CP						=  3;
var POBLACION				=  4;
var PROVINCIA				=  5;
var TELEFONO				=  6;
var EMAIL					=  7;
var CONF_EMAIL				=  8;
var PASSWD					= 9;
var CONF_PASSWD				= 01;

//var RAZON_SOCIAL			= 0;
var NOMBRE_EMPRESA			= 0;

var PERSONA_CONTACTO		= 0;
var TELF_CONTACTO			= 1;
var DIR_CONTACTO			= 2;
var CP_CONTACTO				= 3;
var POBLACION_CONTACTO		= 4;
var PROVINCIA_CONTACTO		= 5;
var PAIS_CONTACTO			= 6;

var PASSWORD_ANTIGUO		= 0;
var PASSWORD_1				= 1;
var PASSWORD_2				= 2;

var M_EMAIL_ERROR			=  0;
var M_EMAIL_USUARIO			=  1;
var M_EMAIL_IP				=  2;
var M_EMAIL_DOMINIO			=  3;
var M_EMAIL_DOMINIO2		=  4;
var M_EMAIL_HOST			=  5;
var M_PASSWD_MIN_LONG		=  6;
var M_PASSWD_MAX_LONG		=  7;
var M_PASSWD_LONG2			=  8;
var M_POR_FAVOR				=  9;
var M_NO_NEGATIVAS			= 10;
var M_INDICA_PAIS			= 11;
var M_EMAIL_NO_COINDICEN	= 12;
var M_PASSWD_NO_COINDICEN	= 13;
var M_IDENTIFICATE			= 14;
var M_REGISTRADO			= 15;
var M_RESPONDE				= 16;
var M_CAMPO_ENTREGA			= 17;
var M_PASSWD_ACTUAL_NO_COINCIDE	= 18;
var M_NUMERO_TARJETA		= 19;
var M_TITULAR_TARJETA		= 20;
var M_MES_TARJETA			= 21;
var M_ANYO_TARJETA			= 22;
var M_NUMERO_TARJETA_VALIDO	= 23;
var M_PAIS_ENTREGA			= 24;
var M_FORMATO_NIF			= 25;
var M_NIF_FALTA_LETRA		= 26;
var M_NIF_ERROR_LETRA		= 27;
var M_CIF_ERROR_LETRA		= 28;
var M_TONLINE_BCO			= 29;
var M_TONLINE_ACN			= 30;
var M_POR_FAVOR_2			= 31;
var M_CONDITIONS			= 32;

var M_NIF_ES				= 33;
var M_NIF_NOES				= 34;

// Variable
var selectPorDefecto;
var ClickedBefore=false;

/******************************************************************************
 *     -[ FUNCIONES ]-                                                        *
 ******************************************************************************/

/**
 * Para inicializar los campos de entrega a los valores de entrega preeestablecidos
 */
function entrega_por_defecto( formulario )
{
	var	valorSelect = formulario.pais_entrega[formulario.pais_entrega.selectedIndex].text;
	// Si está encendido...
	if ( formulario.id_misma_direccion.checked == true )
	{	// Si estamos autenticados, coge los valores registrados
		if ( 'undefined' == typeof(document.form_general.id_nif) )
		{
			formulario.id_entrega_persona_contacto.value	= entrega[NOMBRE];
			formulario.id_entrega_telefono_contacto.value	= entrega[TELEFONO];
			formulario.id_entrega_direccion.value			= entrega[DIRECCION];
			formulario.id_entrega_cp.value					= entrega[CP];
			formulario.id_entrega_poblacion.value			= entrega[POBLACION];
			formulario.id_entrega_provincia.value			= entrega[PROVINCIA];

			// Para recordar la selección del pais por defecto
			selectPorDefecto 								= formulario.pais_entrega[formulario.pais_entrega.selectedIndex].value;
			inicializa_select ( formulario.pais_entrega, entrega[10] );
		}
		else
		{	// Coge los valores de los campos de registro
			formulario.id_entrega_persona_contacto.value	= formulario.id_nombre.value;
			formulario.id_entrega_telefono_contacto.value	= formulario.id_telefono.value;
			formulario.id_entrega_direccion.value			= formulario.id_direccion.value;
			formulario.id_entrega_cp.value					= formulario.id_cp.value;
			formulario.id_entrega_poblacion.value			= formulario.id_poblacion.value;
			formulario.id_entrega_provincia.value			= formulario.id_provincia.value;

			// Para recordar la selección del pais por defecto
			selectPorDefecto 								= formulario.pais_entrega[formulario.pais_entrega.selectedIndex].value;
			inicializa_select ( formulario.pais_entrega, formulario.pais.value );
		}
	}
	else
	{
		formulario.id_entrega_persona_contacto.value 	= formulario.id_entrega_persona_contacto.defaultValue;
		formulario.id_entrega_telefono_contacto.value	= formulario.id_entrega_telefono_contacto.defaultValue;
		formulario.id_entrega_direccion.value			= formulario.id_entrega_direccion.defaultValue;
		formulario.id_entrega_cp.value					= formulario.id_entrega_cp.defaultValue;
		formulario.id_entrega_poblacion.value			= formulario.id_entrega_poblacion.defaultValue;
		formulario.id_entrega_provincia.value			= formulario.id_entrega_provincia.defaultValue;
		inicializa_select ( formulario.pais_entrega, selectPorDefecto );
	}
	
	// Si ha cambiado el pais, tendremos que hacer el submit()
	if ( valorSelect != formulario.pais_entrega[formulario.pais_entrega.selectedIndex].text )
	{
		return formulario.submit();
	}
	else
	{
		return true;
	}
}

/**
 * Para abrir un pop-up que envia el password a la cuenta de email indicada
 */
function recupera_password( mail, href, target )
{
	if ( emailcheck( mail ) )
	{
		window.open( href + '?accion=recuperar_password&email=' + mail.value, target, 'width=350,height=120');
	}
	return false;
}

function muestra_registrado()
{
    if ( 'no' == getSelectedRadioValue(document.form_general.registrado) )
    {
        cambia_visibilidad( '_autenticar_', 'none' );
        cambia_visibilidad( '_registrar_', 'block' );
    }
    else if ( 'si' == getSelectedRadioValue(document.form_general.registrado) )
    {
        cambia_visibilidad( '_registrar_', 'none' );
        cambia_visibilidad( '_autenticar_', 'block' );
    }
}

/**
 * Validar que los valores elegidos en la caja de actualizar password son correctos
 */
function valida_editar_password()
{
    var campos_password	= new Array();

    // Campos del formulario de Registro que queremos VALIDAR
    campos_password[PASSWORD_ANTIGUO]	= document.form_password.id_password_antiguo;
    campos_password[PASSWORD_1]			= document.form_password.id_password;
    campos_password[PASSWORD_2]			= document.form_password.id_password2;

    // Hay algun campo vacio
    for ( i=0; i<campos_password.length; i++ )
    {
        if (!EsNoVacio( campos_password[i].value ))
        {
            alert( mensajes[M_POR_FAVOR] + nombre_campos_password[i] + mensajes[M_POR_FAVOR_2] );
			da_foco( campos_password[i] );
            return false;
        }
    }

    // Contraseñas diferentes
    if ( campos_password[PASSWORD_1].value != campos_password[PASSWORD_2].value )
    {
        alert( mensajes[M_PASSWD_NO_COINDICEN] );
		da_foco( campos_password[PASSWORD_2] );
        return false;
    }

	return true;
}

/**
 * Validar que los valores elegidos en la caja de Productos es la correcta...
 */
function ValidaFormGeneral( nombre_campo )
{
    // Para mirar que no se introduzcan cantidades NEGATIVAS en el producto SELECCIONADO
    for (var i=0; i<document.form_general.length; i++)
    {
        var campo = document.form_general.elements[i];
        if ( campo.id.match("cantidad_") )
        {
            if ( !EsNumeroPositivo( campo.value) )
            {
                alert( mensajes[M_NO_NEGATIVAS] );
				da_foco( campo );
                return false;
            }
        }
    }

    // Para saber si se está autentificado...
    if ( nombre_campo == 'paso_2' ) // Si queremos ir al PASO 2...
    {
        if ( 'undefined' != typeof(document.form_general.email) )
        { // NO se está AUTENTIFICADO, por tanto comprueba los datos
            if ( 'no' == getSelectedRadioValue(document.form_general.registrado) )
            {   // No se está Registrado, por tanto miramos que los valores del formulario sean correctos
                if ( !valida_form_registro() )
                {
                    return false;
                }
            }
            else if ( 'si' == getSelectedRadioValue(document.form_general.registrado) )
            {  // Si se está registrado, por tanto indicamos que se tiene que Identificar...
                alert ( mensajes[M_IDENTIFICATE] );
				da_foco( document.form_general.email );
                return false;
            }
            else
            {   // No ha dicho si está o no Registrado, pues que lo diga!!
                alert ( mensajes[M_REGISTRADO] );
				da_foco( document.form_general.registrado[0] );
                return false;
            }

        }

        ////////////////////////////////////////////////////////////////////////
        // En el caso de que la entrega sea en CDROM, tenemos que mirar que los
        // campos de entrega tengan valor.
        // @@@ HACER...
        if ( 'undefined' != typeof(document.form_general.id_entrega_direccion) )
        {
            if (!valida_datos_entrega ())
            {
                return false;
            }
        }

	    ////////////////////////////////////////////////////////////////////////
	    // Miramos que las preguntas adicionales hayan sido respondidas...
	    if ( 'undefined' != typeof(document.form_general.pregunta_1) )
	    {
	        if (!EsNoVacio( document.form_general.pregunta_1.value ))
	        {
	            alert( mensajes[M_RESPONDE] + ' 1' );
				da_foco( document.form_general.pregunta_1 );
	            return false;
	        }
	    }
	    if ( 'undefined' != typeof(document.form_general.pregunta_2) )
	    {
	        if (!EsNoVacio( document.form_general.pregunta_2.value ))
	        {
	            alert( mensajes[M_RESPONDE] + ' 2' );
	            da_foco( document.form_general.pregunta_2 );
	            return false;
	        }
	    }
	    if ( 'undefined' != typeof(document.form_general.pregunta_3) )
	    {
	        if (!EsNoVacio( document.form_general.pregunta_3.value ))
	        {
	            alert( mensajes[M_RESPONDE] + ' 3' );
	            da_foco( document.form_general.pregunta_3 );
	            return false;
	        }
	    }
	    // Miramos que las preguntas adicionales hayan sido respondidas...
	    ////////////////////////////////////////////////////////////////////////

		// Comprobar que en caso de estar seleccionado el pago con tarjeta o tonline, estén rellenados los datos		
		switch ( getSelectedRadioValue(document.form_general.forma_pago) )
		{
			case 'tarjeta':
				if ( 'undefined' != typeof(document.form_general.tc_caducidad_mes) )
				{
					if ( !valida_datos_tarjeta() )
					{
						return false;
					}
				}
				break;

			case 'tonline':
				if ( !valida_datos_tonline() )
				{
					return false;
				}
				break;
		}
		
		// HACK: Esto es por si no existe el radiobutton de forma_pago
		if ( 'undefined' != typeof(document.form_general.tc_caducidad_mes) &&  'tarjeta' == document.form_general.forma_pago.value )
		{
			if ( !valida_datos_tarjeta() )
			{
				return false;
			}
		}
    }
	return true;
//    return document.form_general.submit();
}

/**
 * Valida que los campos del formulario de tonline tengan valores correctos
 */
function valida_datos_tonline()
{
	if (!EsNoVacio( document.form_general.tonline_bco.value ))
	{
		alert( mensajes[M_TONLINE_BCO] );
		da_foco( document.form_general.tonline_bco );
		return false;
	}

	if (!EsNoVacio( document.form_general.tonline_acn.value ))
	{
		alert( mensajes[M_TONLINE_ACN] );
		da_foco( document.form_general.tonline_acn );
		return false;
	}
	return true;
}

/**
 * Valida que los campos del formulario de tarjeta de crédito tenga valores correctos
 */
function valida_datos_tarjeta()
{
	if ( document.form_general.tc_caducidad_mes.value == -1 )
	{
		alert( mensajes[M_MES_TARJETA] );
		da_foco( document.form_general.tc_caducidad_mes );
		return false;
	}

	if ( document.form_general.tc_caducidad_anyo.value == -1 )
	{
		alert( mensajes[M_ANYO_TARJETA] );
		da_foco( document.form_general.tc_caducidad_anyo );
		return false;
	}

	/*if (!EsNoVacio( document.form_general.tc_numero.value ))
	{
		alert( mensajes[M_NUMERO_TARJETA] );
		da_foco( document.form_general.tc_numero );
		return false;
	}*/

	if (!EsNoVacio( document.form_general.tc_titular.value ))
	{
		alert( mensajes[M_TITULAR_TARJETA] );
		da_foco( document.form_general.tc_titular );
		return false;
	}

	/*if ( !isCreditCard( getSelectedRadioValue( document.form_general.tc_tipo ), document.form_general.tc_numero.value ) )
	{
		alert( mensajes[M_NUMERO_TARJETA_VALIDO] );
		da_foco( document.form_general.tc_numero );
		return false;
	}*/

	return true;
}

/**
 * Para validar todos los campos del REGISTRO
 */
function valida_form_editar_datos()
{
    var campos          = new Array();
    var campos_licencia = new Array();

    // Campos del formulario de Registro que queremos VALIDAR
    campos[NIF]         = document.form_general.id_nif;
    campos[NOMBRE]      = document.form_general.id_nombre;
   // campos[APELLIDOS]   = document.form_general.id_apellidos;
    campos[DIRECCION]   = document.form_general.id_direccion;
    campos[CP]          = document.form_general.id_cp;
    campos[POBLACION]   = document.form_general.id_poblacion;
	campos[PROVINCIA] = document.form_general.id_provincia;
    campos[TELEFONO]    = document.form_general.id_telefono;
    campos[EMAIL]       = document.form_general.id_email;
    campos[CONF_EMAIL]  = document.form_general.id_email2;
    campos[PASSWD]      = document.form_general.id_password;
	campos_pais			= document.form_general.pais;

    // Extra para comprobar el valor de "Razon Social" y "Nombre Empresa"
    //campos_licencia[RAZON_SOCIAL]   = document.form_general.id_razon_social;
    campos_licencia[NOMBRE_EMPRESA] = document.form_general.id_nombre_empresa;

    // Activa la licencia de empresa...
    if ( 'empresa' == getSelectedRadioValue(document.form_general.tipo_usuario) )
    {
        // Razon social o Nombre Empresa vacios
        for ( i=0; i<campos_licencia.length; i++ )
        {
            if ( ( campos_licencia[i] != null ) && !EsNoVacio( campos_licencia[i].value ))
            {
                alert( mensajes[M_POR_FAVOR] + nombre_campos_licencia[i] + mensajes[M_POR_FAVOR_2] );
				da_foco( campos_licencia[i] );
                return false;
            }
        }
    }

    // Hay algun campo vacio
    for ( i=0; i<campos.length; i++ )
    {
        if ( ( campos[i] != null ) && !EsNoVacio( campos[i].value ))
        {
            alert( mensajes[M_POR_FAVOR] + nombre_campos[i] + mensajes[M_POR_FAVOR_2] );
			da_foco( campos[i] );
            return false;
        }
    }

    // Falta por indicar pais
    if (campos_pais.value == 0 )
    {
        alert( mensajes[M_INDICA_PAIS] );
        da_foco( campos_pais );
        return false;
    }

    // Emails diferentes
    if ( campos[EMAIL].value != campos[CONF_EMAIL].value )
    {
        alert( mensajes[M_EMAIL_NO_COINDICEN] );
		da_foco( campos[CONF_EMAIL] );
        return false;
    }

    return valida_form_email( campos[EMAIL], campos[PASSWD] )
}

/**
 * Para validar todos los campos del REGISTRO
 */
function valida_form_registro ()
{
    var campos          = new Array();
    var campos_licencia = new Array();

    // Campos del formulario de Registro que queremos VALIDAR
    if ( "1" == document.form_general.pais.value )
		campos[NIF]     = document.form_general.id_nif;
	else
		campos[NIF]     = null;
	campos[NOMBRE]      = document.form_general.id_nombre;
//    campos[APELLIDOS]   = document.form_general.id_apellidos;
    campos[DIRECCION]   = document.form_general.id_direccion;
    campos[CP]          = document.form_general.id_cp;
    campos[POBLACION]   = document.form_general.id_poblacion;
   	campos[PROVINCIA]   = document.form_general.id_provincia;
	campos[TELEFONO]    = document.form_general.id_telefono;
    campos[EMAIL]       = document.form_general.id_email;
    campos[CONF_EMAIL]  = document.form_general.id_email2;
    campos[PASSWD]      = document.form_general.id_password;
    campos[CONF_PASSWD] = document.form_general.id_password2;

	campos_pais			= document.form_general.pais;

    // Extra para comprobar el valor de "Razon Social" y "Nombre Empresa"
    //campos_licencia[RAZON_SOCIAL]   = document.form_general.id_razon_social;
    campos_licencia[NOMBRE_EMPRESA] = document.form_general.id_nombre_empresa;

    // Activa la licencia de empresa...
    if ( 'empresa' == getSelectedRadioValue(document.form_general.tipo_usuario) )
    {
        // Razon social o Nombre Empresa vacios
        for ( i=0; i<campos_licencia.length; i++ )
        {
            if ( ( campos_licencia[i] != null ) && !EsNoVacio( campos_licencia[i].value ))
            {
                alert( mensajes[M_POR_FAVOR] + nombre_campos_licencia[i] + mensajes[M_POR_FAVOR_2] );
				da_foco( campos_licencia[i] );
                return false;
            }
        }
    }

    // Hay algun campo vacio
	for ( i=0; i<campos.length; i++ )
    {
		if ((campos[i] != null) && (!EsNoVacio( campos[i].value )))
		{
			alert( mensajes[M_POR_FAVOR] + nombre_campos[i] + mensajes[M_POR_FAVOR_2] );
			da_foco( campos[i] );
			return false;
		}
    }

	// Chequeamos que el NIF sea correcto
	if (campos[NIF] != null)
	{
		if ( !CheckNIF( campos[NIF] ) )
		{
			return false;
		}
	}

    // Falta por indicar pais
    if ( campos_pais.value == 0 )
    {
        alert( mensajes[M_INDICA_PAIS] );
        da_foco( campos_pais );
        return false;
    }

    // Emails diferentes
    if ( campos[EMAIL].value != campos[CONF_EMAIL].value )
    {
        alert( mensajes[M_EMAIL_NO_COINDICEN] );
		da_foco( campos[CONF_EMAIL] );
        return false;
    }
    
    // Contraseñas diferentes
    if ( campos[PASSWD].value != campos[CONF_PASSWD].value )
    {
        alert( mensajes[M_PASSWD_NO_COINDICEN] );
		da_foco( campos[CONF_PASSWD] );
        return false;
    }

    return valida_form_email( campos[EMAIL], campos[PASSWD] )
}

function valida_pais_entrega()
{
    var campos_entrega = new Array();
    campos_entrega[PAIS_CONTACTO] = document.form_general.pais_entrega;

	// El pais de entrega no ha sido elegido
	if ( 0 == campos_entrega[PAIS_CONTACTO].value )
	{
		alert( mensajes[M_CAMPO_ENTREGA] + nombre_campos_entrega[PAIS_CONTACTO] );
		da_foco( campos_entrega[PAIS_CONTACTO] );
		return false;
	}
	return ValidaFormGeneral();
}

/**
 * Para validar todos los campos del REGISTRO
 */
function valida_datos_entrega ()
{
    var campos_entrega = new Array();

    // Campos del formulario de Registro que queremos VALIDAR
    campos_entrega[PERSONA_CONTACTO]	= document.form_general.id_entrega_persona_contacto;
    campos_entrega[TELF_CONTACTO]		= document.form_general.id_entrega_telefono_contacto;
    campos_entrega[DIR_CONTACTO]		= document.form_general.id_entrega_direccion;
    campos_entrega[CP_CONTACTO]			= document.form_general.id_entrega_cp;
    campos_entrega[POBLACION_CONTACTO]	= document.form_general.id_entrega_poblacion;
   	campos_entrega[PROVINCIA_CONTACTO]	= document.form_general.id_entrega_provincia;
    campos_entrega[PAIS_CONTACTO] 		= document.form_general.pais_entrega;

    // Hay algun campo vacio
    for ( i=0; i<campos_entrega.length; i++ )
    {
        if ( ( campos_entrega[i] != null ) && !EsNoVacio( campos_entrega[i].value ) )
        {
            alert( mensajes[M_CAMPO_ENTREGA] + nombre_campos_entrega[i] );
            da_foco( campos_entrega[i] );
            return false;
        }
    }

	// El pais de entrega no ha sido elegido
	if ( 0 == campos_entrega[PAIS_CONTACTO].value )
	{
		alert( mensajes[M_CAMPO_ENTREGA] + nombre_campos_entrega[PAIS_CONTACTO] );
		da_foco( campos_entrega[PAIS_CONTACTO] );
		return false;
	}
	
    return true;
}

/**
 * Comprobamos que el email y el password tengan valores válidos
 */
function valida_form_email ( email, password )
{
    return emailcheck( email ) && LongitudPassword( password, 1, 50 );
}

/**
 * Mira que la longitud de la cadena introducida tenga entre un mínimo 'min_long' de 
 * caracteres y un 'max_long'
 */
function LongitudPassword( campo, min_long, max_long )
{
    if (campo.value.length<min_long)
    {
        alert( mensajes[M_PASSWD_MIN_LONG] + min_long + mensajes[M_PASSWD_LONG2] );
        da_foco( campo );
        return false;
    }
	else if (campo.value.length>max_long)
	{
        alert( mensajes[M_PASSWD_MAX_LONG] + max_long + mensajes[M_PASSWD_LONG2] );
        da_foco( campo );
        return false;
	}
	return true;
}

/**
 * Si el valor del campo de pais es de españa...
 * 
 * Hace visible el DIV del NIF (en caso contrario lo oculta).
 * Modifica el value del campo dado para que siga el formato:
 *
 * xxxxxxxxY
 *
 * Donde:
 *
 * - x representa un dígito
 * - Y representa una letra
 *
 * @param string campo_nif
 * @param string div_nif
 * @return bool
 */
function MuestraFormateaNIF ( campo_nif, div_nif )
{
	var formulario = document.form_general;

	changeNIFText( formulario.pais.value );
	
	// Ahora en caso de cualquier país menos los alemanes, mostramos el div_nif
	switch ( formulario.pais.value )
	{
		case '3':
			cambia_visibilidad( div_nif, 'none' );
			return true;
		break;

		case '1':
			cambia_visibilidad( div_nif, 'block' );
			divWrite( 'text_nif', mensajes[M_NIF_ES] );
			break;
		
		default:
			cambia_visibilidad( div_nif, 'block' );
			divWrite( 'text_nif', mensajes[M_NIF_NOES] );
			return true;
			break;
	}

	// Si no se ha rellenado nada, no lo formatea
	if ( campo_nif.value.length == 0 ) return true;

	// Todo a mayúsculas
	campo_nif.value = campo_nif.value.toUpperCase();

	// Miramos si es un NIF particular o de empresa
	if ( getSelectedRadioValue( formulario.tipo_usuario ) == 'particular' ) // particular
	{
		// Eliminamos los espacios y los guiones
		campo_nif.value = stripNonAllowed( campo_nif.value, '0123456789TRWAGMYFPDXBNJZSQVHLCKE' );

		// Si no acaba en letra
		if ( campo_nif.value.search(/[a-zA-Z]$/) == -1 )
		{
			// Si faltan números, rellenamos con 0's a la izquierda
			if ( campo_nif.value.length < 8 )
			{
			    campo_nif.value = string_pad( campo_nif.value, 8, LEFT );
			}
		}
		else
		{
			// Si faltan números, rellenamos con 0's a la izquierda
			if ( campo_nif.value.length < 9 )
			{
			    campo_nif.value = string_pad( campo_nif.value, 9, LEFT );
			}
		}
	}
	else if ( getSelectedRadioValue( formulario.tipo_usuario ) == 'empresa' )
	{
		// Eliminamos los espacios y los guiones
		campo_nif.value = stripNonAllowed( campo_nif.value, '0123456789ABCDEFGHKLMNPQS' );
	}
}

/**
 * Cambia el valor del span relativo al texto de NIF
 *
 * @param	string	code	ISO country code
 */
function changeNIFText( code )
{
	switch ( code )
	{
		case '1':
			divWrite( 'text_nif', mensajes[M_NIF_ES] );
			break;

		default:
			divWrite( 'text_nif', mensajes[M_NIF_NOES] );
			return true;
			break;
	}
}

/**
 * Indica si la letra del NIF empleada es la correcta o no
 */
function CheckNIF( campo_nif )
{
	var formulario = document.form_general;

	return true; // @@@ NO COMPROBAMOS NADA!
	
	// Siempre y cuando seamos de España...
	switch ( formulario.pais.value )
	{
		case '1':
		break;
		
		default:
			return true;
	}

	if ( campo_nif.value.length != 9 )
	{
		alert ( mensajes[M_FORMATO_NIF] );
        da_foco( campo_nif );
		return false;
	}

	// Miramos si es un NIF particular o de empresa
	if ( getSelectedRadioValue( formulario.tipo_usuario ) == 'particular' ) // particular
	{
		// Comprobamos que los 8 primeros caracteres sean números
		if ( !/^\d{8}$/.test( campo_nif.value.substring( 0, 8 ) ) )
		{
			alert ( mensajes[M_FORMATO_NIF] );
	        da_foco( campo_nif );
			return false;
		}

		// Miramos que lo último sea una letra
		if ( campo_nif.value.search(/[a-zA-Z]$/) == -1 )
		{
			alert ( mensajes[M_NIF_FALTA_LETRA] );
	        da_foco( campo_nif );
			return false;
		}

		if ( LetraNIF( campo_nif.value.substring( 0, 8 ) ) != campo_nif.value.substring( 8, 9 ) )
		{
			alert ( mensajes[M_NIF_ERROR_LETRA] );
	        da_foco( campo_nif );
			return false;
		}
	}
	else if ( getSelectedRadioValue( formulario.tipo_usuario ) == 'empresa' ) // empresa
	{
		if (!/^[ABCDEFGHKLMNPQS]/.test(campo_nif.value))	// Es una letra de las admitidas ?
		{
			alert( mensajes[M_CIF_ERROR_LETRA] );
			return false;
		}
	}
	return true;
}

/**
 * Calcula la letra correcta de NIF de un DNI
 *
 * @param textform numero_dni
 * @return string
 */
function LetraNIF( numero_dni )
{
	var letras = 'TRWAGMYFPDXBNJZSQVHLCKE';
	var numero = numero_dni%23;

	return letras.substring( numero, numero+1 );
}

function Check_CIF( campo_cif )
{
	if (!/^[A-Za-z0-9]{9}$/.test(campo_cif.value))			// Son 9 dígitos? 
	{
		alert ("Longitud incorrecta, un CIF consta de 9 dígitos");
		return false;
	}
	else if (!/^[ABCDEFGHKLMNPQS]/.test(campo_cif.value))	// Es una letra de las admitidas ?
	{
		alert("El primer dígito es incorrecto, debe ser una letra de las siguientes: A,B,C,D,E,F,G,H,K,L,M,N,P,Q,S ");
		return false;
	}
	return true;

}

/**
 * Realiza múltiples comprobaciones para ver que el EMAIL especificado es válido.
 *
 * @param string email Email address to check
 * @return bool
 */
function emailcheck(email)
{
    var emailStr = email.value;
    var emailPat=/^(.+)@(.+)$/
    var specialChars="\\(\\)<>@,;:\\\\\\\"\\.\\[\\]"
    var validChars="\[^\\s" + specialChars + "\]"
    var quotedUser="(\"[^\"]*\")"
    var ipDomainPat=/^\[(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\]$/
    var atom=validChars + '+'
    var word="(" + atom + "|" + quotedUser + ")"
    var userPat=new RegExp("^" + word + "(\\." + word + ")*$")
    var domainPat=new RegExp("^" + atom + "(\\." + atom +")*$")

    var matchArray=emailStr.match(emailPat)
    if (matchArray==null)
    {
       alert( mensajes[M_EMAIL_ERROR] );
       da_foco( email );
       return false
    }

    var user=matchArray[1]
    var domain=matchArray[2]

    if (user.match(userPat)==null)
    {
        alert( mensajes[M_EMAIL_USUARIO] );
        da_foco( email );
        return false
    }

    var IPArray=domain.match(ipDomainPat)
    if (IPArray!=null)
    {
        for (var i=1;i<=4;i++)
        {
            if (IPArray[i]>255)
            {
                alert( mensajes[M_EMAIL_IP] );
                da_foco( email );
                return false;
            }
        }
        return true
    }

    var domainArray=domain.match(domainPat)
    if (domainArray==null)
    {
        alert( mensajes[M_EMAIL_DOMINIO] );
        da_foco( email );
        return false
    }

    var atomPat=new RegExp(atom,"g")
    var domArr=domain.match(atomPat)
    var len=domArr.length
    if (domArr[domArr.length-1].length<2 || domArr[domArr.length-1].length>4)
    {
        alert( mensajes[M_EMAIL_DOMINIO2] );
        da_foco( email );
        return false
    }

    if (len<2)
    {
        alert( mensajes[M_EMAIL_HOST] );
        da_foco( email );
        return false
    }
    return true;
}

/**
 * Funcion para evaluar si un número pertenece a una determinada clase de tarjeta de crédito
 *
 * @param string creditcard Credit Card Company
 * @param string number Credir Card Number
 * @return bool
 */
function isCreditCard(creditcard, number)
{
	validcard = false;
	ret = stripNonAllowed( number, '0123456789' );

	if ( creditcard == "Mastercard-Eurocard" )
	{
		if (ret.length == 16)
			validcard = true;

		if ((ret.substring (0, 2) >= "51") && (ret.substring (0, 2) <= "55"))
			validcard = true;
		else
			validcard = false;
	}

	if ( creditcard == "VISA" )
	{
		if ((ret.length == 16) || (ret.length ==13))
			validcard = true;

		if (ret.substring (0, 1) != "4")
			validcard = false;
	}

	if ( creditcard == "American-Express" )
	{
		if (ret.length == 15)
			validcard = true;

		if ((ret.substring (0, 2) != "34") && (ret.substring (0, 2) != "37"))
			validcard = false;
	}

	return validcard;
}

/**
 * Simplemente entrega el foco al campo del formulario indicado.
 * @deprec Además de modificar el color de fondo del campo
 */
function da_foco( campo )
{
    // campo.style.backgroundColor = COLOR_ERROR;
	campo.focus();
	return true;
}

/**
 * Chequea un radio, para inicializar su estado en el script
 */
function inicializa_radio ( radioName, valor )
{
	for ( i = 0; i < radioName.length; i++ )
	{
		if ( radioName[i].value == valor )
		{
			radioName[i].checked = true;
			break;
		}
	}
}

/**
 * Selecciona una opcion, para inicializar su estado en el script
 */
function inicializa_select ( selectName, valor )
{
    for ( i = 0; i < selectName.length; i++ )
    {
        if ( selectName.options[i].value == valor )
        {
            selectName.options[i].selected = true;
            break;
        }
    }
}

/**
 * Indica cual es el número de radio pulsado
 */
function getSelectedRadio(buttonGroup)
{
    // returns the array number of the selected radio button or -1 if no button is selected
    if (buttonGroup[0]) { // if the button group is an array (one button is not an array)
        for (var i=0; i<buttonGroup.length; i++)
        {
            if (buttonGroup[i].checked)
            {
                return i
            }
        }
    }
    else
    {
        if (buttonGroup.checked)
        {
            return 0;
        } // if the one button is checked, return zero
    }
    // if we get to this point, no radio button is selected
    return -1;
} // Ends the "getSelectedRadio" function

/**
 * Indica el valor del radio pulsado [emplea la función: getSelectedRadio()]
 */
function getSelectedRadioValue(buttonGroup)
{
    // returns the value of the selected radio button or "" if no button is selected
    var i = getSelectedRadio(buttonGroup);
    if (i == -1)
    {
        return "";
    }
    else
    {
        if (buttonGroup[i])
        { // Make sure the button group is an array (not just one button)
            return buttonGroup[i].value;
        }
        else
        { // The button group is just the one button, and it is checked
            return buttonGroup.value;
        }
    }
} // Ends the "getSelectedRadioValue" function

/**
 * Pasa a visible o invisible una capa
 * ESTADOS POSIBLES --> 'block', 'none'
 */
function cambia_visibilidad( nombreDIV, nuevoEstado )
{
    MM_changeProp(nombreDIV, '', 'style.display', nuevoEstado, 'DIV')
}

/**
 * Para comprobar que el campo del formulario tiene algun valor
 */
function EsNoVacio(inputStr)
{
    return (inputStr.length != 0);
}

/**
 * Para comprobar que es un número positivo
 */
function EsNumeroPositivo( valor )
{
    return !( isNaN(parseInt( valor )) || parseInt( valor ) <= 0 )
}

/**
 * Rellena con un número dado de 0's a la [izquierda|derecha] un string dado
 *
 * @param string str
 * @param int length
 * @param int direction Sentido en el que rellenar de 0's
 * @return string
 */
function string_pad( str, length, direction )
{
	while ( str.length < length )
	{
		if ( direction == LEFT )
		{
			str = '0' + str;
		}
		else if ( direction = RIGHT )
		{
			str = str + '0';
		}
	}
	return str;
}

/**
 * Elimina los caracteres no permitidos en un string
 *
 * @param string InString
 * @param string charstring Allowed chars
 * @return string
 */
function stripNonAllowed( InString, charstring )
{
	OutString = "";
	
	for (count=0; count < InString.length; count++)
	{
		tempchar = InString.substring(count, count+1);
		strip = false;

		for (countx=0; countx < charstring.length; countx++)
		{
			stripthis = charstring.substring(countx, countx+1)
			if (tempchar == stripthis)
			{
				strip = true;
				break;
			}
		}
		
		if (strip)
		{
			OutString = OutString + tempchar;
		}
	}
	return (OutString);
}

function divWrite( divName, divValue )
{
	var div = document.getElementById( divName );
	div.innerHTML = divValue;
}

/**
 * Necesaria para el intercambio de visibilidad de <DIV>
 */
function MM_findObj(n, d)
{ //v4.01
  var p,i,x;

  if(!d) d=document;
  if((p=n.indexOf("?"))>0&&parent.frames.length)
  {
    d=parent.frames[n.substring(p+1)].document;
    n=n.substring(0,p);
  }
  if(!(x=d[n])&&d.all) x=d.all[n];
  for (i=0;!x&&i<d.forms.length;i++)
    x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++)
    x=MM_findObj(n,d.layers[i].document);
  if(!x && d.getElementById)
    x=d.getElementById(n);
  return x;
}

/**
 * Necesaria para el intercambio de visibilidad de <DIV>
 */
function MM_changeProp(objName,x,theProp,theValue)
{ //v6.0
  var obj = MM_findObj(objName);
  if (obj && (theProp.indexOf("style.")==-1 || obj.style))
  {
    if (theValue == true || theValue == false)
      eval("obj."+theProp+"="+theValue);
    else eval("obj."+theProp+"='"+theValue+"'");
  }
}

function DisableSecondClick( input )
{
	if ( ClickedBefore == true )
	{
		input.disabled = true;
	}
	else
	{
		ClickedBefore = true;
	}
}