//<script>

/**************************************************************************************
Function: dateIsValid103
Purpose:  check if a date is entered in a format SQL_103 (dd/mm/yyyy) is valid
Input:    pDate: it's the entered date
Returns:  empty string if is valid.
		  otherwise returns a valid message text.
**************************************************************************************/
function dateIsValid103(pDate)	{
	var kSEP = "/";		// separator or delimiter character.
	var sep1, sep2;		// delimiters or separators.
	var dd, mm, yyyy;	// day, month and year variables
	var n;				// to convert string to integer number
	var aMonthNames = 
		new Array('',
				'Enero', 'Febrero', 'Marzo', 
				'Abril', 'Mayo', 'Junio', 
				'Julio', 'Agosto', 'Septiembre', 
				'Octubre', 'Noviembre', 'Diciembre');
	var aMonthNames_en = 
		new Array('',
				'January', 'February', 'March', 
				'April', 'May', 'Jun', 
				'July', 'August', 'September', 
				'October', 'November', 'December');
	var msg;
	
	sep1 = pDate.indexOf(kSEP);
	sep2 = pDate.lastIndexOf(kSEP);
	
	// there is no delimiter
	if (sep1 == -1 || sep2 == -1)	{
		if (gsIdiom=='EN')
		msg = 'It is necessary write the date delimiters ('+kSEP+'). Format: dd/mm/aaaa';
		else
		msg = 'Es necesario ingresar los delimitadores de fecha ('+kSEP+'). Formato: dd/mm/aaaa';
		return msg;
	}

	// there is only one delimiter
	if (sep1 == sep2)	{
		if (gsIdiom=='EN')
		msg = 'they are required two date delimiters ('+kSEP+'). Format: dd/mm/aaaa';
		else
		msg = 'Se requieren dos delimitadores de fecha ('+kSEP+'). Formato: dd/mm/aaaa';
		return msg;
	}
	
	// length must be 10: dd/mm/yyyy
	if (pDate.length != 10)	{
		if (gsIdiom=='EN')
			msg = 'A valid date has 10 charactes. Format: dd/mm/aaaa';
		else
			msg = 'Una fecha válida contiene 10 caracteres. Formato: dd/mm/aaaa';
		return msg;
	}
	
	// get day, month and year values
	var dd = pDate.substring(0, sep1);
	var mm = pDate.substring(sep1+1, sep2);
	var yyyy = pDate.substring(sep2+1);


	// day, month and year must be valid digits
	if (textIsInteger(dd)!='')	{
		if (gsIdiom=='EN')
		msg = 'Invalid Date. '+dd+'isnt a valid day.';
		else
		msg = 'Fecha Inválida. '+dd+' no es un día válido.';
		return msg;
	}
	if (textIsInteger(mm)!='')	{
	if (gsIdiom=='EN')
		msg = 'Invalid Date. '+mm+' isn a valid month.';
		else
		msg = 'Fecha Inválida. '+mm+' no es un mes válido.';
		return msg;
	}
	if (textIsInteger(yyyy)!='')	{
	if (gsIdiom=='EN')
		msg = 'Invalid Date. '+yyyy+' isn a valid year.';
		else
		msg = 'Fecha Inválida. '+yyyy+' no es un año válido.';
		return msg;
	}
	
	// day, month and year must be in a valid range
	dd = parseInt(dd, 10);
	if (dd < 1 || dd > 31)	{
	if (gsIdiom=='EN')
		msg = 'Invalid Date. '+dd+' isn a valid day.';
		else
		msg = 'Fecha Inválida. '+dd+' no es un día válido.';
		return msg;
	} 
	mm = parseInt(mm, 10);
	if (mm < 1 || mm > 12)	{
	if (gsIdiom=='EN')
		msg = 'Invalid Date. '+mm+' isn a valid month.';
		else
		msg = 'Fecha Inválida. '+mm+' no es un mes válido.';
		return msg;
	} 
	yyyy = parseInt(yyyy, 10);
	if (yyyy < 1900 || yyyy > 2999)	{
	if (gsIdiom=='EN')
		msg = 'Invalid Date. '+yyyy+' isn a valid year.';
		else
		msg = 'Fecha Inválida. '+yyyy+' no es un año válido.';
		return msg;
	} 

	
	// check for day-month boundary
	if (mm==2)	{
		// if a leap year and more than 29 days entered
		if ((yyyy % 4)==0 && dd>29) {
			if (gsIdiom=='EN')
			msg = 'Invalid Date. '+aMonthNames_en[mm]+' '+yyyy+' has 29 days only.';
			else
			msg = 'Fecha Inválida. '+aMonthNames[mm]+' de '+yyyy+' solo tiene 29 días.';
			return msg;
		}
		
		// if not a leap year and more than 28 days entered
		else if ((yyyy % 4)!=0 && dd>28){
			if (gsIdiom=='EN')
				msg = 'Invalid Date. '+aMonthNames_en[mm]+' '+yyyy+' has 28 days only.';
				else
				msg = 'Fecha Inválida. '+aMonthNames[mm]+' de '+yyyy+' solo tiene 28 días.';
				return msg;
			}
		
	}
	else if ((mm==4 || mm==6 || mm==9 || mm==11) && dd>30)	{
	if (gsIdiom=='EN')
			msg = 'Invalid Date. '+aMonthNames_en[mm]+' has 30 days only.';
			else
		msg = 'Fecha Inválida. '+aMonthNames[mm]+' solo tiene 30 días.';
		return msg;
	}
	
	// if everything is ok.
	return '';
}



function validateDay (dd,mm,yyyy) {
	var n;				// to convert string to integer number
	var aMonthNames = 
		new Array('',
				'Enero', 'Febrero', 'Marzo', 
				'Abril', 'Mayo', 'Junio', 
				'Julio', 'Agosto', 'Septiembre', 
				'Octubre', 'Noviembre', 'Diciembre');
				var aMonthNames_en = 
		new Array('',
				'January', 'February', 'March', 
				'April', 'May', 'June', 
				'July', 'August', 'September', 
				'October', 'November', 'December');
	var msg;
	
	
	// day, month and year must be in a valid range
	dd = parseInt(dd, 10);
	if (dd < 1 || dd > 31)	{
	if (gsIdiom=='EN')
		msg = dd+' isnt a valid day.';
		else
		msg = dd+' no es un día válido.';
		return msg;
	} 

	// check for day-month boundary
	if (mm==2)	{
		// if a leap year and more than 29 days entered
		if ((yyyy % 4)==0 && dd>29) {
		if (gsIdiom=='EN')
			msg = aMonthNames_en[mm]+' of '+yyyy+' has 29 days only.';
			else
			msg = aMonthNames[mm]+' de '+yyyy+' solo tiene 29 días.';
			return msg;
		}
	
		// if not a leap year and more than 28 days entered
		else if ((yyyy % 4)!=0 && dd>28){
		if (gsIdiom=='EN')
			msg = aMonthNames_en[mm]+' of '+yyyy+' has 28 days only.';
			else
			msg = aMonthNames[mm]+' de '+yyyy+' solo tiene 28 días.';
			return msg;
		}
	  
	}
	else if ((mm==4 || mm==6 || mm==9 || mm==11) && dd>30)	{
	if (gsIdiom=='EN')
		msg = aMonthNames_en[mm]+' has 30 days only.';
		else
		msg = aMonthNames[mm]+' solo tiene 30 días.';
		return msg;
	}
	
	// if everything is ok.
	return '';
}


