function fnValidarValuesGeneralSF(lstrFormulario)
{
	// Para usar esta funcion debemos colocar a continuacion del campo de tipo text o password
	// un campo oculto con el mensajito que quiere que muestre el ALERT.
	// Si queremos que un campo no sea validado, debemos ponerle "NoRequerido" al value del campo oculpo
	var lstrCaracteresNoPermitidos = new RegExp("\'")
	var lstrTope
	lstrTope = lstrFormulario.elements.length
	for(var i =0;i < lstrTope; i++)
	{
		if ((lstrFormulario.elements[i].type == 'text' || lstrFormulario.elements[i].type == 'password') && (lstrFormulario.elements[i+1].value != 'NoRequerido'))
		{
			if (lstrFormulario.elements[i].value == '')
			{
				alert('Debe completar: ' + lstrFormulario.elements[i+1].value + '.') 
				lstrFormulario.elements[i].focus()
				return false;
			}
			if (lstrCaracteresNoPermitidos.test(lstrFormulario.elements[i].value))
			{
				alert("No se permiten los siguientes caracteres: '.")	
				lstrFormulario.elements[i].focus()
				return false;
			}
		}
		if ((lstrFormulario.elements[i].type == 'select-one') && (lstrFormulario.elements[i].options[lstrFormulario.elements[i].selectedIndex].value == '0') && (lstrFormulario.elements[i+1].value != 'NoRequerido'))
		{
				alert('Debe seleccionar una opción.') 
				lstrFormulario.elements[i].focus()
				alert("hola")
				return false;
		}
	}	
	//lstrFormulario.submit()
	// En vez de enviar el form, podriamos hacer que llame a otro funcion
	// propia de la pagina que haga validaciones particulares y esa funcion
	// se encargue de enviar el mail.
	// Por ej que llame:
	fnValidarValuesParticular(lstrFormulario)	
}

function fnValidarValuesGeneral(lstrFormulario)
{
	// Para usar esta funcion debemos colocar a continuacion del campo de tipo text o password
	// un campo oculto con el mensajito que quiere que muestre el ALERT.
	// Si queremos que un campo no sea validado, debemos ponerle "NoRequerido" al value del campo oculpo
	var lstrCaracteresNoPermitidos = new RegExp("\'")
	var lstrTope
	lstrTope = lstrFormulario.elements.length
	for(var i =0;i < lstrTope; i++)
	{
		if ((lstrFormulario.elements[i].type == 'text' || lstrFormulario.elements[i].type == 'password') && (lstrFormulario.elements[i+1].value != 'NoRequerido'))
		{
			if (lstrFormulario.elements[i].value == '')
			{
				alert('Debe completar: ' + lstrFormulario.elements[i+1].value + '.') 
				if (lstrFormulario.elements[i].disable == false)
				{
					lstrFormulario.elements[i].focus()
				}
				return false;
			}
			if (lstrCaracteresNoPermitidos.test(lstrFormulario.elements[i].value))
			{
				alert("No se permiten los siguientes caracteres: '.")	
				lstrFormulario.elements[i].focus()
				return false;
			}
		}
		if ((lstrFormulario.elements[i].type == 'select-one') && (lstrFormulario.elements[i].options[lstrFormulario.elements[i].selectedIndex].value == '0') && (lstrFormulario.elements[i+1].value != 'NoRequerido'))
		{
				alert('Debe seleccionar una opción.') 
				lstrFormulario.elements[i].focus()
				return false;
		}
	}	
	//lstrFormulario.submit()
	// En vez de enviar el form, podriamos hacer que llame a otro funcion
	// propia de la pagina que haga validaciones particulares y esa funcion
	// se encargue de enviar el mail.
	// Por ej que llame:
	fnValidarValuesParticular(lstrFormulario)	
}

function strtrim(str) 
{
   return str.replace(/^\s+/,'').replace(/\s+$/,'');
}


function fnValidarEmail(str) 
{  
  
  str = strtrim(str)
  
  var supported = 0;
  if (window.RegExp)
  {
	var tempStr = "a";
	var tempReg = new RegExp(tempStr);
	if (tempReg.test(tempStr)) supported = 1;
  }
  if (!supported) 
    return (str.indexOf(".") > 2) && (str.indexOf("@") > 0);
  var r1 = new RegExp("(@.*@)|(\\.\\.)|(@\\.)|(^\\.)");
  var r2 = new RegExp("^.+\\@(\\[?)[a-zA-Z0-9\\-\\.]+\\.([a-zA-Z]{2,3}|[0-9]{1,3})(\\]?)$");
  return (!r1.test(str) && r2.test(str));
}

