/* Functions */

function isNumber(txtfld, mdigits, msg)
{
	var str=txtfld.value;
	for (var i = 0; i < str.length; i++) {
		var ch = str.substring(i, i + 1);
		if (ch < "0" || "9" < ch){
			alert("\nThe " + msg + " field only accepts digits.\n\r Please re-enter " + msg + ".");
			txtfld.select();
			txtfld.focus();
			return(false);
      }
   }
   if(str.length>mdigits){
		alert("\nThe " + msg + " field shall have " + mdigits + " digits only.\n\n Please re-enter " + msg + ".");
		txtfld.select();
		txtfld.focus();
		return(false);
   }
	return(true);
}

function isZip(txtfld,msg)
{
	var str=txtfld.value;
	for (var i = 0; i < str.length; i++) {
		var ch = str.substring(i, i + 1);
		if (ch < "0" || "9" < ch){
			alert("\nThe " + msg + " field only accepts digits.\n\r Please re-enter " + msg + ".");
			txtfld.select();
			txtfld.focus();
			return(false);
      }
   }
   if(str.length>10){
		alert("\nThe " + msg + " field should either be in the 5-digit or 5+4-digit format only.\n\n Please re-enter " + msg + ".");
		txtfld.select();
		txtfld.focus();
		return(false);
   }
	return(true);
}
function validateZIP(field) {
var valid = "0123456789-";
var hyphencount = 0;

if (field.length!=5 && field.length!=10) {
alert("Please enter your 5 digit or 5 digit+4 zip code.");
return false;
}
for (var i=0; i < field.length; i++) {
temp = "" + field.substring(i, i+1);
if (temp == "-") hyphencount++;
if (valid.indexOf(temp) == "-1") {
alert("Invalid characters in your zip code.  Please try again.");
return false;
}
if ((hyphencount > 1) || ((field.length==10) && ""+field.charAt(5)!="-")) {
alert("The hyphen character should be used with a properly formatted 5 digit+four zip code, like '12345-6789'.   Please try again.");
return false;
   }
}
return true;
}

function isEmpty(txtFld,msg) {
	var str = txtFld.value;
	if (str == "" || str == "0" || str == " " || str == null) {
		if (msg != "") {	
			alert("\nPlease fill in " + msg + ".\n\nIt is required.")
			txtFld.focus();
		}
		return(true);
	}
	return(false);	
}	

function inRange(txtFld,f,t,msg) {
	var str = txtFld.value;
	if (isEmpty(txtFld, "")) return true;

	if ((str < f) || (str > t)) {
		if (msg != "") {	
			alert("\n" + msg + " is Invalid.\n\nPlease correct.")
			txtFld.focus();
			txtFld.select();
		}
		return(false);
	}
	return(true);	
}	
      
function isEmail(txtFld,msg) {
   var str   = txtFld.value;
	if (txtFld.value == "") {
		return(true);
	}

   if (txtFld.value.indexOf ('@',0) == -1 || 
       txtFld.value.indexOf ('.',0) == -1)
      {
      alert("\nThe " + msg + " address entered is not in a proper format. Please re-enter." )
      txtFld.select();
      txtFld.focus();
      return(false);
      }
   else
      {
		for (var i = 0; i < str.length; i++) 
		{
			var ch = str.substring(i, i + 1);
			if (((ch < "a" || "z" < ch) && (ch < "A" || "Z" < ch) && (ch < "0" || "9" < ch)) && ch != '@' && ch !='.' && ch !='-' && ch!='_') 
				{
				alert("\nPlease use only letters, numbers and @.-_ for " + msg + ".");
				txtFld.select();
				txtFld.focus();
				return(false);
				}
		}	    
		if ( txtFld.value.length < 7 )
		   {
		   alert("\nThe " + msg + " address entered is not in a proper format. Please re-enter." )
		   txtFld.select();
		   txtFld.focus();
		   return(false);
		   }
		return(true);
      }
}

function isDecimal(txtFld,msg)  {
   var str = txtFld.value;
   if (str == "") {
         alert("\nThe " + msg + " field is blank.\n\nPlease enter a decimal number.");
         txtFld.focus();
         return false;
   }
   for (var i = 0; i < str.length; i++) 
      {
      var ch = str.substring(i, i + 1);
      if ((ch < "0" || "9" < ch) && ch != '.') 
         {
         alert("\nThe " + msg + " field accepts only numbers and a decimal point. \n\nPlease re-enter a decimal number.");
         txtFld.select();
         txtFld.focus();
         return false;
         }
      }
   return true;
   }
   