/**************************************************************************************
Function: dateConvert103_101
Purpose:  convert a date from format SQL_103 (dd/mm/yyyy) to SQL_101 (mm/dd/yyyy)
Input:    pDate: string date to be converted.
Returns:  converted date.
**************************************************************************************/
function dateConvert103_101(pDate) {
	var kSEP = "/";		// separator or delimiter character.
	var sep1, sep2;		// delimiters or separators.
	var dd, mm, yyyy;	// day, month and year variables
	
	sep1 = pDate.indexOf(kSEP);
	sep2 = pDate.lastIndexOf(kSEP);
	
	// get day, month and year values
	var dd = pDate.substring(0, sep1);
	var mm = pDate.substring(sep1+1, sep2);
	var yyyy = pDate.substring(sep2+1, pDate.length);

	return mm + kSEP + dd + kSEP + yyyy;
}





function dateDelimitedFormat(pDate) {
	var kSEP = "/";		// separator or delimiter character.
	var d = new Date();
	var dd, mm, yyyy;	// day, month and year variables
	
	if (pDate.indexOf(kSEP) != -1) return pDate;
	if (pDate.length != 4 && pDate.length != 6 && pDate.length != 8) return pDate;

	// get month, day and year values
	var mm = pDate.substr(0, 2);
	var dd = pDate.substr(2, 2);
	var yyyy = pDate.substr(4, 4);

	// year formatting
	if (yyyy.length == 2)	{
		if (parseInt(yyyy,10) > 49) yyyy = '19'+yyyy;
		else yyyy = '20'+yyyy;
	}
	else if (yyyy.length == 0)	{
		yyyy = d.getFullYear();
	}
	
	return mm + kSEP + dd + kSEP + yyyy;
}



/**************************************************************************************
Function: dateCompare103
Purpose:  compare two dates: <d1> and <d2>. (entered in a format dd/mm/yyyy)
Input:    s1 - date string 1. s2 - date string 2.
Returns:  0: s1=s2
		 -1: s1>s2
		  1: s1<s2
**************************************************************************************/
function dateCompare103(s1, s2) {
	var s;
	if (!((s=dateIsValid103(s1))=='' && (s=dateIsValid103(s2))==''))	{
		alert(s);
		return;
	}

	var date1=new Date(dateConvert103_101(s1)), date2=new Date(dateConvert103_101(s2));
	
	var d1=date1.getDate(), m1=date1.getMonth()+1, y1=date1.getFullYear();
	var d2=date2.getDate(), m2=date2.getMonth()+1, y2=date2.getFullYear();

	if (y1==y2)	{
		if (m1==m2)	{
			if (d1==d2)	return 0;
			if (d1>d2)  return -1;
			else		return 1;
		}
		if (m1>m2)	return -1;
		else		return 1;
	}

	if (y1>y2)	return -1;
	else		return 1;
}





/**************************************************************************************
Function: dateBuild103
Purpose:  build a valid date string in a format SQL_103 (dd/mm/yyyy)
Input:    d: day of month [1-31]
		  m: month of year [1-12]
		  y: valid year.
Returns:  date string in format (dd/mm/yyyy).
**************************************************************************************/
function dateBuild103(d,m,y)	{
	return (d<10?'0':'')+d+'/'+(m<10?'0':'')+m+'/'+y;
}


/**************************************************************************************
Function: dateLastDayOfMonth
Purpose:  get the last day of a month (28,29,30 or 31)
Input:    m: month of week [1-12]
		  y: valid year.
Returns:  last day of month.
**************************************************************************************/
function dateLastDayOfMonth(m, y)	{
	var d = new Date(m+'/01/'+y);
			   
	d.setMonth(d.getMonth() + 1);		// increase one month
	d.setDate(1);						// set the first day in that month
	d.setDate(d.getDate()-1);			// subtract one day
			   
	return d.getDate();
}



/**************************************************************************************
Function: dateFirstDayOfWeek
Purpose:  get first day (1-31) of a week in a month.
Input:    w: week in a month [1-6]
		  m: month of year [1-12]
		  y: valid year.
Returns:  first day number (from 1 to 31) of the specified week
**************************************************************************************/
function dateFirstDayOfWeek(w, m, y)	{
	var d = new Date(m+'/01/'+y);
	var week;		// counting weeks
	var dw;
		
	if (w<1 || w>6 || w==null) return 0;

	if (w==1) return d.getDate();		// first day firt week always is first day in the month

	dw = d.getDay();		// 0=sunday, 6=saturday
	d.setDate(d.getDate()+(6-dw)+1);		// go to first day second week
	if (w==2) return d.getDate();

	for (week=3; week<=6; week++)	{
		d.setDate(d.getDate()+7); // go to first day next week
		if (d.getMonth()+1 != m) return 0;		// if finished month and not found
		if (w == week)	return d.getDate();
	}
		
	return 0;
}


/**************************************************************************************
Function: dateLastDayOfWeek
Purpose:  get last day (1-31) of a week in a month.
Input:    w: week in a month [1-6]
		  m: month of year [1-12]
		  y: valid year.
Returns:  last day number (from 1 to 31) of the specified week
**************************************************************************************/
function dateLastDayOfWeek(w, m, y)	{
	var d = new Date(m+'/01/'+y);
	var week;		// counting weeks
	var dw;
		
	if (w<1 || w>6 || w==null) return 0;

	dw = d.getDay();		// 0=sunday, 6=saturday
	d.setDate(d.getDate()+(6-dw));		// go to last day first week
	if (w==1) return d.getDate();

	for (week=2; week<=6; week++)	{
		d.setDate(d.getDate()+7); // go to last day next week
		if (d.getMonth()+1 != m) {
			if (w == week) d.setDate(0);
			
			// if finished month and not found
			if (d.getMonth()+1 != m) return 0;		
		}
		if (w == week)	return d.getDate();
	}
		
	return 0;
}




/**************************************************************************************
Function: timeIsValid
Purpose:  valid if a specif time is valid. format: hh:mm [AM/PM]
Input:    pTime - time to validate
Returns:  true if time is valid, else false.
**************************************************************************************/
function timeIsValid(pTime, pFormat)	{
	var sEmptyDate = '01/01/1900 ';

	if (!pFormat) pFormat = '12';

	var d = new Date(sEmptyDate + pTime);
	if (isNaN(d)) return false;
	
	// if in 12-hour format
	if (pFormat == '12')	{
		pTime = pTime.toLowerCase();
		if (pTime.indexOf('am')==-1 && pTime.indexOf('pm')==-1) return false;
	}
	
	return true;
}





