/*************************************************************************
** Valida la cantidad de caracteres que pueden pasar por el header HTTP **
*************************************************************************/
function validaLongitud(objeto, longitud)
{
	var strObjeto = new String(objeto.value);
	longObjeto = strObjeto.length;

	if (longObjeto > longitud)
		return longObjeto;
	else
		return 0;
}

/******************************
**	Valida si es un Tag HTML **
*******************************/
function validateTag(sString) {
	if (jsTrim(sString) == '')
		return false;

	if (sString.toUpperCase().indexOf('SCRIPT') >= 0)
		return true;

	var re = new RegExp("<(.*)>.*<\/(.*)>", "im");
	var arr = re.exec(sString);

	if (arr == null)
		return false;

	if (arr.length > 2)
		if (arr[1].toUpperCase() == arr[2].toUpperCase())
			return true;

	return false;
}

/*********************************************************************************
**	Valida si es un Tag **
**	Funciona como el ValidateTag que se ejecuta en el server					**
**	Si hay algo entre < y > no lo deja pasar, sin importar lo que haya dentro	**
**	no acepta: <a href="mailto:test@test.com">aaa</a>
**			   <a href="mailto:test@test.com">aa
**				a</a>
**				si es a < b y luego c > a no funciona
*********************************************************************************/
	function isTag(sString) {
		if (jsTrim(sString) == '')
			return false;
		if (sString.toUpperCase().indexOf('SCRIPT') >= 0)
			return true;
		var re = new RegExp("<\/?(.*)>.*", "g");
		var arr = re.test(sString);
		return arr;

	}
	
/******************************************************************************
**	Compara dos fechas y devuelve TRUE si fechaMayor es mayor que fechaMenor **
******************************************************************************/
function comparaFecha(fechaMenor, fechaMayor)
{
	tmpstrFecExpira = DateInputFix(fechaMayor);
	tmpSplitFecExpira = tmpstrFecExpira.split("/");
	
	dia1 = eval(tmpSplitFecExpira[0]);
	mes1 = eval(tmpSplitFecExpira[1]) - 1;
	ano1 = eval(tmpSplitFecExpira[2]);
	fecExpira = new Date(ano1, mes1, dia1);

	tmpstrFecPublic = DateInputFix(fechaMenor);
	tmpSplitFecPublic = tmpstrFecPublic.split("/");

	dia2 = eval(tmpSplitFecPublic[0]);
	mes2 = eval(tmpSplitFecPublic[1]) - 1;
	ano2 = eval(tmpSplitFecPublic[2]);
	fecPublic = new Date(ano2, mes2, dia2);
			
	difMilSeg = fecExpira - fecPublic;
	if (difMilSeg >= 0)
		return true;
	else
		return false;
}


