	function trim(s) {
		while (s.substring(0,1) == ' ') {
			s = s.substring(1,s.length);
		}
		while (s.substring(s.length-1,s.length) == ' ') {
			s = s.substring(0,s.length-1);
		}
		return s;
	}
	
	/* check if object is an array */
	function isArray(obj){
		return(typeof(obj.length)=="undefined")?false:true;
	}

	/* basic form validation */
	function checkForm(poForm){
		for(i=0; i<poForm.elements.length; i++){
		
		//custom validations I
		if(poForm.elements[i].accept!=null){
			if(trim(poForm.elements[i].accept)!=''){

			//check only valid characters
				if((trim(poForm.elements[i].value) != "")&&(poForm.elements[i].accept=="chars")){	
					if (!validName(poForm.elements[i].value)){	
						alert('Para poder enviar este correo por favor quite cualquier símbolo en el campo de mensaje. El envío no se ha realizado por que contiene algún carácter no permitido. Gracias.');
						//alert('Debe escribir caracteres válidos: ?¿¡!@1234567890ABCDEFGHIJKLMNÑOPQRSTUVWXYZabcdefghijklmnñopqrstuvwxyz -_.,ÁÉÍÓÚáéíóú');
						poForm.elements[i].focus();
						return false;	
					}								
				}	
				
			//check valid links
				if((trim(poForm.elements[i].value) != "")&&(poForm.elements[i].accept=="links")){	
					if (!acceptLink(poForm.elements[i].value)){	
						alert('Para poder enviar este correo por favor quite cualquier símbolo en el campo de mensaje. El envío no se ha realizado por que contiene algún carácter no permitido. Gracias.');
						//alert('Debe escribir caracteres válidos: ?¿¡!@1234567890ABCDEFGHIJKLMNÑOPQRSTUVWXYZabcdefghijklmnñopqrstuvwxyz -_.,ÁÉÍÓÚáéíóú');
						poForm.elements[i].focus();
						return false;	
					}								
				}	
				
		
				
								
			}
		}		
			
		if(poForm.elements[i].alt!=null){
			if(trim(poForm.elements[i].alt)!=''){			

				//check numeric values
				if((trim(poForm.elements[i].value) != "")&&(poForm.elements[i].alt=="numeric")){
					if(!checknumber(poForm.elements[i].value)){
						alert("El campo debe ser tipo numérico");
						poForm.elements[i].focus();
						return false;
					}
				}						
				
			}
			}						
		
		
			if(poForm.elements[i].lang == "true"){
				//alert(poForm.elements[i].type); 
				switch (poForm.elements[i].type) {
					case "text":
					case "password":
					case "textarea":
					case "file":
						if(trim(poForm.elements[i].title)!=""){
							if(trim(poForm.elements[i].value) == ""){
								alert(poForm.elements[i].title + " No debe quedar vacío");
								poForm.elements[i].value = "";
								poForm.elements[i].focus();
								return false;
							}
						}
											
						//custom validations II						
						if(poForm.elements[i].alt!=null){
							if(trim(poForm.elements[i].alt)!=''){
								//check email address
								if((trim(poForm.elements[i].value) != "")&&(poForm.elements[i].alt=="email")){
									if(!emailCheck(poForm.elements[i].value)){
										alert("Escriba una direccion de e-mail válida");
										poForm.elements[i].focus();
										return false;
									}
								}
								
								//checkAlpha
								//check alpha values
								if((trim(poForm.elements[i].value) != "")&&(poForm.elements[i].alt=="alpha")){
									if(!checkAlpha(poForm.elements[i].value)){
										alert("El campo debe no debe contener números");
										poForm.elements[i].focus();
										return false;
									}
								}								
								
												
								
								//check valid files
								if((trim(poForm.elements[i].value) != "")&&(poForm.elements[i].alt=="file")){
									var tmp_file_obj = poForm.elements[i];
									var tmp_file_name = trim(poForm.elements[i].value);
									var tmp_file_types = trim(poForm.elements[i].accept);
									if(!checkfilename(tmp_file_name)){
										alert("El nombre del archivo no puede contener caracteres especiales como letras acentuadas o espacios");
										tmp_file_obj.focus();
										return false;
									}
									if(!checkfiletype(tmp_file_name,tmp_file_types)){
										alert("Archivo inválido, verifique el tipo de archivo.");
										tmp_file_obj.focus();
										return false;
									}
								}
							}
						}
						break;
					case "radio":
						elradio = eval("poForm."+poForm.elements[i].name);
						checado = false;
						if(isArray(elradio)){
							for(j=0; j<elradio.length; j++){
								if(elradio[j].checked)

									checado = true;
							}
						} else{
							if(elradio.checked)
								checado = true;
						}
						if(!checado){
							if(isArray(elradio)){
								alert(elradio[0].title);
								elradio[0].focus();
							} else{
								alert(elradio.title);
								elradio.focus();
							}
							return false;
						}
						break;
					case "select-one":
						if(poForm.elements[i].selectedIndex < 1){
							alert(poForm.elements[i].title + ": Debe seleccionar una opción");
							poForm.elements[i].focus();
							return false;
						}
						break;
					case "select-multiple":
						if(poForm.elements[i].selectedIndex < 1){
							alert(poForm.elements[i].title + ": + Debe seleccionar una opción");
							poForm.elements[i].focus();
							return false;
						}
						break;
				}
			}
		}
		return true;
	}
	
	/*Validate special characters*/
	function validName(checkStr) {
	 var checkOK = "=&//:?¿@¡!1234567890ABCDEFGHIJKLMNÑOPQRSTUVWXYZabcdefghijklmnñopqrstuvwxyz -_.,ÁÉÍÓÚáéíóú"; 
 
	 for (h = 0; h < checkStr.length; h++) { 
	  ch = checkStr.charAt(h); 
  	for (j = 0; j < checkOK.length; j++) 
	   if (ch == checkOK.charAt(j)) { break }
	    if (j == checkOK.length) { return false }
	 }	
	 return true;
	 }
	
	/*Validate links*/
	function acceptLink(checkStr) {
	 var checkOK = "=&//:?¿@¡!1234567890ABCDEFGHIJKLMNÑOPQRSTUVWXYZabcdefghijklmnñopqrstuvwxyz -_.,ÁÉÍÓÚáéíóú"; 
 
	 for (h = 0; h < checkStr.length; h++) { 
	  ch = checkStr.charAt(h); 
  	for (j = 0; j < checkOK.length; j++) 
	   if (ch == checkOK.charAt(j)) { break }
	    if (j == checkOK.length) { return false }
	 }	
	 return true;
	 }
	 
	
	 
	
	
	/* validates an email address */
	function emailCheck(emailStr) {
		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) {
			return false
		}
		var user=matchArray[1]
		var domain=matchArray[2]
		if (user.match(userPat)==null) {
		    return false
		}
		var IPArray=domain.match(ipDomainPat)
		if (IPArray!=null) {
			for (var i=1;i<=4;i++) {
				if (IPArray[i]>255) {
					return false
				}
			}
			return true
		}
		var domainArray=domain.match(domainPat)
		if (domainArray==null) {
			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>3) {
			return false
		}
		if (len<2) {
			alert(errStr)
			return false
		}
		return true;
	}
	
	/* open window */
	function openWin(Addr, Name, Options){
		var tmp = window.open(Addr, Name, Options);
	}
	
	
	function checkAlpha(poField){
	  var strError ="";
	  var charpos =poField.search("[^A-Za-z ]"); 
	  if(poField.length > 0 &&  charpos >= 0) 
	  { 
		return false; 
	  }else{
	  	return true
	  }
	}

	/* validates a number */	
	function checknumber(poField){
		var x=poField;
		var anum=/(^\d+$)|(^\d+\.\d+$)/;
		if (anum.test(x))
			testresult=true;
		else{
			testresult=false;
		}
		return (testresult);
	}
	
	/* check if filename contains special chars */
	function checkfilename(fileName) {
		var donde = fileName.lastIndexOf('\\');
		var ArregloChars = new Array('á','é','í','ó','ú',' ','ñ','Á','É','Í','Ó','Ú','Ñ','/','*','?');
		for(i=0;i<16;i++) {
			if(fileName.indexOf(ArregloChars[i], donde) >= 0) {
				return false;
			}
		}
		return true;
	}
	
	/* check if file is of specified type */
	function checkfiletype(filePath, fileTypes) {
		var fileName = new Array();
		fileName = filePath.split('.');
		var fileExt = fileName[fileName.length-1];
		fileExt = fileExt.toLowerCase()
		var aFileTypes = fileTypes.split(',');
		var counter=0;
		var found=0;
		while (counter < aFileTypes.length) {
			if(fileExt==aFileTypes[counter]) {
				found=1;
				break;
			}
		  counter+=1;
		}
		if(!found) {
			return false;
		}
		return true;
	}
	
	/* show and hide a block */
	function displayBlock(elemID) {
		var DataID = elemID;
		if (DataID.style.display=="block") {
			DataID.style.display="none";
		} else {
			DataID.style.display="block";
		}
	}
	
	function showBlock(elemID) {
		var DataID = elemID;
		DataID.style.display="block";
	}
	
	function hideBlock(elemID) {
		var DataID = elemID;
		DataID.style.display="none";
	}
	
	/* promts user logout */												
	function doLogout(pURL){
		if (window.confirm('¿Está seguro que desea terminar la sesión?'))
			window.location.href=pURL;
		else
			return;
	}
	
	/* confirm deletion */
	function cfm_delete(modName,itemID,itemName){
		if (window.confirm('¿Está seguro que desea eliminar '+itemName+'?'))
			self.location.href='index.asp?action='+modName+'.delete&'+itemID;
	}