/**************************************************************************************
Function: timeCompare
Purpose:  compare two times: <t1> and <t2>. (format hh:mm [AM/PM])
Input:    t1 - time 1. t2 - time 2.
Returns:  0: t1=t2
		 -1: t1>t2
		  1: t1<t2
**************************************************************************************/
function timeCompare(t1, t2) {
	var sEmptyDate = '01/01/1900 ';

	if (!(timeIsValid(t1) && timeIsValid(t2))) return false;

	var d1 = new Date(sEmptyDate + t1), 
		d2 = new Date(sEmptyDate + t2);

	var h1 = (d1.getHours()*60) + d1.getMinutes();
	var h2 = (d2.getHours()*60) + d2.getMinutes();
	
	if (h1 == h2) return 0;
	else if (h1>h2) return -1;
	else return 1;
}




/**************************************************************************************
Function: textIsLetter
Purpose:  Validates whether the character is a alfabetic character (A-Z, a-z)
Input:    c - character.
Returns:  true when valid, false when the character is not a letter.
**************************************************************************************/
function textIsLetter(c)	{
	return ((c>='a' && c<='z') || (c>='A' && c<='Z'))
}


/**************************************************************************************
Function: textIsDigit
Purpose:  Validates that the character is a digit.
Input:    c - character.
Returns:  false when the character is not a digit.
**************************************************************************************/
function textIsDigit(c)	{
	return ((c >= '0') && (c <= '9'))
}


/**************************************************************************************
Function: textOrDigitIsValid
Purpose:  Validates that the character is a valid digit or is a valid Letter or both and 
			Accpet only the character "-"
Input:    c - character.
Returns:  false when the character is a special Symbol.
**************************************************************************************/
function textOrDigitIsValid(c)	{
	return ((c=='-') || ((c>='a' && c<='z') || (c>='A' && c<='Z')) || ((c >= '0') && (c <= '9')))
}


/**************************************************************************************
Function: textIsInteger
Purpose:  check whether a string is a valid integer number
Input:    s - character string.
Returns:  true when all chars are digits, false if any character is not 
**************************************************************************************/
function textIsInteger(s,flags)	{
	var c,i;
	var msg;
	// also negative integers are valid
	
	if(flags != '012'){
	for (i=0; i<s.length; i++)	{
	    c = s.charAt(i);
	    if (!(textIsDigit(c) || (c=='-' && i==0  && s.length> 1))) {
	    	if (gsIdiom=='EN')
				msg= 'Invalid value, integer numbers are valid only.';
			else
				msg= 'Valor no válido, solo son válidos números enteros.';
		return msg;
	}}
	}
	
	// if no flags set, return.
	if (!flags) return '';

	var i = parseInt(s, 10);
	switch (flags)	{
		// negative and positive
		case '101':
			if (i == 0)	{
			if (gsIdiom=='EN')
				msg= 'Write a value diferent of zero.';
			else
				msg= 'Ingrese un valor diferente de cero.';
			return msg;
			}
			break;
		// positive
		case '001':
			if (i <= 0)	{
				if (gsIdiom=='EN')
					msg= 'Positive numbers are accepted only: '+s;
				else
					msg='Solo se aceptan números positivos: '+s;
				return msg;
			}
			break;
		// zero and positive
		case '011':
			if (i < 0)	{
				if (gsIdiom=='EN')
					msg= 'A negative number isnt a valid value to this field: '+s;
				else
					msg='Un número negativo no es un valor válido para este campo: '+s;
				return msg;
			}
		case '012':
			for (i=0; i<s.length; i++)	{
		    c = s.charAt(i);
		    if (!textOrDigitIsValid(c)) {
		    	if (gsIdiom=='EN')
					msg= 'Invalid value, integer numbers and Letters are only valid .';
				else
					msg= 'Valor no válido, solo son válidos números enteros y letras.';
			return msg;
			}}
			break;
		//case '111': or empty
		// nothing to do
	}


    // if all is valid
    return '';
}


/**************************************************************************************
Function: textIsFloat
Purpose:  check whether a string is a valid floating number
Input:    s: character string.
		  flags: Optional. set additional validations as follows:

			N0P	 (N: Negative bit; 0: zero bit; P: Positive bit).
			-----------------------------------------------------------------
			111  DEFAULT. any value: negative, zero and positive.
			001  only positive values
			011  only zero and positive values.
			101  only negative and positive values (zero is not valid).

		  pMessage: OPTIONAL. Message to be returned when an error.

Returns:  false when the string is not float or doesn't match any entered flags.
**************************************************************************************/
function textIsFloat(s, flags, decimals)	{
	var c, i, d=0, bPoint=false;
	var msg;
	
	if (textIsEmpty(s))	{
		if (gsIdiom=='EN')
					msg= 'Number required.';
				else
					msg='Es requerido un número.';
				return msg;
	}
	
	// check for valid characters
	for (i=0; i<s.length; i++)	{
		c = s.substr(i,1);
		if (!(textIsDigit(c) || c=='-' || c=='.'))	{
		if (gsIdiom=='EN')
					msg= 'Invalid Number. "'+c+'" isnt part of a number';
				else
					msg='Número inválido. "'+c+'" no es parte de un número';
				return msg;
		}
		
		if (c=='.')	{
			if (bPoint)	{
				if (gsIdiom=='EN')
					msg= 'Invalid Number. A number has some decimal point.';
				else
					msg='Número inválido. Un número no tiene varios puntos decimales.';
				return msg;
			}
			else bPoint = true;
		} 
		else	{
			if (bPoint) d++;		// digits after decimal point
		}
		
		
		if (c=='-' && i > 0)	{
			if (gsIdiom=='EN')
					msg= 'Invalid Number. A number has some decimal point.';
				else
					msg='Número inválido. Un número no tiene varios puntos decimales.';
				return msg;
		}
	}
		


	// convert to float to check for errors.
	var f = parseFloat(s);
	if (isNaN(f))	{
		if (gsIdiom=='EN')
					msg= 'The number entered is invalid: '+s;
				else
					msg='El número ingresado es inválido: '+s;
				return msg;
	}
	if (!isFinite(f))	{
		if (gsIdiom=='EN')
					msg='The number writered is large: '+s
				+'\nPlease write an amount short';
				else
					msg='El número ingresado es muy grande: '+s
				+'\nPor favor entre una cantidad más pequeña';
				return msg;
	}
		
	

	// check for max digits after decimal point
	if (decimals)	{
		if (d > decimals){
			if (gsIdiom=='EN')
					msg='This field allows maximun '+decimals+' decimal'+(decimals==1 ? '':'s')+'.';
				else
					msg='Este campo permite máximo '+decimals+' decimal'+(decimals==1 ? '':'es')+'.';
				return msg;}
			return '';
	}



	// if no flags set, return.
	if (!flags) return '';	

	switch (flags)	{
		// negative and positive
		case '101':
			if (f == 0)	{
			if (gsIdiom=='EN')
					msg='Write a value diferent to zero.';
				else
					msg='Ingrese un valor diferente de cero.';
				return msg;
			}
			break;
		// positive
		case '001':
			if (f <= 0)	{
				if (gsIdiom=='EN')
					msg='Positive numbers are accepted only: '+s;
				else
					msg='Solo se acepta número positivos: '+s;
				return msg;
			}
			break;
		// zero and positive
		case '011':
			if (f < 0)	{
			if (gsIdiom=='EN')
					msg='A negative number isnt a valid number to this field: '+s;
				else
					msg='Un número negativo no es un valor válido para este campo: '+s;
				return msg;
			}
			break;
//		case '111': or empty
		// nothing to do
	}

	return '';
}