/******************************************************************************
**	Compara dos fechas y devuelve TRUE solo si fechaMayor es mayor que fechaMenor **
******************************************************************************/
function comparaFechaMayor(fechaMenor, fechaMayor)
{
	tmpstrFecExpira = DateInputFix(fechaMayor);
	tmpSplitFecExpira = tmpstrFecExpira.split("/");
	
	dia1 = eval(tmpSplitFecExpira[0]);
	mes1 = eval(tmpSplitFecExpira[1]) - 1;
	ano1 = eval(tmpSplitFecExpira[2]);
	fecExpira = new Date(ano1, mes1, dia1);

	tmpstrFecPublic = DateInputFix(fechaMenor);
	tmpSplitFecPublic = tmpstrFecPublic.split("/");

	dia2 = eval(tmpSplitFecPublic[0]);
	mes2 = eval(tmpSplitFecPublic[1]) - 1;
	ano2 = eval(tmpSplitFecPublic[2]);
	fecPublic = new Date(ano2, mes2, dia2);
			
	difMilSeg = fecExpira - fecPublic;
	if (difMilSeg > 0)
		return true;
	else
		return false;
}
/**********************************************
** Verifica que id_date sea una fecha válida **
**********************************************/
function isDate(id_date)
{
	var tmpDate,tmpDateParts,tmpHourParts = new String;
	var tmpDay,tmpMonth,tmpYear,tmpHour,tmpMinute = new Number;
	var hasHour=new Boolean;
	var tmpSplit=new Array;
	var months=new Array(31,28,31,30,31,30,31,31,30,31,30,31);
	var reDate=/^\d+\/\d+\/\d+$/;
	var reHour=/^\d+:\d+$/;
		
	tmpDate=DateInputFix(id_date);
	tmpSplit=tmpDate.split(" ");
		
	switch(tmpSplit.length)
	{
		case 1:
			hasHour=false;
			break;
		case 2:
			hasHour=true;
			break;
		default:
			return(false);
	}
		
	if (!reDate.test(tmpSplit[0])) { return(false); }
			
	tmpDateParts=tmpSplit[0].split("/");

	if (hasHour==true)
	{
		if (!reHour.test(tmpSplit[1])) { return(false);	}

		tmpHourParts=tmpSplit[1].split(":");
		tmpHour=parseInt(tmpHourParts[0],10);
		tmpMinute=parseInt(tmpHourParts[1],10);
		
		if (tmpHour<0 || tmpHour>24 || tmpMinute<0 || tmpMinute>59) { return(false); } 
	}

	tmpDay=parseInt(tmpDateParts[0],10);
	tmpMonth=parseInt(tmpDateParts[1],10);
	tmpYear=parseInt(tmpDateParts[2],10);
	
	if (tmpMonth<1 || tmpMonth>12 || tmpDay>31 || tmpDay<1) { return(false); }
	if (tmpDateParts[2].length != 4) { return(false); }
	if ((tmpYear % 4==0 && tmpYear % 100!=0) || tmpYear % 400==0) { months[1]=29; }
	if (tmpDay>months[tmpMonth-1]) { return(false);	}
	if (tmpYear > 9999) {	return(false); }
	return(true);
}


/*********************************************
** Devuelve una fecha con barras divisorias **
*********************************************/
function DateInputFix(df_date)
{
	df_date=df_date.replace(/ +/g," ");
	df_date=df_date.replace(/^ /,"");
	df_date=df_date.replace(/ $/,"");
	df_date=df_date.replace(/ *\/ */g,"/");
	df_date=df_date.replace(/ *: */,":");

	return(df_date);
}

/**********************************
** Verifica si es una URL válida **
**********************************/
function verifURL(cadeurl)
{
	cadena = cadeurl.substring(0,4);
	largo = cadeurl.length;
	if (cadeurl.indexOf('www') > 0)
	{
		// Si tiene www al principio entonces tiene que tener más de un punto
		punto = cadeurl.indexOf('.');
		puntos = 0;
		while (punto > 0)
		{
			puntos ++;
			punto ++;
			punto = cadeurl.indexOf('.', punto);
		}
		if (puntos <= 1)
			return true;
	}
	else
		if (cadeurl.indexOf('.') < 0)
			return true;
	
	//fin1 = cadeurl.substr(largo-3,1);
	//fin2 = cadeurl.substr(largo-4,1);

	cadena = cadena.toLowerCase();
	otracadena = cadeurl.substring(0,7);
	otracadena = otracadena.toLowerCase();

	if (!(otracadena == "http://"))
		return true;
	//else if (!(fin1 == ".") && !(fin2 == "."))
	//	return true;
	
	cade2 = cadeurl.substring(7,8)
	if (cade2 == "/")
	{
		return true
	}
}


/*********************************************************
** Valida si descrip tiene solamente espacios en blanco **
*********************************************************/
function blancodesc(descrip)
{
	cont=0;
		
	if (descrip.length == 0)
		return true;
	
	for (l=0; l<descrip.length;l++)
		if (descrip.substring(l,l+1)== " ")
			cont++;

	if (cont == descrip.length)
		return true;
	else
		return false;
}


