﻿function isEmailAddr(email)

{

  var result = false;

  var theStr = new String(email);

  var index = theStr.indexOf("@");

  if (index > 0)

  {

    var pindex = theStr.indexOf(".",index);

    if ((pindex > index+1) && (theStr.length > pindex+1))

	result = true;

  }

  return result;

}



function validRequired(formField,fieldLabel)

{

	var result = true;

	

	if (formField.value == "")

	{

		alert('請填上' + fieldLabel);

		formField.focus();

		result = false;

	}

	

	return result;

}



function allDigits(str)

{

	return inValidCharSet(str,"0123456789.");

}



function inValidCharSet(str,charset)

{

	var result = true;



	// Note: doesn't use regular expressions to avoid early Mac browser bugs	

	for (var i=0;i<str.length;i++)

		if (charset.indexOf(str.substr(i,1))<0)

		{

			result = false;

			break;

		}

	

	return result;

}



function validEmail(formField,fieldLabel,required)

{

	var result = true;

	

	if (required && !validRequired(formField,fieldLabel))

		result = false;



	if (result && ((formField.value.length < 3) || !isEmailAddr(formField.value)) )

	{

		alert("請填上有效電郵 : yourname@yourdomain.com");

		formField.focus();

		result = false;

	}

   

  return result;



}



function validNum(formField,fieldLabel,required)

{

	var result = true;



	if (required && !validRequired(formField,fieldLabel))

		result = false;

 

 	if (result)

 	{

 		if (!allDigits(formField.value))

 		{

 			alert('Please enter a number for the "' + fieldLabel +'" field.');

			formField.focus();		

			result = false;

		}

	} 

	

	return result;

}





function validInt(formField,fieldLabel,required)

{

	var result = true;



	if (required && !validRequired(formField,fieldLabel))

		result = false;

  

 	if (result)

 	{

 		var num = parseInt(formField.value,10);

 		if (isNaN(num))

 		{

 			//alert('Please enter a number for the "' + fieldLabel +'" field.');

			formField.focus();		

			result = false;

		}

	} 

	

	return result;

}





function validDate(formField,fieldLabel,required)

{

	var result = true;



	if (required && !validRequired(formField,fieldLabel))

		result = false;

  

 	if (result)

 	{

 		var elems = formField.value.split("/");

 		

 		result = (elems.length == 3); // should be three components

 		

 		if (result)

 		{

 			var month = parseInt(elems[0],10);

  			var day = parseInt(elems[1],10);

 			var year = parseInt(elems[2],10);

			result = allDigits(elems[0]) && (month > 0) && (month < 13) &&

					 allDigits(elems[1]) && (day > 0) && (day < 32) &&

					 allDigits(elems[2]) && ((elems[2].length == 4));

 		}

 		

  		if (!result)

 		{

 			alert('Please enter a date in the format MM/DD/YYYY for the "' + fieldLabel +'" field.');

			formField.focus();

			formField.value = "";		

		}

	} 

	

	return result;

}



function validateForm(theForm)

{

	// Customize these calls for your form



	// Start ------->

	if (!validRequired(theForm.fullname,"Name"))

		return false;



	if (!validEmail(theForm.email,"Email Address",true))

		return false;



	if (!validDate(theForm.available,"Date Available",true))

		return false;



	if (!validNum(theForm.yearsexperience,"Years Experience",true))

		return false;

	// <--------- End

	

	return true;

}



/**

		* DHTML date validation script for dd/mm/yyyy. Courtesy of SmartWebby.com (http://www.smartwebby.com/dhtml/)

	 */

	// Declaring valid date character, minimum year and maximum year

	var dtCh= "/";

	var minYear=1900;

	var maxYear=2100;

	

	function isInteger(s){

		var i;

		for (i = 0; i < s.length; i++){   

			// Check that current character is number.

			var c = s.charAt(i);

			if (((c < "0") || (c > "9"))) return false;

		}

		// All characters are numbers.

		return true;

	}

	

	function stripCharsInBag(s, bag){

		var i;

		var returnString = "";

		// Search through string's characters one by one.

		// If character is not in bag, append to returnString.

		for (i = 0; i < s.length; i++){   

			var c = s.charAt(i);

			if (bag.indexOf(c) == -1) returnString += c;

		}

		return returnString;

	}

	

	function daysInFebruary (year){

		// February has 29 days in any year evenly divisible by four,

		// EXCEPT for centurial years which are not also divisible by 400.

		return (((year % 4 == 0) && ( (!(year % 100 == 0)) || (year % 400 == 0))) ? 29 : 28 );

	}

	function DaysArray(n) {

		for (var i = 1; i <= n; i++) {

			this[i] = 31

			if (i==4 || i==6 || i==9 || i==11) {this[i] = 30}

			if (i==2) {this[i] = 29}

	   } 

	   return this

	}

	

	function isDate(dtStr){

		var daysInMonth = DaysArray(12)

		var pos1=dtStr.indexOf(dtCh)

		var pos2=dtStr.indexOf(dtCh,pos1+1)

		var strMonth=dtStr.substring(0,pos1)

		var strDay=dtStr.substring(pos1+1,pos2)

		var strYear=dtStr.substring(pos2+1)

		strYr=strYear

		if (strDay.charAt(0)=="0" && strDay.length>1) strDay=strDay.substring(1)

		if (strMonth.charAt(0)=="0" && strMonth.length>1) strMonth=strMonth.substring(1)

		for (var i = 1; i <= 3; i++) {

			if (strYr.charAt(0)=="0" && strYr.length>1) strYr=strYr.substring(1)

		}

		month=parseInt(strMonth)

		day=parseInt(strDay)

		year=parseInt(strYr)

		if (pos1==-1 || pos2==-1){

			alert("The date format should be : dd/mm/yyyy")

			return false

		}

		if (strMonth.length<1 || month<1 || month>12){

			alert("Please enter a valid month")

			return false

		}

		if (strDay.length<1 || day<1 || day>31 || (month==2 && day>daysInFebruary(year)) || day > daysInMonth[month]){

			alert("Please enter a valid day")

			return false

		}

		if (strYear.length != 4 || year==0 || year<minYear || year>maxYear){

			alert("Please enter a valid 4 digit year between "+minYear+" and "+maxYear)

			return false

		}

		if (dtStr.indexOf(dtCh,pos2+1)!=-1 || isInteger(stripCharsInBag(dtStr, dtCh))==false){

			alert("Please enter a valid date")

			return false

		}

	return true

	}