/**************************************************************************************
Function: textTrim
Purpose:  trim leading spaces (&#160 or &nbsp; is treated as a space)
Input:    s: the text to trim lateral spaces.
Returns:  string without lateral spaces.
**************************************************************************************/
function textTrim(s)	{
	var newText = '';
	var iPos, iniPos, endPos=0, lastPos= 0;
	var nbsp = String.fromCharCode(160);
	var CR = String.fromCharCode(13); // carriage return character
	var LF = String.fromCharCode(10); // line feed character
	var SPACE = ' ';
	
	s = textReplace(s, nbsp, SPACE);

	while (lastPos< s.length)	{
		// trim initial spaces
		iniPos = lastPos;
		for (iPos = iniPos; iPos < s.length; iPos++)
			if (s.charAt(iPos) != SPACE)	{
				iniPos = iPos;
				break;
			}

	
		// trim final spaces
		endPos = iniPos;
		for (iPos = endPos; iPos < s.length; iPos++)	{
			// also trim after each line feed
			if (s.charAt(iPos)== CR) break;
			if (s.charAt(iPos) != SPACE)
				endPos = iPos+1;
		}
	
		if (endPos >= iniPos)	{
			newText += s.substring(iniPos, endPos);
		}



		// Check for line feed character
		if (s.charAt(iPos)== CR)	{
			iPos++;
			newText += CR;
		}
		if (s.charAt(iPos)== LF)	{
			iPos++;
			newText += LF;
		}

		lastPos = iPos;
	}

	return newText;
}

/**************************************************************************************
Function: textIsString
Purpose:  check whether a string is a valid integer number with comma
Input:    s - character string.
Returns:  true when all chars are digits, false if any character is not 
**************************************************************************************/
function textIsString(s, mm,yy)	{

	var c,i;
	var sDay= '';
	var d='';
	
	if (textIsEmpty(s.value))	{
		objectSetFocus(s,'Seleccione uno o más días del mes.','Select one or more week days.');
		return false;
	}
	
	
	if (s.value.charAt(0) == ',' || s.value.charAt(s.value.length-1)==',')	{
		objectSetFocus(s,'Existe una coma al inicio o al final. Formato Invalido','Exist a comma to begin or the end. Invalid Format');
		return false;
	}
	
	// also negative integers are valid
	for (i=0; i<=s.value.length; i++)	{
	    c = s.value.charAt(i);
	    if (c!=','&& i!=s.value.length ){
			//if (c==' ') continue;
		    sDay = sDay + c;
			if (!(textIsDigit(c) || (c=='-' && i==0  && s.value.length> 1))) {
					objectSetFocus(s, 'Valor no válido, solo son válidos números enteros.','Values not válid, integer numbers are valid only.');
					return false;
				}
		}
		else
		{
		//sDay=dateBuild103(sDay,mm,yy);
		
		if ((d=validateDay (sDay,mm,yy)) != '')	{
			objectSetFocus(s, d);
			return false;
			
		}
		
		else 
		{sDay='';
			if (s.value.charAt(i+1) == ',' )	{
					objectSetFocus(s,'Existe una coma seguida de otra. Formato Invalido','Exist a comma next to other. Invalid Format');
				return false;
				}
		}
		}
	}

    // if all is valid
    return true;
}

/**************************************************************************************
Function: textReverse
Purpose:  reverse a text string
Input:    s: the text to be reversed
Returns:  string reversed.
**************************************************************************************/
function textReverse(s)	{
	var sReverse = '';
	var i;
	
	// reversing...
	for (i=0; i<s.length; i++)
		sReverse = s.substr(i,1) + sReverse;

	return sReverse;
}



/**************************************************************************************
Function: textReplace
Purpose:  check whether a text string is empty or just contains blanks
Input:    s - the text.
		  lookfor - the character to be searched
		  newvalue - the new value
Returns:  true if the string is empty or has only blanks. false if string is NOT empty.
**************************************************************************************/
function textReplace(s, lookfor, newvalue)	{
	var newText = '';
	
	for (var i=0; i < s.length; i++)
		if (s.substr(i, lookfor.length)== lookfor)	{
			newText += newvalue;
			i += lookfor.length;	// go to next position after length
			i--; // since loop it's gonna increment counter, I need to decrease it here
		}
		else newText += s.charAt(i);
	
	return newText;
}



/**************************************************************************************
Function: textIsEmpty
Purpose:  check whether a text string is empty or just contains blanks
Input:    s - the text to validate.
Returns:  true if the string is empty or has only blanks. false if string is NOT empty.
**************************************************************************************/
function textIsEmpty(s)	{
	var SPACE = ' ';

	for (var i=0; i < s.length; i++)
		if (s.substring(i, i+1) != SPACE)	{
			return false;
			break;
		}
	return true;
}


/**************************************************************************************
Function: textIsPhone
Purpose:  check if a text has a valid phone format: ( ) 0-9 and blanks
Input:    s:		string to evaluate
Returns:  true if valid format, 
		  otherwise returns false and in <field> parameter a valid message text.
**************************************************************************************/
function textIsPhone(s)	{
	var i, c;

	for (i=0; i<s.length; i++)	{
		c = s.charAt(i);
		if (c!='(' && c!=')' && c!=' ' && !textIsDigit(c)) return false;
	}
	
	return true;
}






