
function isblank(s)
{
	
	for(var i=0;i<s.length;i++)
	{
		var c = s.charAt(i);
		
		if((c!=' ') && (c!='\n') && (c!='\t'))
	        return true;	
	}
	return false;
}

/*function isemail(s)
{
	Etarget = /@/;
	var space = false;
	//if ((s.search(Etarget)==-1) ||  (s.length - (s.indexOf(".")+1)!=3))
	if ((s.search(Etarget)==-1) || (s.search(".")==-1))
	{
		return false;
	}
	else
	{
		for(var i=0;i<s.length;i++)
		{
			var c = s.charAt(i);
		
			if((c==' ') || (c=='\n') || (c=='\t'))
			{	
	    	    space = true;	
			}
		}
		if (space==true)
		{
			return false;
		}
		else
		{	return true;	}
	}
}*/

function isemail(email)
{
	invalidChars = " /:,;"

	// Check if it's empty			
	if (email=="")
		return false;
	
	// Check if it has invalid characters
	for (i=0; i<invalidChars.length; i++)
	{
		badChar = invalidChars.charAt(i)
		if (email.indexOf(badChar,0)>-1)
			return false;
	}
	
	// Check if it contains an @
	atPos = email.indexOf("@",1)
	if (atPos==-1)
		return false;
		
	// only one @
	atPos = email.indexOf("@",atPos+1)
	if (atPos>-1)
		return false;
	
	// Check if it contains a period after @
	periodPos = email.indexOf(".", atPos)
	if (periodPos==-1)
		return false;
		
	// At least 2 characters after the period
	if (periodPos+3 > email.length)
		return false;
		
	// everything ok
	return true;
}

//function validate that the value is  date with mask, probably is missing another mask 
function isdate(s)
{
	/*x = new Date(s);
	nDay = x.getDate();
	nMonth = x.getMonth();
	nYear = x.getUTCFullYear();
	x = new Date(nYear,nMonth,nDay);
	alert(x.toLocaleString());*/
	if (!(check_mask("##/##/##",s)||check_mask("##/##/####",s)||check_mask("##/#/####",s)||check_mask("#/##/####",s)|| check_mask("#/#/####",s)))
	{
		return false;
	}
	return true;
}

//function verify the value be a integer 
function isinteger(s)
{
	
	 var checkOK = "0123456789";
	  var checkStr = s; 
	  var allValid = true;
	  var decPoints = 0;
	  var allNum = "";
	  for (i = 0;  i < checkStr.length;  i++)
	  {
	    ch = checkStr.charAt(i);
	    for (j = 0;  j < checkOK.length;  j++)
		{
	      if (ch == checkOK.charAt(j))
	        break;
		}
	    if (j == checkOK.length)
	    {
	      allValid = false;
	      break;
	    }
	    allNum += ch;
	  }
	  if (!allValid)
	  {
	   return false;
	  }
	  return true;
}


//function verify the value be a decimal 
function isdecimal(s)
{
	
	 var checkOK = "0123456789.";
	  var checkStr = s; 
	  var allValid = true;
	  var decPoints = 0;
	  var Points=0;
	  var allNum = "";
	  for (i = 0;  i < checkStr.length;  i++)
	  {
	    ch = checkStr.charAt(i);
	    for (j = 0;  j < checkOK.length;  j++)
		{
	      if (ch == "." && checkOK.charAt(j)==".")
		  	{   Points++;		
			}
		  if (ch == checkOK.charAt(j))
	        break;
		}
	    if (j == checkOK.length)
	    {
	      allValid = false;
	      break;
	    }
		if (Points>1)
		{
		  allValid = false;
	      break;
		}
	    allNum += ch;
	  }
	  if (!allValid)
	  {
	   return false;
	  }
	  return true;
}

	//function validate that the value is  date with mask, probably is missing another mask 
	function  check_mask(mask,value)
	{
		var i;
		if (value.length != mask.length) 
		{
			return false;
		}
		for (i=0; i<mask.length; i++)
		{
			if ( mask.charAt(i) == '#' )
			{
				if ( !parseInt(value.charAt(i)) && value.charAt(i) != '0' )
				{
					return false;
				}
			}
			else
			{
				if (mask.charAt(i) != value.charAt(i))
				{
					return false;
				}
			}
		}
		return true;
	}
	