/**************************************************
** Valida que sea una dirección de mail correcta **
**************************************************/
function isEmailAddr(email)
{
	var filter  = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
	return filter.test(email)
}

/***************************************************************
** Verifica que la extensión del archivo sea el de una imágen **
***************************************************************/
function verifimagen(cadena)
{
	cadena=cadena.substring(cadena.length,cadena.length-3)
	cadena=cadena.toLowerCase()
		
	if (!(cadena == "gif") && !(cadena == "jpg"))
		return true;
}


/**********************************************
** Verifica que id_time sea una hora válida **
**********************************************/
function isTime(id_time)
{
	var tmpHour,tmpMinute = new Number;
	var reHour=/^\d+:\d+$/;
		
	if (!reHour.test(id_time)) { return(false);	}

	tmpHourParts=id_time.split(":");
	tmpHour=parseInt(tmpHourParts[0],10);
	tmpMinute=parseInt(tmpHourParts[1],10);
	
	if (tmpHour<0 || tmpHour>24) { return(false); } 
	
	if (tmpMinute<0 || tmpMinute>59) { return(false); } 

	return(true);
}



/****************************************************
** Arma una cadena reemplazando cada coma con "\," **
****************************************************/
function strComma(aFrases)
{
	var hayComa;
	var expReg = /([^\\]),/;

	for(contFrase=0; contFrase < aFrases.length; contFrase++)
	{
		var strFrase = new String(aFrases[contFrase]);

		hayComa = expReg.test(strFrase);
		while (hayComa)
		{
			strFrase = strFrase.replace(expReg, RegExp.$1 + '\\,');
			hayComa = expReg.test(strFrase);
		}

		aFrases[contFrase] = strFrase;
	}
	return aFrases;
}


/*****************************************************
** Arma una cadena reemplazando cada coma con "|^|" **
*****************************************************/
function sacaComa(strFrase)
{
	var hayComa;

	hayComa = strFrase.search(',');
	while (hayComa > 0)
	{
		strFrase = strFrase.replace(',', '|^|');
		hayComa = strFrase.search(',');
	}
	return strFrase;
}
	

/*********************************************************
** Arma una cadena reemplazando cada "|^|" por una coma **
*********************************************************/
function poneComa(strFrase)
{
	var hayCaracter;
		
	hayCaracter = strFrase.indexOf('|^|', 0);
	while (hayCaracter > 0)
	{
		strFrase = strFrase.replace('|^|', ',');
		hayCaracter = strFrase.indexOf('|^|', 0);
	}
	return strFrase;	
}

/*************************************************************************
** Valida lel string solo contenga digitos(0123456789)                  **
*************************************************************************/
function isNum(argvalue) {
	argvalue = argvalue.toString();
	for (var n = 0; n < argvalue.length; n++)
		if (argvalue.substring(n, n+1) < "0" || argvalue.substring(n, n+1) > "9")
				return false;

	return true;
}

/*************************************************************************
** Utiliza para validar cliente en atencion                             **
*************************************************************************/
function ValidaCltAten(objNumCliente){

		if (objNumCliente.value == "" || blancodesc(objNumCliente.value) ){
			alert("Es necesario capturar el número de cliente ");
			objNumCliente.focus();
			return false;			
		}
		if (!isNum( objNumCliente.value )   ){
			alert ("El número de cliente no permite caracteres");
			objNumCliente.focus();
			return false;
		}
		return true;
}	

/*************************************************************************
** Verifica si es un numero entero			                            **
*************************************************************************/
function isInt(pCadena){
	if(pCadena.search(/^[0-9]+$/) == -1)
		return false;
	else
		return true;
}	