/**************************************************************************************
Function: textIsEmail
Purpose:  check if a text has a valid email format.
Input:    s:		string to evaluate
Returns:  empty string if is valid.
		  otherwise returns a valid message text.
**************************************************************************************/
function textIsEmail(s)	{
	var i, c, cb, ca,msg;
	var c_at=0;

	// first character must be a letter
	c = s.charAt(0);
	if (!textIsLetter(c)) {
		if (gsIdiom=='EN')
		msg = 'First character invalid: \''+c+'\'.';
		else
		msg = 'Primer caracter es inválido: \''+c+'\'.';
		return msg;
		}
		
	// last character must be a letter
	c = s.charAt(s.length-1);
	if (!textIsLetter(c)){
		if (gsIdiom=='EN')
		msg = 'Last character invalid: \''+c+'\'.';
		else
		msg = 'Ultimo caracter inválido: \''+c+'\'.';
		return msg;
		}


	// valid characters must be letters ,  @ . y _
	for (i=1; i<s.length-1; i++)	{
		c = s.charAt(i);

		// validate only for A-Z a-Z 0-9 @ . - _
		if (!textIsLetter(c) && !textIsDigit(c) && c!='_' && c!='-' && c!='.' && c!='@'){
		if (gsIdiom=='EN')
		msg = 'Invalid character: \''+c+'\'.';
		else
		msg = 'Caracter invalido: \''+c+'\'.';
		return msg;
		}
		

		// counting @ symbols found
		if (c=='@') c_at++;


		
		// before and after: (. @ _ -);  must be a letter or a number
		if (c=='@' || c=='.' || c=='_' || c=='-')	{
			cb = s.charAt(i-1);		// char before
			ca = s.charAt(i+1);		// char after

			if ((!textIsLetter(cb) && !textIsDigit(cb)) || 
				(!textIsLetter(ca) && !textIsDigit(ca))){
				if (gsIdiom=='EN')
					msg = 'Invalid format: \''+c+'\'.';
				else
					msg = 'Formato invalido: \''+c+'\'.';
				return msg;
			} 
		}
	}	// end for


	// it has to be one and only one @ symbol
	if (c_at!=1){
			if (gsIdiom=='EN')
				msg = 'Invalid format: \''+c+'\'.';
			else
				msg = 'Formato invalido: \''+c+'\'.';
			return msg;
		}

	// it must be at least one point after an @ symbol
	if (s.substr(s.indexOf("@")+1).indexOf('.') == -1) return 'Formato inválido.';


	// when valid return true
	return '';
}






/**************************************************************************************
Function: textIsValid
Purpose:  check if a text has valid character: letters, numbers, symbols.
		  does not allow invalid xml characters.
Input:    s: text to validate.
Returns:  empty string if is valid.
		  otherwise returns a valid message text.
**************************************************************************************/
function textIsValid(s)	{

	for (var i=0; i<s.length; i++)	{
		if (!textCharIsValid(s.charAt(i)))	{
			if (s.charAt(i)=="#")	
				return 'El siguiente caracter no es permitido: \''+s.charAt(i)+'\'\n\nPor favor utilizar No.';
			else			
			  return 'El siguiente caracter no es permitido: \''+s.charAt(i)+'\'\n\nPor favor rectifique el texto.';
		}
	}

	return '';
}


/**************************************************************************************
Function: textCharIsValid (Used on <<textIsValid>> function)
Purpose:  check if a single character is a valid character: letters, numbers, symbols.
		  does not allow invalid xml characters.

Input:    c: single character to validate.
Returns:  false when the character is invalid.
**************************************************************************************/
function textCharIsValid(c)	{
	var i = c.charCodeAt(0);
		
	/* valid characters are:
	(the following numbers are unicode values)

	- Carriage Return and Line Feed characters: 13 and 10.
	- from 32-126, except 60:< 62:>
	- stressed uppercase vowels.  193:Á 201:É 205:Í 211:Ó 218:Ú
	- stressed lowercase vowels.  225:á 233:é 237:í 243:ó 250:ú
	- valid vowels with dieresis. 220:Ü 252:ü
	- valid chars with tilde.	  209:Ñ 241:ñ
	- additional spanish symbols. 161:¡ 191:¿
	- Additional especial ASP Symbol. 35:# 
	*/
	
	if ( i<32 && (i!=13 && i!=10)) return false;
	if (i==60 || i==62) return false;
	if (i>126 && i<161) return false;
	if ( i>161  && (i!=193 && i!=201 && i!=205 && i!=211 && i!=218 &&
					i!=225 && i!=233 && i!=237 && i!=243 && i!=250 && 
					i!=220 && i!=252 && i!=209 && i!=241 && 
					i!=161 && i!=191)) return false;
	if (i==35)	return false;			
			
	
	return true;
}




/**************************************************************************************
Function: objectSetFocus
Purpose:  Sets the focus on a control and shows an alert message.
Input:    o: the control what you want to set the focus.
		  pMessage: Optional. the message to display
Returns:  none.
**************************************************************************************/
function objectSetFocus(o, msg, msg_en)	{
	if (!o) return false;

	if (o.type == 'hidden' || o.type == 'button' || o.type == 'submit' || o.type == 'reset') return;
	
	o.focus();
	if (o.type=="text" || o.type=='password' || o.type=='textarea' ) o.select();
	
	if (msg)	{
		if (gsIdiom=='EN')
		alert(msg_en);
		else alert(msg);
		o.focus();
	}
}





/**************************************************************************************
Function: validateIsText
Purpose:  check if a text is valid.
Input:    o:		object to evaluate
		  title:	field name to display in message
		  required:	tell whether a field is required.
Returns:  true if it is valid.
		  otherwise returns false.
**************************************************************************************/
function validateIsText(o, title, required)	{
	var len=0, pos;
	var bIsEmpty = textIsEmpty(o.value);

	if ((pos=required.indexOf('_')) != -1)	{
		len = parseInt(required.substr(pos+1));
		required = required.substr(0,pos);
	}

	if (required=='required' && bIsEmpty)	{
		objectSetFocus(o, 'Ingrese un valor, este campo es requerido ('+title+')','Enter a value, this field is requiered ('+title+')');
		return false;
	}
		
	if (len)	{
		if (o.value.length>len)	{
			objectSetFocus(o);
			if (confirm('solo se permite '+len+' caracteres ('+title+') y ha ingresado '+o.value.length+'.\n\n'+
			'¿Desea que el texto sea automáticamente ajustado a '+len+' caracteres?'))
				o.value = o.value.substring(0, len);
			else
				objectSetFocus(o, 'Ajuste el texto de manera que su máxima longitud sea '+len+' caracteres.','Adjust the text in such a way that its maximun length is '+len+' characters.')
			return false;
		}
	}

	return true;
}



/**************************************************************************************
Function: validateIsDropdown
Purpose:  check if a dropdown has a valid selected item
Input:    o:		object to evaluate
		  title:	field name to display in message
		  required:	tell whether a field is required.
Returns:  true if it is valid.
		  otherwise returns false.
**************************************************************************************/
function validateIsDropdown(o, title, required)	{
	var bIsEmpty = textIsEmpty(o.options[o.selectedIndex].value);

	if (required=='required' && bIsEmpty)	{
		objectSetFocus(o, 'Seleccione un valor de la lista, este campo es requerido ('+title+')','Select a value of the list, this field is required ('+title+')');
		return false;
	}
		
	return true;
}