function MailValidator(f)
{
	target = /REQ_/;
	target2 = /_/g;
	var empty_fields=""
	var email_fields=""
	var fieldfocus = null;
	var temp="";
	
	
	for(var i=0; i<f.length; i++)
	{
		var e=f.elements[i];
		 
		// first check if the field is text or textarea and if it is required

		if ((((e.type=="text")||(e.type=="textarea") ||	(e.type=="select-one") ||	(e.type=="password")	) && !(e.optional)) || (	!((e.value==null) || (e.value=="") || !isblank(e.value))	))
		{
			// finally check if the field is empty
			if ((e.value==null) || (e.value=="") || !isblank(e.value))
			{
  				temp = e.name.replace(target, "");	// Erase "REQ_" from string
				temp = temp.replace(target2, " ");	// Replace "_" with spaces
				
				if(e.description!=null && e.description!="")
				{
					empty_fields+="\n        " + e.description;
				}
				else
				{
	  				empty_fields+="\n        " + temp;
				}
				if (fieldfocus==null)
					fieldfocus = e;
			}
			
			if (e.email)
			{
				if (!isemail(e.value))
				{
					temp = e.name.replace(target, "");	// Erase "REQ_" from string
					temp = temp.replace(target2, " ");
					if(e.description!=null && e.description!="")
					{
						email_fields+="\nThe  " + e.description + " field must be a valid email.\n";
					}
					else
					{
				    	email_fields+="\nThe  " + temp + " field must be a valid email.\n";
					}
					fieldfocus = e;
				}
			}
			
			if (e.date)
			{
				if (!isdate(e.value))
				{
					temp = e.name.replace(target, "");	// Erase "REQ_" from string
					temp = temp.replace(target2, " ");	
					if(e.description!=null && e.description!="")
					{
						email_fields+="\nThe  " + e.description + " field must be a valid date.\n";
					}
					else
					{
					    email_fields+="\nThe  " + temp + " field must be a valid date.\n";
					}
					fieldfocus = e;
				}
			}
			
			if(e.numeric || (e.min!=null) || (e.max!=null) || e.integer || e.decimal)
			{
				
				if (e.decimal)
				{
					if (!isdecimal(e.value))
					{
						temp = e.name.replace(target, "");	// Erase "REQ_" from string
						temp = temp.replace(target2, " ");	
						if(e.description!=null && e.description!="")
						{
							email_fields+="The  " + e.description + " field must be a valid decimal number.\n";
						}
						else
						{
				    		email_fields+="The  " + temp + " field must be a valid decimal number.\n";
						}
						fieldfocus = e;
					}
				}
				
				if (e.integer)
				{
					if (!isinteger(e.value))
					{
						temp = e.name.replace(target, "");	// Erase "REQ_" from string
						temp = temp.replace(target2, " ");	
						if(e.description!=null && e.description!="")
						{
							email_fields+="\nThe  " + e.description + " field must be a valid integer number.\n";
						}
						else
						{
						    email_fields+="\nThe  " + temp + " field must be a valid integer number.\n";
						}
						fieldfocus = e;
					}
				}
				
				if (e.numeric)
				{
					var v = parseFloat(e.value);
					if	(isNaN(v))
					{
						temp = e.name.replace(target, "");	// Erase "REQ_" from string
						temp = temp.replace(target2, " ");	
						if(e.description!=null && e.description!="")
						{
							email_fields+="\nThe  " + e.description + " field must be a valid number.\n";
						}
						else
						{
						    email_fields+="\nThe  " + temp + " field must be a valid number.\n";
						}
						fieldfocus = e;
					}
				}
				
				
				if ((e.min!=null) || (e.max!=null))
				{
						
					var v = parseFloat(e.value);
					if(isNaN(v) || ((e.min!=null)&&(v<e.min)) || ((e.max!=null)&&(v>e.max)))
					{
						temp = e.name.replace(target, "");	// Erase "REQ_" from string
						temp = temp.replace(target2, " ");
						if(e.description!=null && e.description!="")
						{
							email_fields+="\nThe  " + e.description + " field must be ";
						}
						else
						{
							email_fields+="\nThe  " + temp + " field must be ";
						}
						if(e.min!=null && e.max!=null)
							{
								email_fields+="\n greater than " + e.min;
								email_fields+=" and less than " + e.max;
							}
						else
						{
							if(e.min!=null)
								{email_fields+="greater than " + e.min;}
							if(e.max!=null)
								{email_fields+="less than " + e.max;}
						}
						fieldfocus = e;
					}
				}
				
				
			}
			
		}
	}
	
	//empty_fields= empty_fields + "\n"  + email_fields;
	
	if (empty_fields || email_fields )
	{
		alert ("The following required field(s) are empty:" + empty_fields + "\n"  + email_fields  + "\n");
		fieldfocus.focus();
		return false;
	}

	return true;
}