/*************************************************************************
** Saca los espacios en blanco a izquierda y derecha (Trim en VB)       **
*************************************************************************/
function jsTrim(sf_string){
	sf_string=sf_string.replace(/ +/g," ");
	sf_string=sf_string.replace(/^ /,"");
	sf_string=sf_string.replace(/ $/,"");
	sf_string=sf_string.replace(/\s/g,"");
	return(sf_string);
}

function validaNickName(field){
	//Caracteres que vamos a permitir que sean introducidos
		var valid = "_ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"
		var ok = "yes";
		var temp;
		for (var i=0; i<field.value.length; i++) {
			temp = "" + field.value.substring(i, i+1);

			if (valid.indexOf(temp) == "-1") ok = "no";
		}

		if (ok == "no") {
			return false;
		}

		return true;
}

// Returns true if character c is a digit 
// (0 .. 9).

function isDigit (c)
{   return ((c >= "0") && (c <= "9"))
}

function isFloat (s)

{   var i;
    var seenDecimalPoint = false;
    var decimalPointDelimiter = ".";


    if (s == decimalPointDelimiter) return false;

    // Search through string's characters one by one
    // until we find a non-numeric character.
    // When we do, return false; if we don't, return true.

    for (i = 0; i < s.length; i++)
    {   
        // Check that current character is number.
        var c = s.charAt(i);

        if ((c == decimalPointDelimiter) && !seenDecimalPoint) seenDecimalPoint = true;
        else if (!isDigit(c)) return false;
    }

    // All characters are numbers.
    return true;
}

function limitLength(oObject, oEvent, iLength){
    
    var bReturnValue = true;
    
    /* Internet Explorer */
    if (!oEvent.which && oObject.value.length>=iLength)
		bReturnValue = false;
	
	/* NS4, NS6+ (allow backspace key) */
    else if (oEvent.which && oEvent.which!=8 && oObject.value.length>=iLength) 
		bReturnValue = false;
		
    return bReturnValue;
}

/****************************************************************
valida los carecteres especiales para el campo de direccion de contacto
****************************************************************/
function isInvalidSpecialCharsAddress(psText){
	return psText.search(/\<|\>|\'|\%|\&|\+|\#|\?|\|/g) > -1
} 

/****************************************************************
Valida los caracteres especiales - en campos de Contacto
****************************************************************/
function isInvalidSpecialCharsC(psText){
	return psText.search(/\<|\>|\"|\'|\%|\;|\(|\)|\&|\+|\#|\?|\“|\‘/g) > -1
}

/****************************************************************
valida los carecteres especiales - en campos de casos
****************************************************************/
function isInvalidSpecialCharsCase(psText){
	return psText.search(/\<|\>|\'|\%|\&|\+|\#|\?/g) > -1
} 

/****************************************************************
**	Valida que tenga cualquiera de los siguientes caracteres   **
**	< > " ' % ; ) ( & + - # ?                                     **
****************************************************************/
function isInvalidSpecialChars(psText){
	return psText.search(/\<|\>|\"|\'|\%|\;|\(|\)|\&|\+|\-|\#|\?|\|/g) > -1
}

/****************************************************************
**	Valida que sea formato de telefono valido, permitiendo solo**
**	numeros y caracteres . -                                   **
****************************************************************/
function checkPhoneNumber(phoneNo) { 
	var phoneRE = /^[\d]+[.\d-]*[\d]$/g
	return phoneRE.test(phoneNo)
}

/****************************************************************
**  Valida que la cadena contenga solo letras y numeros        **
****************************************************************/
function onlyLettersAndNumbers(psString){
	return /[^a-zA-Z0-9]/.test(psString)?false:/[a-zA-Z]/.test(psString) && /[0-9]/.test(psString)
}

/****************************************************
**	Validación de cuenta de correo electrónico (xxx-xx_xxx@xxx.xxx.xx)
*****************************************************/
function isValidEmail(emailAddress) {
	if (jsTrim(emailAddress) != '')
	{
    var re = /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/
    return re.test(emailAddress);
    }
    else
    {
    return true;
    }
}