/**************************************************************************************
Function: validateIsDropdownOrText
Purpose:  check if a dropdown has a valid entry, if empty then checks a input box for a value.
Input:    o:		dropdown object to evaluate
		  title:	field name to display in message
		  required:	text object to evaluate if dropdown is empty
Returns:  true if it is valid.
		  otherwise returns false.
**************************************************************************************/
function validateIsDropdownOrText(o, title, required)	{
	var s = o.options[o.selectedIndex].value;
	if (s=='0' || s=='')	{
		 // if text box also is empty
		 if (textIsEmpty(required.value)) {
			objectSetFocus(required, 'Seleccione un valor de la lista ('+title+').\n\n si no está en la lista escríbalo en la caja de texto contigua.','Select a value of the list ('+title+').\n\n if isnt at the list write on the text box next.');
			return false;
		}
	}
	// do not send the text box value, just the dropdown selected value
	//else 
	//if (s!='-1') required.value = '';

	return true;
}






/**************************************************************************************
Function: validateDateCompare103
Purpose:  compares two dates
Input:    d1:		object date to be less
		  title:	field name to display in message
		  d2:		object date to be greater
Returns:  true if d1 is less than or equal d2.
		  otherwise returns false.
**************************************************************************************/
function validateDateCompare103(d1, title, d2)	{
	if (textIsEmpty(d1.value) || textIsEmpty(d2.value)) return true;

	if (dateCompare103(d1.value, d2.value) == -1)	{
		objectSetFocus(d2, 'Esta fecha debe ser menor a \''+d1.value+'\' ('+title+')','this date must be lower than \''+d1.value+'\' ('+title+')');
		return false;
	}

	return true;
}





/**************************************************************************************
Function: validateIsInteger
Purpose:  check whether a string is a valid integer number
Input:    o:		object to evaluate
		  title:	field name to display in message
		  required:	tell whether a field is required.
Returns:  true if it is valid.
		  otherwise returns false.
**************************************************************************************/
function validateIsInteger(o,title, required)	{
	var s, flags='', pos;
	var bIsEmpty = textIsEmpty(o.value);

	if ((pos=required.indexOf('_')) != -1)	{
		flags = required.substr(pos+1);
		required = required.substr(0,pos);
	}

	if (required=='required' && bIsEmpty)	{
		objectSetFocus(o, 'Ingrese un valor, este campo es requerido ('+title+')','Enter a value, this field is required ('+title+')');
		return false;
	}

	if (!bIsEmpty)	{
		if ((s=textIsInteger(o.value,flags)) != '')	{
			objectSetFocus(o, s+' ('+title+')',s+' ('+title+')');
			return false;
		}
	}
	
	return true;
}


/**************************************************************************************
Function: validateIsFloat
Purpose:  check whether a string is a valid integer number
Input:    o:		object to evaluate
		  title:	field name to display in message
		  required:	tell whether a field is required.
Returns:  true if it is valid.
		  otherwise returns false.
**************************************************************************************/
function validateIsFloat(o, title, required,decimals)	{
	var s, flags='', pos;
	var bIsEmpty = textIsEmpty(o.value);

	if ((pos=required.indexOf('_')) != -1)	{
		flags = required.substr(pos+1);
		required = required.substr(0,pos);
	}

	if (required=='required' && bIsEmpty)	{
		objectSetFocus(o, 'Ingrese un valor, este campo es requerido ('+title+')','Enter a value, this field is required ('+title+')');
		return false;
	}

	if (!bIsEmpty)	{
		if ((s=textIsFloat(o.value, flags,decimals)) != '')	{
			objectSetFocus(o, s+' ('+title+')',s+' ('+title+')');
			return false;
		}
	}
	
	return true;
}



/**************************************************************************************
Function: validateIsMinDigits
Purpose:  check whether a string is a valid integer number and has at least x digits
Input:    o:		object to evaluate
		  title:	field name to display in message
		  required:	tell whether a field is required.
Returns:  true if it is valid.
		  otherwise returns false.
**************************************************************************************/
function validateIsMinDigits(o, title, required)	{
	var s, flags=0, pos;
	var bIsEmpty = textIsEmpty(o.value);

	if ((pos=required.indexOf('_')) != -1)	{
		flags = parseInt(required.substr(pos+1), 10);
		required = required.substr(0,pos);
	}

	if (required=='required' && bIsEmpty)	{
		objectSetFocus(o, 'Ingrese un valor, este campo es requerido ('+title+')','Write a value, this field is requered ('+title+')');
		return false;
	}

	// if not required and empty, return
	if (bIsEmpty) return true;

	// otherwise, check for valid values and length
	if (!validateIsInteger(o,title, required+'_001')) return false; // only positive numbers

	if (flags && o.value.length < flags)	{
		objectSetFocus(o, 'Ingrese mínimo '+flags+' dígitos ('+title+').','Write minimun '+flags+' dígits ('+title+').');
		return false;
	}

	return true;
}



/**************************************************************************************
Function: validateIsPhone
Purpose:  check if a text has a valid phone format: ( ) 0-9 and blanks
Input:    o:		object to evaluate
		  title:	field name to display in message
		  required:	tell whether a field is required.
Returns:  true if it is valid.
		  otherwise returns false.
**************************************************************************************/
function validateIsPhone(o, title, required)	{
	var bIsEmpty = textIsEmpty(o.value);

	if (required=='required' && bIsEmpty)	{
		objectSetFocus(o, 'Ingrese un valor, este campo es requerido ('+title+')','Write a value, this field is required ('+title+')');
		return false;
	}

	if (!bIsEmpty)	{
		if (!textIsPhone(o.value))	{
			objectSetFocus(o, 'Formato inválido ('+title+').\n\nUse solamente: ( ) 0-9 y espacios.','Invalid Format ('+title+').\n\nUse only: ( ) 0-9 and spaces.');
			return false;
		}

		if (o.value.length < 7)	{
			objectSetFocus(o, 'Ingrese mínimo 7 dígitos ('+title+').','Write minimun 7 dígits ('+title+').');
			return false;
		}
	}
		
	return true;
}








/**************************************************************************************
Function: validateIsDate
Purpose:  check if a text is in a valid date format.
Input:    o:		object to evaluate
		  title:	field name to display in message
		  required:	tell whether a field is required.
Returns:  true if it is valid.
		  otherwise returns false.
**************************************************************************************/
function validateIsDate(o, title, required)	{
	var s='';
	var bIsEmpty = textIsEmpty(o.value);

	if (required=='required' && bIsEmpty)	{
		objectSetFocus(o, 'Ingrese una fecha, este campo es requerido ('+title+')','Write a date, this field is required ('+title+')');
		return false;
	}
		

	if (!bIsEmpty)	{
		if ((s=dateIsValid103(o.value)) != '')	{
			objectSetFocus(o, s+' ('+title+')',s+' ('+title+')');
			return false;
		}
	}
	
	return true;
}






