//---------------------------- Foundation Function In JS ----------------------------// 
// A: Check Email
function IsValidEmail(asTempString)
{
   var atCount = 0;
   var periodCount = 0;
   var strLen = asTempString.length;
   var i;
   var temp;
   var validchar= /^\w|[@.-]$/; //valid char = a-z, A-Z, @ , . , _ , -

   if (asTempString == '')
     return false;
     
   for (i = 0; i < strLen; i++)
      {
      temp = asTempString.substring(i, i+1);
	  if (temp == '@') 
         atCount++;
      if (temp == '.') 
         periodCount++;
	  if (!validchar.test(temp)){
//		alert(temp)
		return false;
		}
	  }
   if ((atCount == 1) && (periodCount > 0))
      return true;
   else
      return false;

}
// B: Trim Function
function trim(inputString) {
   if (typeof inputString != "string") { return inputString; }
   var retValue = inputString;
   var ch = retValue.substring(0, 1);
   while (ch == " ") {
      retValue = retValue.substring(1, retValue.length);
      ch = retValue.substring(0, 1);
   }
   ch = retValue.substring(retValue.length-1, retValue.length);
   while (ch == " ") {
      retValue = retValue.substring(0, retValue.length-1);
      ch = retValue.substring(retValue.length-1, retValue.length);
   }
   while (retValue.indexOf("  ") != -1) {
      retValue = retValue.substring(0, retValue.indexOf("  ")) + retValue.substring(retValue.indexOf("  ")+1, retValue.length);
   }
   return retValue;
}

function resetForm(f){
	f.reset();
}

//---------------------------- Generate the JS For the Edit And Add Form ----------------------------//
function CheckFormByListShow(f){

	var DateErrorMessage, bNec;
	
	for (i = 0; i < NecArray.length; i++){
		bNec = NecArray[i] == "true" || NecArray[i] == "True";
		if(bNec){
			if (TypeArray[i] == "checkbox" || TypeArray[i] == "radio"){
				if (checkEmptyCRS(1,f,FieldArray[i],ShowArray[i])) return false;
			}
			else if (TypeArray[i] == "select")
			{
				if (checkEmptyCRS(2,f,FieldArray[i],ShowArray[i])) return false;
			}
			else{
				if (checkEmpty(f,FieldArray[i],ShowArray[i])) return false;
			}
		}
		if(TypeArray[i] == "num"){
			if (checkInt(f,FieldArray[i],ShowArray[i], bNec)) return false;
		}
		if(TypeArray[i] == "email"){
			if (checkEmail(f,FieldArray[i], bNec)) return false;
		}
		if(TypeArray[i] == "password"){
			if (checkPwd(f, FieldArray[i], "", 6)) return false;
		}
		if (TypeArray[i] == "date")
		{
			if (checkDate(f,FieldArray[i], bNec)) return false;
		}
	}
	return true;
}
//---------------------------- Family of check Function In JS ----------------------------// 
function checkEmpty(form, field, display){
  if (trim(form.elements[field].value) == "")
  {
	  alert("Please fill in " + display);
	  form.elements[field].focus();
	  form.elements[field].select();
	  return true;
  }
  return false;
}

function checkEmptyCRS(CRS, form, field, display){
	if(trim(CRS) == 1 || trim(CRS) == '1')
	{
		// radio, checkBox
		var j = 0;
		var bHasSelected = false;
		if (isNaN(form.elements[field].length))
		{	// Single radio, checkBox
			if(!form.elements[field].checked){
				alert("Please select " + display);
				return true;
			}
		}
		else
		{	// Multi radio, checkBox
			for(j = 0; j < form.elements[field].length; j++){
				if (form.elements[field][j].checked){
					bHasSelected = true;
				}
			}
			if (!bHasSelected){
				alert("Please select " + display);
				return true;
			}
		}
	}
	else{
		if (trim(form.elements[field].value) == "")
		  {
			  alert("Please select " + display);
			  form.elements[field].focus();
			  return true;
		  }
	}
	return false;
}

function checkInt(form, field, display, nec){
  if (nec)
  {
	  if(checkEmpty(form, field, display)) return true;
  }
  if (isNaN(form.elements[field].value))
  {
	  alert(display + " has to be integer");
	  form.elements[field].focus();
	  form.elements[field].select();
	  return true;
  }
  return false;
}

function checkDate(form, field, nec){
   if (nec)
   {
	   if(checkEmpty(form, field, "Date")) return true;
   }
   DateErrorMessage = IsDate(form.elements[field].value);
   if (trim(form.elements[field].value != ""))
   {
	   if ( DateErrorMessage != "")
	   {
			alert('Invalid date format!\n\n Please use yyyy\/mm\/dd format, \n\ne.g., 2002/08/20');
			form.elements[field].focus();
			form.elements[field].select();
			return true;
	   }
   }
   return false;
}

function checkPwd(form, field, confirm, len){
	if (trim(confirm) != "")
	{
		if (trim(form.elements[field].value) != trim(form.elements[confirm].value))
		{
			alert("Password unmatched!");
			form.elements[field].focus();
			form.elements[field].select();
			return true;
		}
	}
	AlphaNumericChar = /[^0-9A-Za-z_-]/;
	if (form.elements[field].value.length < len || form.elements[field].value.match(AlphaNumericChar)){
		alert('The password has to be at least '+ len +' letters\n\nPlease use the Alphabet or number(a-z, A-Z, 0-9),\nThere is no space and symbol!');
		form.elements[field].focus();
		form.elements[field].select();
		return true;
	}
	return false;
}

function checkEmail(form, field, nec){
	if(nec || trim(form.elements[field].value) != "")
	{
		if (!IsValidEmail(form.elements[field].value))
		{
		alert("Please fill in an valid email account");
			form.elements[field].focus();
			form.elements[field].select();
			return true;
		}
	}
	return false;
}

function checkGreaterZero(form, field, display){
  if (trim(form.elements[field].value) < 0)
  {
	  alert(display + " must > 0 ");
	  form.elements[field].focus();
	  form.elements[field].select();
	  return true;
  }
  return false;
}
