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) {
	  	alert("電郵地址錯誤或未填寫，請再試")
		return false
	}

	var user=matchArray[1]
	var domain=matchArray[2]

	if (user.match(userPat)==null) {
	    alert("The username doesn't seem to be valid.")
	    return false
	}

	var IPArray=domain.match(ipDomainPat)
	if (IPArray!=null) {
		  for (var i=1;i<=4;i++) {
		    if (IPArray[i]>255) {
		        alert("Destination IP address is invalid!")
				return false
		    }
	    }
	    return true
	}

	var domainArray=domain.match(domainPat)
	if (domainArray==null) {
		alert("The domain name doesn't seem to be valid.")
	    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) {
	   alert("The address must end in a three-letter domain, or two letter country.")
	   return false
	}

	if (len<2) {
	   var errStr="This address is missing a hostname!"
	   alert(errStr)
	   return false
	}

	return true;
}

 function checkTextEmpty(theTextField,msg)
    {
    	if (theTextField.value == "")
    	{
    	  alert(msg);
    	  theTextField.focus();
    		return true;
    	}
    	return false;
    }

    function checkEqual(theTextField1,theTextField2,msg)
    {
    	if (theTextField1.value != theTextField2.value)
    	{
    	  alert(msg);
    	  theTextField1.value = "";
    	  theTextField2.value = "";
    	  theTextField1.focus();
    		return true;
    	}
    	return false;
    }

    function checkSelectEmpty(theSelectedField,msg)
    {
    	if (theSelectedField.options[theSelectedField.selectedIndex].value == "" ||
    	theSelectedField.options[theSelectedField.selectedIndex].value == 0 ||
    	theSelectedField.options[theSelectedField.selectedIndex].value == -1)
    	{
    		alert(msg);
    		theSelectedField.focus();
    		return true;
    	}
    	return false;
    }

    function checkRadioEmpty(theRadioField,msg)
    {
      var count=0;
      for (var i =0;i<theRadioField.length;i++)
      {
        if (theRadioField[i].checked=="1")
        {
          count = 1;
        }
      }
      if (count == 0)
      {
        alert(msg)
        theRadioField[0].focus();
        return true;
      }
      return false;
    }

    function getRadioValue(theRadioField)
    {
      var count=0;
      for (var i =0;i<theRadioField.length;i++)
      {
        if (theRadioField[i].checked=="1")
        {
          return theRadioField[i].value;
        }
      }
      return false;
    }

 function isValidDate(year,month,day,message)
 {
  	
   dateStr = month.value + "/" + day.value + "/" + year.value;
    var rtn = false;
    var unit = dateStr.split('/');
    

    if (dateStr.length < 11 && unit.length == 3) {
	var m = unit[0] - 1;
	var d = unit[1];
	var y = unit[2];

	var tempDate = new Date(y, m, d);

		if (! isNaN(tempDate) && tempDate.getMonth() == m) {
		    rtn = true;
		}else{
			year.focus();
			alert(message);
		}
    }

    return rtn;

}