/**************************************************************************************
Function: validateIsTime
Purpose:  check if a text is in a valid time format.
Input:    o:		object to evaluate
		  title:	field name to display in message
		  required:	tell whether a field is required.
Returns:  true if it is valid.
		  otherwise returns false.
**************************************************************************************/
function validateIsTime(o, title, required)	{
	var bIsEmpty = textIsEmpty(o.value);

	if (required=='required' && bIsEmpty)	{
		objectSetFocus(o, 'Ingrese un valor, este campo es requerido ('+title+')','Write a value, this field is requirde ('+title+')');
		return false;
	}
		

	if (!bIsEmpty)	{
		if (!timeIsValid(o.value))	{
			objectSetFocus(o, 'El formato de hora es inválido ('+title+').\n\nEl formato válido es: hh:mm am/pm.','The time format is inválid ('+title+').\n\nThe format valid is: hh:mm am/pm.');
			return false;
		}
	}

	return true;
}






/**************************************************************************************
Function: validateIsEmail
Purpose:  check if a text has a valid email format.
Input:    o:		object to evaluate
		  title:	field name to display in message
		  required:	tell whether a field is required.
Returns:  true if it is valid.
		  otherwise returns false.
**************************************************************************************/
function validateIsEmail(o, title, required)	{
	var s = '';
	var bIsEmpty = textIsEmpty(o.value);

	if (required=='required' && bIsEmpty)	{
		objectSetFocus(o, 'Ingrese un valor, este campo es requerido ('+title+')','Write a value, this value is required ('+title+')');
		return false;
	}

	if (!bIsEmpty)	{
		if ((s=textIsEmail(o.value)) != '')	{
			objectSetFocus(o, s+' ('+title+').',s+' ('+title+').');
			return false;
		}
	}
	
	return true;
}






/**************************************************************************************
Function: formTextIsValid
Purpose:  check if all form object texts have valid character: letters, numbers, symbols.
		  does not allow invalid xml characters.
Input:    f: document.form object.
Returns:  true when ok, false when the text has invalid characters.
**************************************************************************************/
function formTextIsValid(f)	{
	var o, s;
	
	for (var i=0; i<f.elements.length; i++)	{
		o = f.elements[i];
		// only check <input type="text"> and <textarea id=textarea1 name=textarea1> elements
		if (o.type!='text' && o.type!='textarea') continue;

		o.value = textTrim(o.value);

		if ((s=textIsValid(o.value)) != '')	{
			objectSetFocus(o, s,s);
			return false;
		}
	}
	
	return true;
}


/**************************************************************************************
Function: NumberDay
Purpose:  determine the  number each dayname of the string.
Input:    dayname' string
Returns:  '' when ok, number when the daynumber is foundes.
**************************************************************************************/
function NumberDay (cad) {
	var msg;
	var day;
	var kSEP = ",";	
	var cad_number="";
	var number,cad_day;
	var cad_or=cad;
	
	// day
		var t=0;
		var i=0;
		
		if (cad.length>4){
		
		while (i<cad_or.length)	{
			var sep1 = cad.indexOf(kSEP);
			
			if (sep1!=-1){
			day = cad.substring(0, sep1);
			cad = cad.substring(sep1+1, cad_or.length);
			i=i+1+sep1;
			}else {day=cad; i=i+1+cad_or.length;}
			
			number=FindNumber(day);
						
			if (number!=''){
				if (cad_number!=''){
					cad_number=cad_number+""
					if (cad_number.indexOf(number)<0)
						cad_number=cad_number + kSEP + number;
						}
				else cad_number=number
				}
			}
		}else if (FindNumber(cad)!='') return FindNumber(cad); else return '';
		
		for (u=1; u<=7; u+=1)	{
			sep1 = cad_number.indexOf(u);
			if (sep1!=-1){ 
			 t=t+1; 
			 }else u=u+7;
			}
		if (t==7) cad_number=-1;
		
		return cad_number;
}

/**************************************************************************************
Function: FindNumber
Purpose:  replace the dayname by numberday.
Input:    dayname' string
Returns:  '' when ok, number when the daynumber is foundes.
**************************************************************************************/

	function FindNumber(day){
	var aDayNames = 
		new Array('','Dom', 'Lun', 'Mar','Mie', 'Jue', 'Vie', 'Sab');
		
		for (u=1; u<=7; u+=1)	{
				if (day==aDayNames[u]) 
					return u;
			 }
		return ''
	}
	
/**************************************************************************************
Function: FindDay
Purpose:  verify the number in the inbox.
Input:    dayname' string
Returns:  '' when ok, number string when the daynumber is founded.
**************************************************************************************/
function FindDay (cad) {
	var msg;
	var day;
	var kSEP = ",";	
	var cad_number="";
	var number,cad_day;
	var cad_or=cad;
	
	// day
		var t=0;
		var i=0;
		
		if (cad.length>4){
		while (i<cad_or.length)	{
			var sep1 = cad.indexOf(kSEP);
			
			if (sep1!=-1){
			day = cad.substring(0, sep1);
			cad = cad.substring(sep1+1, cad_or.length);
			i=i+1+sep1;
			}else {day=cad; i=i+1+cad_or.length;}
						
			if (day!=''){
				if (cad_number!=''){
					cad_number=cad_number+""
					if (cad_number.indexOf(day)<0)
						cad_number=cad_number + kSEP + day;
						}
				else cad_number=day
				}
			}
		}else if (cad!='') return cad; else return '';	
		
		return cad_number;
}
/**************************************************************************************
Function: GetNumber
Purpose:  verify if the number to enter in the inbox exit yet.
Input:    cad:numberday' string, num: number to find.
Returns:  '' when ok, number' string when the daynumber is founded.
**************************************************************************************/
function GetNumber(cad,num) {
	var msg;
	var day;
	var kSEP = ",";	
	var cad_or=cad;
	
	// day
		var t=0;
		var i=0;
		
		while (i<cad_or.length)	{
			var sep1 = cad.indexOf(kSEP);
			
			if (sep1!=-1){
			day = cad.substring(0, sep1);
			cad = cad.substring(sep1+1, cad_or.length);
			i=i+1+sep1;
			}else {day=cad;i=i+1+cad_or.length;}
			
			if (day==num) return day;
			}
		return '';
}	

/**************************************************************************************
Function: nameDay
Purpose:  verify if the number to enter in the inbox exit yet.
Input:    cad:numberday' string, num: number to find.
Returns:  '' when ok, number' string when the daynumber is founded.
**************************************************************************************/