/* confirm status update */
function cfm_status(modName,itemID,itemName,itemActive){
	if (itemActive){
		if (window.confirm('¿Está seguro que desea desactivar '+itemName+'?'))
			self.location.href='index.asp?action='+modName+'.status&active=0&'+itemID;
	} else {
		if (window.confirm('¿Está seguro que desea activar '+itemName+'?'))
			self.location.href='index.asp?action='+modName+'.status&active=1&'+itemID;
	}
}



  /* funciones de las fechas */
	/*validate e-mail address*/
	function emailCheck (emailStr) {
		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) {
			return false
		}
		var user=matchArray[1]
		var domain=matchArray[2]
		
		if (user.match(userPat)==null) {
	    return false
		}
	
		var IPArray=domain.match(ipDomainPat)
		if (IPArray!=null) {
		  for (var i=1;i<=4;i++) {
		    if (IPArray[i]>255) {
					return false
		    }
	     }
	  	return true
		}
		
		var domainArray=domain.match(domainPat)
		if (domainArray==null) {
	    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>3) {
	  	return false
		}
			
		if (len<2) {
		  return false
		}
	
		return true;
	}
	
	/* remove trailing and leading blanks from a string */
	function trim(s) {
		while (s.substring(0,1) == ' ') {
			s = s.substring(1,s.length);
		}
		while (s.substring(s.length-1,s.length) == ' ') {
			s = s.substring(0,s.length-1);
		}
		return s;
	}
	
	/*check if filename contains special chars*/
	function badFileName(fileName) {
		var donde = fileName.lastIndexOf('\\');
		var ArregloChars = new Array('á','é','í','ó','ú',' ','ñ','Á','É','Í','Ó','Ú','Ñ','/','*','?');
		for(i=0;i<16;i++) {
			if(fileName.indexOf(ArregloChars[i], donde) >= 0) {
				return true;
			}
		}
		return false;
	}
	
	/*check if file is an image*/
	function isImage(filePath) {
		var fileName = new Array();
		fileName = filePath.split('.');
		var fileExt = fileName[fileName.length-1];
		fileExt = fileExt.toLowerCase()
		if(!((fileExt=='gif')||(fileExt=='jpg')||(fileExt=='bmp')||(fileExt=='png'))) {
			return false;
		}
		return true;
	}
	
	/*show and hide a block*/
	function showHideBlock(elemID) {
		var DataID = eval('document.all.' + elemID);
		if (DataID.style.display=="block") {
			DataID.style.display="none";
		} else {
			DataID.style.display="block";
		}
	}
	
	/* promts user logout */												
	function doLogout(){
		if (window.confirm('¿Está seguro que desea cerrar la sesión?'))
			window.location.href='index.asp?action=login.doLogout';
		else
			return;
	}
	
	/*functions to set dropdaowns with dates*/
	var defaultEmptyOK = false;
	
	function isEmpty(s) { 
		return ((s == null) || (s.length == 0)) 
	}
	
	function isDigit(c) { 
		return ((c >= '0') && (c <= '9')) 
	}
	
	function isInteger(s) {
		var i;
		if (isEmpty(s))
			if (isInteger.arguments.length == 1) return defaultEmptyOK;
			else return (isInteger.arguments[1] == true);
		for (i = 0; i < s.length; i++){   
			var c = s.charAt(i);
			if (!isDigit(c)) return false; }
		return true; 
	}
		
	function isSignedInteger(s) {
		if (isEmpty(s)) 
			if (isSignedInteger.arguments.length == 1) return defaultEmptyOK;
			else return (isSignedInteger.arguments[1] == true);
		else {
			var startPos = 0;
			var secondArg = defaultEmptyOK;
			if (isSignedInteger.arguments.length > 1) secondArg = isSignedInteger.arguments[1];
			if ((s.charAt(0) == '-') || (s.charAt(0) == '+')) startPos = 1;    
		return (isInteger(s.substring(startPos, s.length), secondArg)) 
		} 
	}
		
	function isNonnegativeInteger(s) {
		var secondArg = defaultEmptyOK;
		if (isNonnegativeInteger.arguments.length > 1) secondArg = isNonnegativeInteger.arguments[1];
		return (isSignedInteger(s, secondArg) && ((isEmpty(s) && secondArg) || (parseInt (s) >= 0))); 
	}
		
	function isYear(s) {
		if (!isNonnegativeInteger(s)) return false;
			return ((s.length == 2) || (s.length == 4)); 
	}
			
	function daysInFebruary(year) { 
		return(((year % 4 == 0)&&((!(year % 100 == 0))||(year % 400 == 0)))?29:28); 
	}
	
	function daysInMonth(month,year) {
		//No arrays to conform to Netscape 2.0
		if      (month == '01'||month == '1'||month == 'January'  ||month == 'Jan') return 31
		else if (month == '02'||month == '2'||month == 'February' ||month == 'Feb'){
			if (isYear(year))                                                   return daysInFebruary(year)
			else { var thisYear = new Date();                                   return daysInFebruary(thisYear.getYear()) } }
		else if (month == '03'||month == '3'||month == 'March'    ||month == 'Mar') return 31
		else if (month == '04'||month == '4'||month == 'April'    ||month == 'Apr') return 30
		else if (month == '05'||month == '5'                      ||month == 'May') return 31
		else if (month == '06'||month == '6'||month == 'June'     ||month == 'Jun') return 30
		else if (month == '07'||month == '7'||month == 'July'     ||month == 'Jul') return 31
		else if (month == '08'||month == '8'||month == 'August'   ||month == 'Aug') return 31
		else if (month == '09'||month == '9'||month == 'September'||month == 'Sep') return 30
		else if (month == '10'              ||month == 'October'  ||month == 'Oct') return 31
		else if (month == '11'              ||month == 'November' ||month == 'Nov') return 30
		else if (month == '12'              ||month == 'December' ||month == 'Dec') return 31
		else return false 
	}
		
	function getDayName(m,d,y,f) {
		//No arrays to conform to Netscape 2.0
		var thisDate  = new Date(y, (m - 1), d);
		if (f == 'd') return thisDate.getDate();
		else {
			if (thisDate.getDate() < 10) return '0' + thisDate.getDate();
			else                         return thisDate.getDate(); 
		} 
	}
			
	function DayConstructor(d,l,a,v,t,m,y) {  
		for (var i = d.length - a; i < l; i++){
			var VoptionValue = getDayName(m, i, y, v) + 1;
			var ToptionValue = getDayName(m, i, y, t) + 1;
			var newOpt = new Option (ToptionValue, VoptionValue);
			d.options[d.length] = newOpt; 
		} 
	}
			
	function DayDestructor(d,l,a) {
		if (d.options.selectedIndex > (l + a)){ d.options.selectedIndex = l + a;}
		//Older browsers may need refreshed to reflect the deletion.
		//To edit this script, copy and insert it into your .cfm page and set the following variable: js_script_Done = true
		for (var i = d.length - a; i > l; i--){  d.options[i + a] = null;}
	}
		
	function SetDays(m,y,d,a,v,t) {
		if (daysInMonth(m,y)) {
			if      ((d.length - a) > daysInMonth(m, y) - 1) DayDestructor (d, daysInMonth(m,y) - 1, a)
			else if ((d.length - a) < daysInMonth(m, y))     DayConstructor(d, daysInMonth(m,y),     a, v, t, m, y); 
		} 
	}