function fnAbrirVentana(url,nombre,caracteristicas)
{
	window.open(url,nombre,caracteristicas);
}

function fDateConvert( vDateSource )
{

var vDateTemp
var vSeparator , vLanguageSource 
var vReturn
var vLen , vQuantity
var vFor
var vField1 , vField2 , vField3
var vDay , vMonth , vYear
vPosition = new Array(30)

//## SETTING PARAMETERS

vSeparator      = "/"
vLanguageSource = "CASTILIAN"
vReturn         = ""

//## CONTROLLING PARAMETERS ( vLanguageSource )

if ( vLanguageSource != "ENGLISH" && vLanguageSource != "CASTILIAN" )
	{
	vReturn = "BAD, Invalid language (error 01)"
	return vReturn
	}
	
//## CONTROLLING PARAMETERS ( vSeparator quantity )	

if ( vSeparator != "-" && vSeparator != "/" )
	{
	vReturn = "BAD, Invalid separator (error 02)"
	return vReturn
	}

vLen      = vDateSource.length
vQuantity = 0
for ( vFor=0 ; vFor<vLen ; vFor++) 
	{
	if ( vDateSource.substr(vFor,1) == vSeparator ) 
		{
		vQuantity = vQuantity + 1
		vPosition[vQuantity] = vFor
		}
	}
if ( vQuantity != 2 )
	{
	vReturn = "BAD, Invalid separator quantity (error 03)"
	return vReturn
	}

//## VALIDATING 

if ( vLen < 5 )
	{
	vReturn = "BAD, Invalid character quantity (error 04)"
	return vReturn
	}

//## CUTTING STRING ( vDateSource )	

vField1 = ""
vField2 = ""
vField3 = ""
vField1 = vDateSource.substr( 0 , vPosition[1] )
vField2 = vDateSource.substr( vPosition[1] + 1  , vPosition[2] - vPosition[1] - 1 )
vField3 = vDateSource.substr( vPosition[2] + 1 , vLen - vPosition[2] )	
	
//## 

vField1 = Number(vField1)
vField2 = Number(vField2)
vField3 = Number(vField3)

if ( isNaN(vField1) || isNaN(vField2) || isNaN(vField3) ) 
	{
	vReturn = "BAD, Invalid argument, all must be a number (error 05)"
	return vReturn
	}

//## TRANSLATING FIELDS

if ( vLanguageSource == "ENGLISH" )
	{
	vDay   = vField2
	vMonth = vField1 - 1
	vYear  = vField3
	}
	else
	{
	vDay   = vField1
	vMonth = vField2 - 1
	vYear  = vField3
	}
	
//# SETTING CENTURY	
	
if ( vYear >= 0 && vYear <= 99 )
	{
	if ( vYear > 49 )
		{
		vYear = vYear + 1900
		}
		else
		{
		vYear = vYear + 2000
		}
	}

//## VALIDATING

vDateTemp = new Date(vYear,vMonth,vDay)

if ( vDay != vDateTemp.getDate() )
	{
	vReturn = "BAD, It is not date (error 10)"
	return vReturn
	}
if ( vMonth != vDateTemp.getMonth() )
	{
	vReturn = "BAD, It is not date (error 11)"
	return vReturn
		}
if ( vYear != vDateTemp.getYear() && vYear != vDateTemp.getFullYear() )
	{
	vReturn = "BAD, It is not date (error 12)"
	return vReturn
	}
	
//## RETURNING DATA	

vReturn = new String(vDateTemp.getFullYear())
if ( vDateTemp.getMonth()+1 > 9 ) 
	{
	vReturn = vReturn + new String(vDateTemp.getMonth()+1) 
	}
	else
	{
	vReturn = vReturn + "0" + new String(vDateTemp.getMonth()+1) 
	}
if ( vDateTemp.getDate() > 9 ) 
	{
	vReturn = vReturn + new String(vDateTemp.getDate()) 
	}
	else
	{
	vReturn = vReturn + "0" + new String(vDateTemp.getDate()) 
	}
	
return vReturn	

}

function fnIrA(lstrForm,Direccion)
{
	lstrForm.action = Direccion
	lstrForm.submit()
}
