function checkForm(thisForm)
{

    
    var error = "";
    var minAge = 18;
    var invalidAge = false;
    var minAgeRedirect = "/";
    
    if (!document.getElementById('required')) 
	{
	    return;
	}
    
    needFields = document.getElementById('required').value.split(',');
    fldLabels = document.getElementById('reqd_labels').value.split(',');

    for (var i = 0; i < needFields.length; i++)
	{
	    var field = document.getElementById(needFields[i].trim());
	    if (!field) 
		{
		    continue;
		}
	    var name = field.name;
	    var val = field.value.trim();
	    field.value = val;
			    
	    if (!val.trim())
		{
		    error += ' ' +fldLabels[i].trim() + " is required.\n";
		    
		}
	    else 
		{
		    if (name.search(/email/)>= 0)
			{
			    if (!validate_email(val)) 
			    {
			        error += " Please enter a valid email address.\n";
			    }
			}
		    else if (name.search(/DOB/)>= 0 || name.search(/birthda/)>= 0)
			{
			
			    if (!isValidDate(val))
				{
				    error += " Valid birthdate is required.\n";
				}
			    else 
				{
				    if (!isMinAge(val, minAge))
					{
					    invalidAge = true;
					    alert( "Sorry you must be at least " + minAge + " to participate.");
					    break;
					}
				}
			}
		    else if (name.search(/phone/) >= 0 || name.search(/cell/) >= 0 || name.search(/mobile/) >= 0)
			{
			    val = val.replace(/[^0-9]/g,'');
			    if (val.charAt(0)==1)
				{
				    val = val.substr(1);
				}
 			    field.value = val;
			    if (val.length != 10)
				{
				    error += " Valid "+ fldLabels[i].trim() + " number (area code + phone number) is required.\n";

				}
			    else if(parseInt(val) == 0)
				{
				    //error += " Valid "+ fldLabels[i].trim() + " number is required.\n";
				}
			}
		    else if (name.search(/zip/)>= 0 || name.search(/postal/)>= 0)
			{
			    val = val.replace(/[^0-9]/g,'');
			    field.value = val;
			    if (val.length != 5)
				{
				    error += " Zip must be 5 digits.\n";

				}
			    else if (val == '00000')
				{
				    error += " Valid "+ fldLabels[i].trim() + " is required.\n";
				}

			}
		    else if (name.search(/terms/) >= 0)
			{
			    if (field.checked == false)
				{
				    error += " Terms and Conditions must be accepted, to participate.\n";
				}
			}
		    else if (name.search(/confirmAge/) >= 0)
			{
			    if (field.checked == false)
				{
				    error += " You have to be at least 18 years old, to participate.\n";
				}
			}
		    
		}
	}
    
    if (invalidAge)
	{
	    window.location = minAgeRedirect;	
	    return false;
	}
    if (error != "")
	{
	    error = error.replace(/\_/g,' ');
	    alert("The following errors need to be fixed:\n\n"+error);
	    return false;
	}

    return true;
}

String.prototype.trim = function()
{
	return this.replace(/^\s*|\s*$/g,'');
}

function validate_email(email)
{
    
	var good = /^([\w\d\.\-_]+)@([\w\d\.\-]+)$/i;
	var evil =  /[^a-z0-9\@_\-\.]+/i;

	if (good.test(email) && !evil.test(email)) {
		return true;
	} else {
		return false;
	}
}

function validate_emailnew(field)
{

        var good = /^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,4})$/i;
        var evil =  /[^a-z0-9\@_\-\.]+/i;

        with (field)
        {
                apos=value.indexOf("@")
                dotpos=value.lastIndexOf(".")

                    if (apos<1 || dotpos - apos < 2 || (!good.test(value)))
                {
                        return false
                } else {
                        return true
                }
        }
}

function isValidDate(str)
{
  var re = /^(\d{1,2})[\s\.\/-](\d{1,2})[\s\.\/-](\d{4})$/
  
  if (!re.test(str)) return false;


  var result = str.match(re);
  var m = parseInt(result[1], 10);
  var d = parseInt(result[2], 10);
  var y = parseInt(result[3], 10);


  if(m < 1 || m > 12 || y < 1900 || y > 2100) return false;
  
  if(m == 2)
  {
		  var days = ((y % 4) == 0) ? 29 : 28;
  }
  else if(m == 4 || m == 6 || m == 9 || m == 11)
  {
		  var days = 30;
  }
  else
  {
		  var days = 31;
  }
  
  return (d >= 1 && d <= days);
}


function isMinAge(birthdate, minAge)
{
	birthday = new Date(birthdate);
	
	var minDate = new Date();
	var birthYear = birthday.getFullYear();
	var minBirthYear = minDate.getFullYear() - parseInt(minAge);
	
	if (birthYear < minBirthYear)
	{
		return true;
	}


	if (birthYear == minBirthYear)
	{
		if (birthday.getMonth() < minDate.getMonth())
		{
			return true;
		}
		
		if (minDate.getMonth() == birthday.getMonth())
		{
			if (birthday.getDate() <= minDate.getDate())
			{
				return true;
			}
		}
	}
	
	return false;
}

function ucfirst( str ) {
    // http://kevin.vanzonneveld.net
    // *     example 1: ucfirst('kevin van zonneveld');
    // *     returns 1: 'Kevin van zonneveld'
 
    var f = str.charAt(0).toUpperCase();
    return f + str.substr(1, str.length-1);
}