function isPhone(txtFld,msg) {
	var str=txtFld.value;
	var newstr="";
	var i;
	var ch;
 
	if (str == "") return true;
	
    for (var i = 0; i < str.length; i++) {
      ch = str.substring(i, i + 1);
      if ((ch < "0" || "9" < ch) && ch != '-' && ch != '(' && ch != ')' && ch != ' ') {
         alert("\nThe " + msg + " field accepts only numbers and the characters () or -. \n\nPlease re-enter a valid phone number.");
         txtFld.select();
         txtFld.focus();
         return false;
         }
      }

	for(i=0;i<str.length;i++){
		ch=str.substring(i,i+1);
		if(! (ch < "0" || ch > "9")) newstr=newstr + ch;
		}
	if(newstr.length!=10){
         alert("\nThe " + msg + " field is not in proper format(" + newstr.length + ").\n\nPlease enter the number again.");
         txtFld.focus();
         return false;
		}
	str = "("+newstr.substring(0,3)+") "+newstr.substring(3,6)+"-"+newstr.substring(6,10)
	txtFld.value = str;
	return true;
}

function isCreditCard(txtFld,msg) {
	var str = txtFld.value;
	if (str == "") {
         alert("\nThe " + msg + " field is blank.\n\nPlease enter the Credit Card Number.");
         txtFld.focus();
         return false;
    }
    for (var i = 0; i < str.length; i++) {
		var ch = str.substring(i, i + 1);
		if (ch < "0" || "9" < ch) {
			alert("\nThe " + msg + " field accepts only digits. \n\nPlease re-enter the Credit Card Number.");
			txtFld.select();
			txtFld.focus();
			return false;
		}
    }
	if (str.length < 13 || str.length > 16) {
		alert("Credit card number must be a string of digits between 13 and 16 characters.  \n\nPlease re-enter the Credit Card Number.")
		txtFld.select();
		txtFld.focus();
		return false;
	}
	if (!isCreditCardValid(str)) {
		alert("Credit card number is Invalid.  \n\nPlease re-enter the Credit Card Number.")
		txtFld.select();
		txtFld.focus();
		return false;
	}
	return true;
}

function isCreditCardValid(st) {
  // Encoding only works on cards with less than 19 digits
  if ((st.length > 19) || (st.length < 13))
    return (false);

  sum = 0; mul = 1; l = st.length;
  for (i = 0; i < l; i++) {
    digit = st.substring(l-i-1,l-i);
    tproduct = parseInt(digit ,10)*mul;
    if (tproduct >= 10)
      sum += (tproduct % 10) + 1;
    else
      sum += tproduct;
    if (mul == 1)
      mul++;
    else
      mul--;
  }

  if ((sum % 10) == 0) 
	    return (true);
  else
		return (false);

}

function isExpMonth(monthFld,yearFld,msg) {
	if(monthFld.options[monthFld.selectedIndex].value=="" || yearFld.options[yearFld.selectedIndex].value=="") {
		alert("\nThe " + msg + " fields need to be entered");
		monthFld.focus();
		return (false);
	}
	var intMM = parseInt(monthFld.options[monthFld.selectedIndex].value);
	var intYYYY = parseInt(yearFld.options[yearFld.selectedIndex].value);
	var dtToday = new Date();
	if(intMM<1 || intMM > 12 || intYYYY < dtToday.getFullYear()) {
		alert("\nThe " + msg + " contains invalid date values.\n\nPlease re-enter the values.");
		monthFld.focus();
		return (false);
	}
	if(intYYYY==dtToday.getFullYear() && (intMM - 1) < dtToday.getMonth()) {
		alert("\nThe " + msg + " contains expired date values.\n\nPlease re-enter the values.");
		monthFld.focus();
		return (false);
	}
	return (true);
}

function isDate(txtFld, msg) {
	var str=txtFld.value
	var datePat = /^(\d{1,2})(\/|-)(\d{1,2})(\/|-)(\d{2,4})$/;
	var matchArray = str.match(datePat); // is the format ok?
	if (matchArray == null) {
		alert("The Date value in " + msg + " is not in a valid format.")
		txtFld.select();
		txtFld.focus();
		return false;
	}
	var month = matchArray[1]; 
	var day = matchArray[3];
	var year = matchArray[5];
	if (month < 1 || month > 12) { 
		alert("The Month in " + msg + " must be between 1 and 12.");
		txtFld.select();
		txtFld.focus();
		return false;
	}
	if (day < 1 || day > 31) {
		alert("The Day in " + msg + " must be between 1 and 31.");
		txtFld.select();
		txtFld.focus();
		return false;
	}
	if ((month==4 || month==6 || month==9 || month==11) && day==31) {
		alert("Month "+month+" doesn't have 31 days!")
		txtFld.select();
		txtFld.focus();
		return false
	}
	if (month == 2) { 
		var isleap = (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0));
		if (day>29 || (day==29 && !isleap)) {
			alert("February " + year + " doesn't have " + day + " days!");
			txtFld.select();
			txtFld.focus();
			return false;
		}
	}
	return true;
}