function nameDay (dd) {
	var t = document.frmChangeData;
	var aDayNames = 
		new Array('','Dom', 'Lun', 'Mar','Mie', 'Jue', 'Vie', 'Sab');
	var msg;
	var day;
	var kSEP = ",";	
	var cad_day=t.am_filter_day.value
	
	// day
	dd = parseInt(dd, 10);
	if (dd > 1 || dd < 7)	{
		var i=0;
		msg = aDayNames[dd];
		if (t.am_filter_day.value.length>4){
		
		while (i<t.am_filter_day.value.length)	{
			var sep1 = cad_day.indexOf(kSEP);
			
			if (sep1!=-1){
			day = cad_day.substring(0, sep1);
			cad_day = cad_day.substring(sep1+1, t.am_filter_day.value.length);
			}else day=cad_day;
			
			if (msg==day) {
				i=i+t.am_filter_day.value.length; 
				return '';
				} 
			else   if (sep1!=-1) i=i+1+sep1; else i=i+t.am_filter_day.value.length; 
			}
		}else if (msg==t.am_filter_day.value) return '';
		return msg;
	}
	else
		return '';
}
/**************************************************************************************
Function: formDataIsValid
Purpose:  check all fields in a form for valid information
Input:    f:		form to check for valid characters, must be the first argument (function.arguments[0])
		  THIS IS AN ARRAY OF ARGUMENTS
		  o:		object in a form to evaluate (several objects)
		  title:    title or caption for that field in the page.
		  type:		type of information to validate
		  required:	whether the field is required or not. 
					or an object when type=('dropdown_or_text', 'date_compare')
Returns:  true if it is valid.
		  otherwise returns false.
**************************************************************************************/
function formDataIsValid()	{
	var f, i;
	var o, title, type, required;

	if (formDataIsValid.arguments.length < 1) return false;
		
	var f = formDataIsValid.arguments[0];	// represents a form object to evaluate valid characters

	// validate if valid character for processing with xml were entered
	//if (!formTextIsValid(f)) return false;
		

	for (i=1; i<formDataIsValid.arguments.length; i+=4)	{
		o = formDataIsValid.arguments[i];
		title = formDataIsValid.arguments[i+1];
		type = formDataIsValid.arguments[i+2];
		required = formDataIsValid.arguments[i+3];
		

		switch (type)	{
			case 'text':
				if (!validateIsText(o, title, required)) return false;
				break;

			case 'login':
				if (!validateIsText(o, title, required)) return false;
				break;

			case 'email':
				if (!validateIsEmail(o, title, required)) return false;
				break;

			case 'phone':
				if (!validateIsPhone(o, title, required)) return false;
				break;

			case 'date_compare':
				if (!validateDateCompare103(o, title, required)) return false;
				break;

			case 'dropdown':
				if (!validateIsDropdown(o, title, required)) return false;
				break;

			case 'dropdown_or_text':
				if (!validateIsDropdownOrText(o, title, required)) return false;
				break;

			case 'integer':
				if (!validateIsInteger(o,title, required)) return false;
				break;
			
			case 'min_digits':
				if (!validateIsMinDigits(o, title, required)) return false;
				break;

			case 'date':
				if (!validateIsDate(o, title, required)) return false;
				break;

			case 'time':
				if (!validateIsTime(o, title, required)) return false;
				break;
				
			case 'float':
				if (!validateIsFloat(o, title, required,2)) return false;
				break;

		}		// end switch
	}		// end for
	
	return true;
}

	
	/*=================================================================
	Function: rTrim
	Purpose:  delete white space in the end of the text
	Input:    text to apply rtrim
	Returns:  text
	==================================================================*/
    function rTrim(text)
    {
        return text.replace(/\s+$/g,'');
    }
    
	/*=================================================================
	Function: lTrim
	Purpose:  delete white space in the start of the text
	Input:    text to apply ltrim
	Returns:  text
	==================================================================*/
    function lTrim(text)
    {   
        return text.replace(/^\s+|$/g,'');
    }	  
    
    /*=================================================================
	Function: CheckAll
	Purpose:  checks all checkboxes
	Input:    none.
	Returns:  true - when everything is correct
	==================================================================*/
	// VALIDATE REQUIRED INFORMATION
	function CheckAll(chkObject, pValue){
		if (pValue == 1) {
			bValue = true;
		}
		else {
			bValue = false;
		}

		if (!chkObject.length) { 
			chkObject.checked = bValue; 
		}
		else {
			
			for (i=0; i<=chkObject.length-1; i++){		
				chkObject[i].checked = bValue;
			} 
		}
		
	}

    /*=================================================================
    Function: BuildListCheckBoxes
    Purpose:  Build a list from checkboxes
    Input:	  sObject : Form Object	    
		      sSeparator : Separator	
    Returns:
    Date:	  30/10/2008 - JP
    ==================================================================*/
    function BuildListCheckBoxes(sObject, sSeparator, inID)
    {
	    var objectForm = sObject;
	    var sList = sSeparator;
	    var value;
	    var bHasID = (inID != 0)? true : false;
    	
	    if (objectForm) {
		    if (objectForm.length) {
			    for (i=0; i<objectForm.length; i++) {			
    			
				    if (objectForm[i].checked) value = (bHasID)? objectForm[i].value : "1";
				    else if (!bHasID) value = "0";
    			
			        if (!objectForm[i].checked && bHasID) continue;
				    sList = sList + value + sSeparator;
			    }			
		    }
		    else {
			    if (objectForm.checked) value = (bHasID)? objectForm.value : "1";
			    else if (!bHasID) value = "0";
    			
			    if (objectForm.checked || (!bHasID)) sList = sList + value + sSeparator;
		    }
	    }
    	
	    return sList;
    } 	 

    /*=================================================================
    Function: ChangeText
    Purpose:  Inner HTML dinamically
    Input:	  pObject : Form Object	    
    Returns:  none.
    Date:	  31/10/2008 - JP
    ==================================================================*/
    function ChangeText(pObject, pReplaceText){
        var obj = eval("document.getElementById('" + pObject + "')");
        obj.innerHTML = pReplaceText;
    }

    /*=================================================================
	Function: InitCap
	Purpose:  First letter after space as uppercase, rest lowercase
	Input:    str = text to InitCap
	Returns:  text in InitCap mode
	==================================================================*/	
    function InitCap(text) {
        if(text){
            text = text.replace(/(^| )([a-záéíóúüñ])/gi, function($1) {
                return $1.toUpperCase();
            } );
            return text; 
        }
        return ''; 
    }
    
    /**************************************************************************************
	Function: DateDiff
	Purpose:  difference in day between two dates
	Input:    Initial Date and Final Date
	Returns:  difference
	**************************************************************************************/	
	function DateDiff(f0, f1) { 
		var datePat = /^(\d{1,2})(\/|-)(\d{1,2})(\/|-)(\d{4})$/;
		var fecha0 = f0;

		var matchArray0 = fecha0.match(datePat); 
		month0 = matchArray0[3]; 
		day0 = matchArray0[1]; 
		year0 = matchArray0[5]; 


		var fecha1 = f1;
		var matchArray1 = fecha1.match(datePat);
		month1 = matchArray1[3]; 
		day1 = matchArray1[1]; 
		year1 = matchArray1[5];

		var fechaIni = new Date();
		fechaIni.setFullYear(year0, month0, day0);


		var fechaFin = new Date();
		fechaFin.setFullYear(year1, month1, day1);

		var resta = fechaFin - fechaIni;
		resta = resta/86400000;
		return resta;
	}     
//</script>