function formatHKID(input_hkid)
{
 input_hkid = input_hkid.toString();

 var alpha = /[A-Za-z]/;
 var numeric = /[0-9]/;
 var checkdigit_range = /[0-9aA]/;
 var hkid = "";
 var arr_hkid;
 var char1;
 char1 = "";
 var checkdigit, lastdigit, sum, result;

 for (var i=0; i<input_hkid.length; i++) {
  char1 = input_hkid.charAt(i);
  if (!(char1==" " || char1=="(" || char1==")"))
   hkid += char1;
 }

 arr_hkid = hkid.split("");

 if (arr_hkid.length == 9) {
  if (!(arr_hkid[0].match(alpha) && arr_hkid[1].match(alpha)))
   return false;
  if (!(arr_hkid[2].match(numeric) && arr_hkid[3].match(numeric) &&
      arr_hkid[4].match(numeric) && arr_hkid[5].match(numeric) &&
      arr_hkid[6].match(numeric) && arr_hkid[7].match(numeric)))
   return false;
  if (!arr_hkid[8].match(checkdigit_range))
   return false;

  arr_hkid[0] = arr_hkid[0].toUpperCase();
  arr_hkid[1] = arr_hkid[1].toUpperCase();

  sum = (arr_hkid[0].charCodeAt(0)-55)*9 +
        (arr_hkid[1].charCodeAt(0)-55)*8 +
         parseInt(arr_hkid[2],10)*7 +
   parseInt(arr_hkid[3],10)*6 +
   parseInt(arr_hkid[4],10)*5 +
   parseInt(arr_hkid[5],10)*4 +
   parseInt(arr_hkid[6],10)*3 +
   parseInt(arr_hkid[7],10)*2;
  lastdigit = arr_hkid[8].toString.toUpperCase();

  result = arr_hkid[0]+arr_hkid[1]+arr_hkid[2]+
    arr_hkid[3]+arr_hkid[4]+arr_hkid[5]+
    arr_hkid[6]+arr_hkid[7]+"("+arr_hkid[8]+")";
 // if (result==10) result="A";

 } else if (arr_hkid.length == 8) {
  if (!arr_hkid[0].match(alpha))
   return false;
  if (!(arr_hkid[1].match(numeric) && arr_hkid[2].match(numeric) &&
      arr_hkid[3].match(numeric) && arr_hkid[4].match(numeric) &&
      arr_hkid[5].match(numeric) && arr_hkid[6].match(numeric)))
   return false;
  if (!arr_hkid[7].match(checkdigit_range))
   return false;

  arr_hkid[0] = arr_hkid[0].toUpperCase();

  sum = (arr_hkid[0].charCodeAt(0)-64)*8 +
   parseInt(arr_hkid[1],10)*7 +
   parseInt(arr_hkid[2],10)*6 +
   parseInt(arr_hkid[3],10)*5 +
   parseInt(arr_hkid[4],10)*4 +
   parseInt(arr_hkid[5],10)*3 +
   parseInt(arr_hkid[6],10)*2;
  lastdigit = arr_hkid[7].toString().toUpperCase();
  result = arr_hkid[0]+arr_hkid[1]+arr_hkid[2]+
    arr_hkid[3]+arr_hkid[4]+arr_hkid[5]+
    arr_hkid[6]+"("+arr_hkid[7]+")";
 // if (result==10) result="A";

 } else {
  return false;
 }

 checkdigit = 11 - sum % 11;
 if (checkdigit.toString()=="10") checkdigit="A";
 if (checkdigit.toString()=="11") checkdigit="0";
 return ((checkdigit.toString()==lastdigit.toString()) ? result : false);
}

function checkForm(f){
if (checkRadioEmpty(f.q1,"請選擇參選作品"))
  return false;

if (checkTextEmpty(f.name,"請填寫姓名"))
   return false;

if (checkSelectEmpty(f.gender,"請填寫性別"))
    return false;
  
 var birth1 = f.birth1;
 if (checkSelectEmpty(birth1, "出生日期錯誤或未填寫"))
  {
    return false;
  }
 var birth2 = f.birth2;
 if (checkSelectEmpty(birth2, "出生日期錯誤或未填寫"))
  {
    return false;
  }
  
  var birth3 = f.birth3; 
  if (checkSelectEmpty(birth3, "出生日期錯誤或未填寫"))
  {
    return false;
  }
 
   if (!isValidDate(birth1, birth2, birth3, "出生日期錯誤或未填寫"))
  {
    return false;
  }

  var hkid1 = f.hkid1;
  if (checkTextEmpty(hkid1,"身份證號碼錯誤或未填寫，請再試"))
  {
    return false;
  }

  var hkid2 = f.hkid2;
  if (checkTextEmpty(hkid2,"身份證號碼錯誤或未填寫，請再試"))
  {
    return false;
  }

  var hkid = hkid1.value+hkid2.value;
  if (!formatHKID(hkid))
  {
    alert("身份證號碼錯誤,請再試");
    return false;
  }
 
if (!emailCheck(f.email.value))
{
  f.email.focus();
  return false;
}

return true;
}