

function validate_fields() {
	var val_str, val_type, fields_ok;
	
	var fields = document.getElementsByTagName("input");
	
	for (i=0; i<fields.length; i++) {
		val_type = fields[i].getAttribute("val_type");
		if (val_type!=null) {
			val_str=trim(fields[i].getAttribute("val_str"));

			switch (val_type) {
				case "date": field_ok=check_date(fields[i].value); break;
				case "number": field_ok=check_number(fields[i].value); break;
				case "email": field_ok=check_email(fields[i].value); break;
				case "isEmpty": field_ok=!check_empty(fields[i].value); break;
				case "isZero": field_ok=!check_zero(fields[i].value); break;
				default: field_ok=!check_empty(fields[i].value);
			}

			if (!field_ok) {
				alert(mensaje_error + val_str);
				fields[i].focus();
				return;
			}
		}
	}

	return true;
}

function check_date(str) {
	return IsValidDate(str);
}

function check_number(str) {
	return str.match(/^\d+$/);
}

function check_email(str) {
	return str.match(/^(([^<>()[\]\\.,;:\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,}))$/);
}

function check_empty(str) {
	return trim(str)==""?true:false;
}

function check_zero(str) {
	return trim(str)==0?true:false;
}


function trim(str) {
  return str.replace(/^\s*(.*\S+)?\s*$/, "$1");
}

function IsValidDate(PossibleDate)
{
	var PDate = new String(PossibleDate);
	
	var regex = /(^\d{1,2})\/(\d{1,2})\/(\d{4,4})|(^\d{1,2})\/(\d{1,2})\/(\d{2,2})/;
	
	if( regex.test(PDate) )
	{
		var day = new String(RegExp.$1);
		var month = new String(RegExp.$2);
		var year = new String(RegExp.$3);
		if( month.length == 0 )
		{
			day = new String(RegExp.$4);		
			month = new String(RegExp.$5);
			year = new String(RegExp.$6);
		}
		
		var today = new Date();
		var thisYear = new String(today.getFullYear());
		
		if( year.length == 2 )
		{					
			if( year > 50 )
			{
				year = String(Number(thisYear.substring(0,2))-1) + year;
			}
			else
			{
				year = thisYear.substring(0,2) + year;
			}
		}
		
		if( month < 1 || month > 12 ) { return false; }

		if( day < 1 || day > 31 ) { return false; }

		if ((month==4 || month==6 || month==9 || month==11) && day>30) { return false; }

		if (month == 2) // check for february 29th
		{ 
			var isleap = (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0));
			if (day>29 || (day==29 && !isleap)) 
			{
				return false;
			}
		}		
		
		if( (Number(year) < Number(thisYear) - 250) ||
			(Number(year) > Number(thisYear) + 250) )
			{ return false; }
			
		return true;
	}
	return false;
}