function areDatesInOrder(fdate,sdate,fmsg,smsg){
	var fd = new Date(fdate.value);
	var sd = new Date(sdate.value);
	var d,m,y;
	var strf;
	var strs;
	d = fd.getDate();
	m = fd.getMonth();
	y = fd.getFullYear();
	strf = "" + y;
	if(m<10)strf=strf + "0" + m; else strf = strf + m;
	if(d<10)strf=strf + "0" + d; else strf = strf + d;

	d = sd.getDate();
	m = sd.getMonth();
	y = sd.getFullYear();
	strs = "" + y;
	if(m<10)strs=strs + "0" + m; else strs = strs + m;
	if(d<10)strs=strs + "0" + d; else strs = strs + d;
	if(strf > strs){
		alert(fmsg + " is later than " + smsg);
		fdate.select();
		fdate.focus();
		return(false);
	}
	return(true);
}

function isCurrency(txtfld,msg) {
	var strfld = txtfld.value;
	var strlcl = "";
	var ch;
	var bdec = false;
	for (var i = 0; i < strfld.length; i++){
		ch = strfld.substring(i,i+1);
		if(ch>="0" && ch<="9"){ strlcl = strlcl + ch;}
		else if((ch=="." || ch=="$") && bdec==false){
				strlcl=strlcl + ch;
				bdec==true;
			}
		else{
			alert(msg + " has invalid characters.  Rectify and Try again.");
			txtfld.select();
			txtfld.focus();
			return(false);
		}
	}
	if(strlcl.indexOf(".")>=0 && strlcl.indexOf(".")<(strlcl.length-1)){
		var strdec = strlcl.substring(strlcl.indexOf(".")+1,strlcl.length);
		if(strdec.length>2){
			alert(msg + " can be up to two decimals only.");
			txtfld.select();
			txtfld.focus();
			return(false);
		}
	}
	return(true);	
}

function replace(s, F, R) {
	var find = 0;
	var start = 0
	while (find != -1) {
		find = s.indexOf(F, start);
		if (find != -1) {
			s = s.substring(0,find) + R + s.substring(find + F.length);
			start = find + R.length;
		}
	}
	return s;
}

function clean(s) {
	if (!s) return s;
	s = replace(s, '$', '');
	s = replace(s, ',', '');
	s = replace(s, '%', '');	
	return s;
}

function checkempty(elem) {
	if ((elem.value == null) || (elem.value.length<2)) {
		alert('Please enter a value for this field.');
		elem.focus();
		return false;
	}
	return true;
}

function checkamt(elem, dec) {
	if ((elem.value == null) || (elem.value.length==0)) elem.value = 0
	value = parseFloat(clean(elem.value));
	if (isNaN(value)) {
		alert('You have entered an incorrect character in this field. \nPlease check your information and try again.');
		elem.focus();
		return false;
	}
	elem.value = FmtMoney(value,dec)
	return true
}

function checkrate(elem) {
	if ((elem.value == null) || (elem.value.length==0)) elem.value = "0%";
	value = parseFloat(clean(elem.value));
	if (isNaN(value)) {
		alert('You have entered an incorrect character in this field. \nPlease check your information and try again.');
		elem.focus();
		return false;
	}
	if ((value<1) || (value>99)) {
		alert('You have exceeded the range for some information on this tab. \nPlease check your information and try again.');
		elem.focus();
		return false;
	}
	elem.value = FmtRate(value)
	return true
}

function FmtRate(A) {
	N=Math.abs(Math.round(A*1000));
	S=((N<10)?"00":((N<100)?"0":""))+N;
	S=S.substring(0,(S.length-3))+"."+S.substring((S.length-3),S.length)+"%";
	return S;
}

function FmtMoney(A,D) {
	N=Math.abs(Math.round(A*100));
	S=((N<10)?"00":((N<100)?"0":""))+N;
	S=((A<0)?"-":"")+"$"+WGgroup(S.substring(0,(S.length-2))) + 
	      ((D>0)?"."+S.substring((S.length-2),S.length):"");
	return S;
}

function WGgroup(S) {
	return (S.length<4)?S:(WGgroup(S.substring(0,S.length-3))+","+S.substring(S.length-3,S.length));
}

	