
<!--// Functions Keymind Created 03/01/2000, Revised on 3/18/2001, 6/12/2001, 7/12/2001, 7/18/2001, 12/13/01
/* USAGE: MS_formvalid.js=====================
Inside form tag, put this event hander =>

Version 1.00.121301


<form action="..." name="something"
onsubmit="return MS_FormValidate(this,
 exact field name [FORMAT] sep. by comma  // ex. 'fname, lname, state , title, paytype, companyname',
 captions for fields  sep. by comma  // ex. 'First Name, Last Name, State, Title, Payment Type, Company Name',
 'myCustomFunctionName'
);">

*/


function MS_FormValidate(v_form,v_reqfields, v_captions,  v_customfunc)
{
	var thisForm = v_form;	
	var re = /^[ ]*([^ \[]+)[ ]*(\[[ ]*(\w+)[ ]*\]){0,1}[ ]*(null){0,1}[ ]*$/i;
	var re2 = /(\W*)(\w+)/g;

	var arr_fields = v_reqfields.split(",");
	if(v_captions) arr_captions =  v_captions.split(",");
		
	fl = arr_fields.length;
	for(var i=0; i<fl;i++)
	{
		if(re.test(arr_fields[i])){field = RegExp.$1;format = RegExp.$3.toUpperCase(); null_allowed = (RegExp.$4)?true:false;}
			else {window.alert("Please corrent field or format."); return false;}		

		caption = (v_captions && arr_captions[i])?arr_captions[i]:field;
		caption = MS_Trim(caption);

		FieldValue = "";
		arr_combine = field.split("+");
	
		cl = arr_combine.length;

		for(j=0;j<cl;j++){
			if(arr_combine[j].match(/^\w+$/)){
				aElement = thisForm.elements[arr_combine[j]];
				
				EmptyCheck = MS_EmptyCheck(aElement);
				if(!EmptyCheck) {
					aElementType = MS_GetElementType(aElement);
					msg = (aElementType.indexOf("text")>=0)?  "enter": "select";
					window.alert("Please "+msg+" "+caption +".");
					return false;
				}
				FieldValue +=  MS_GetElementValue(aElement) ;			
		
			}else{
				FieldValue +=  arr_combine[j];
			}
		}		
		if(format !="")
			if(!MS_Check_Format(FieldValue , format)){
				aElement.focus();
				window.alert("Please correct "+caption +".");
				return false;	
			}
	}	
	if(v_customfunc) return eval(v_customfunc +"();" );
	return true;
}
function MS_GetElementValue(aElement)
{
	if(!aElement[0]){
			return aElement.value;

	}else{
		
		if( aElement[0].type == "radio" || aElement[0].type == "checkbox"){
			ch = false;
			for(j=0;j<element_len;j++)if(aElement[j].checked){return aElement[j].value;}
			
		}else if(aElement.type == "select-one" || aElement.type == "select-multiple"){
			return aElement.options[aElement.selectedIndex].value;
		}
	}
}
function MS_GetElementType(aElement)
{
	if(aElement.type) {return aElement.type;} else {return aElement[0].type;}
}
function MS_EmptyCheck(aElement)
{
	result = true;
	if(!aElement[0]){
		if( aElement.type == "radio" || aElement.type == "checkbox"){
			if(!aElement.checked)	result = false;			
			}else{
				if(MS_Trim(aElement.value) == "") result = false;	
			}
			if (!result) 	aElement.focus();
		}else{ // if element_len > 1 then
			element_len = aElement.length;
			if( aElement[0].type == "radio" || aElement[0].type == "checkbox"){
				ch = false;
				for(j=0;j<element_len;j++)if(aElement[j].checked){ch = true;break;}
				if(!ch)	 {result = false;aElement[0].focus();}
			}else if(aElement.type == "select-one" || aElement.type == "select-multiple"){
				if((aElement.selectedIndex<0) || ((aElement.selectedIndex>=0) && (aElement.options[aElement.selectedIndex].value=="")))
					{result = false; aElement.focus();}
			}
	}
	return result;
}


function MS_Trim(v_str)
{
	var i_s=0, i_e=0;
	ln = v_str.length;
	for(var i=0;i<ln;i++) if(v_str.charAt(i)!=" ") {i_s=i;break;};
	for(i=ln-1;i>=0;i--) if(v_str.charAt(i)!=" ") {i_e=i+1;break;};
	return v_str.substring(i_s, i_e);
}



function MS_Check_Format(v_string, v_formatname)
{

if (v_formatname == "DATE"){return MS_ValiDate(v_string);}
else if(v_formatname == "CARDEXPDATE") {return MS_ExpDate(v_string);}
else{
	//Built-in Formats regular expression
	var formats = new Array();
	formats = {
		"NAME":/^[a-zA-Z ]+$/,
		"EMAIL":/^.+\@.+\.\D+$/,
		"PHONE":/\(\d{3}\)[ ]*\d{3}-\d{4}/,
		"NUMBERS":/^[0-9\-\/\,\.]+$/,
		"ZIPCODE":/^\d{5}(\-\d{4}){0,1}$/,
		"CREDITCARD":/^\d{15,16}$/
	}
	return formats[v_formatname].test(v_string);
}
}

function MS_ExpDate(v_string)
{
	var format = /^\d{4,6}$/;
	if (!format.test(v_string)) return false;
	
	m = parseInt(v_string.substring(0,2),10);
	y = parseInt(v_string.substr(2),10);

	if(y<30) y+=2000;
	if(y>=30 && y<=99) y+=1900;
	ed = new Date(y, m-1, 1);
	td = new Date(new Date().getFullYear(), new Date().getMonth(), 1);
	return (ed >= td);
}


function MS_ValiDate(v_string)

{

	var tmpDate = new Date(v_string);
	if (isNaN(tmpDate)) return false;

	v_string = v_string.replace(/[\-|\.|\/|\,]/g, " ");

	var re = /^(\d{1,2}|[a-zA-Z]{3,})[ ]+(\d{1,2})[ ]+(\d{1,4})$/;
	if (!re.test(v_string)) return false;

	var strMonths = {"JAN":1, "FEB":2, "MAR":3, "APR":4, "MAY":5, "JUN":6, "JUL":7, "AUG":8, "SEP":9, "OCT":10, "NOV":11, "DEC":12}; 
	year = MS_GetYear(parseInt(RegExp.$3, 10));
	if(isNaN(parseInt(RegExp.$1, 10))){
		month = strMonths[RegExp.$1.substring(0,3).toUpperCase()];
	}else{
		month = parseInt(RegExp.$1, 10);
	}
	day  = parseInt(RegExp.$2, 10);
	
	if((MS_GetYear(tmpDate.getYear()) != year) || (tmpDate.getMonth() + 1 != month) || (tmpDate.getDate() != day))
		return false;
	
	return true;

}

function MS_GetYear(d) { 
  return (d <100) ? d + 1900 : d;
}
//-->




