
<!--// Functions Keymind Created 03/01/2000, Revised on 3/18/2001, 6/12/2001
/* USAGE: KM_JS_formvalid.js=====================
Inside form tag, put this event hander =>

<form action="..." name="something"
onsubmit="return KM_FormValidate(this,
 exact field name [FORMAT] sep. by comma  // ex. 'fname, lname, state [S], title, paytype[R], companyname',
 captions for fields  sep. by comma  // ex. 'First Name, Last Name, State, Title, Payment Type, Company Name',
 'myCustomFunctionName'
);">

*/



function KM_FormValidate(v_form,v_reqfields, v_captions,  v_customfunc)
{
	var thisForm = v_form;	
	var re = new RegExp("(.+)\\[(.+)\\]");
	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.$2.toUpperCase();}
		else 
			{field = arr_fields[i];
			 format = "";}
					
		caption = (v_captions && arr_captions[i])?arr_captions[i]:field;

		field = KM_Trim(field);
		format = KM_Trim(format);
		caption = KM_Trim(caption);

		if(format == "S" || format == "SELECT"){

			oneSelect = thisForm.elements[field];
			if((oneSelect.selectedIndex<0) || ((oneSelect.selectedIndex>=0) && (oneSelect.options[oneSelect.selectedIndex].value==""))){
				oneSelect.focus();
				window.alert("Please select "+caption +".");
				return false;	
			}
		}else if(format == "R" || format == "RADIO"|| format == "CHECKBOX"){

			aElement = thisForm.elements[field];

			if(!aElement[0]){
				if( aElement.type == "radio" || aElement.type == "checkbox"){
					if(!aElement.checked){
						aElement.focus();
						window.alert("Please select "+caption +".");
						return false;			
					}
				}
			}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){
						aElement[0].focus();
						window.alert("Please select "+caption +".");
						return false;			
					}
				}
			}
		
		}else if(format == "CHECKBOXA"){

			aElement = thisForm.elements[field];

			if(!aElement[0]){
				if( aElement.type == "radio" || aElement.type == "checkbox"){
					if(!aElement.checked){
						aElement.focus();
						window.alert( caption +".");
						return false;			
					}
				}
			}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){
						aElement[0].focus();
						window.alert( caption +".");
						return false;			
					}
				}
			}
		
		}else if(format == "USERID"){

			if(thisForm .elements[field].value == ""){
				thisForm.elements[field].focus();
				window.alert("Please enter username.");
				return false;	
			}else{
				vtempid = thisForm .elements[field].value;
				if (( vtempid.length < 6 ) || ( vtempid.length > 12 ))  {
					thisForm.elements[field].focus();
					window.alert("Please make sure the username is 6 - 12 characters long.");
					return false;	
				}
				
				r_idcheck = /^[a-zA-Z0-9_]+$/
				if ( !(r_idcheck.test(vtempid)) ) {
					thisForm.elements[field].focus();
					window.alert("Please enter "+caption +" with a-z,A-Z,0-9 and _.");
					return false;	
				}
				
				if ( !(isNaN(vtempid.charAt(0))) ) {
					thisForm.elements[field].focus();
					window.alert("Please start "+caption +" with a character.");
					return false;	
				}

			}
			
		}else if((format == "PSWD")||(format == "CFPSWD")){

			if(thisForm .elements[field].value == ""){
				thisForm.elements[field].focus();
				window.alert("Please enter password.");
				return false;	
			}else{
				vtempid = thisForm .elements[field].value;
				if (( vtempid.length < 4 ) || ( vtempid.length > 8 ))  {
					thisForm.elements[field].focus();
					window.alert("Please enter a password that contains 4-8 characters.");
					return false;	
				}
			}

			if(format=="PSWD"){
				vtemppswd = vtempid;
			}else{
				vtempcfpswd = vtempid;
				if ( vtemppswd != vtempcfpswd ) {
					thisForm.elements[field].focus();
					window.alert("The passwords you entered do not match, please make sure both passwords you entered are the same.");
					return false;	
				}
			}

		}else if(format == "VENDOR"){

			if(thisForm .elements[field].value == ""){
				thisForm.elements[field].focus();
				window.alert("Please enter vendor code.");
				return false;	
			}else{
				vtempid = thisForm .elements[field].value;
				if ( vtempid.length != 2 )   {
					thisForm.elements[field].focus();
					window.alert("Please enter 2 characters.");
					return false;	
				}
			}
		}else if(format == "CREDITCARD"){

			if(thisForm .elements[field].value == ""){
				thisForm.elements[field].focus();
				window.alert("Please enter "+caption +".");
				return false;	
			}else{
				vtempnumber = thisForm .elements[field].value;
				if ( isNaN(vtempnumber) ) {
					thisForm.elements[field].focus();
					window.alert("Please correct "+caption +".");
					return false;	
				}

				if ( thisForm.elements.fcardtype.value == "American Express" ) {
					if ( vtempnumber.length != 15 )  {
						thisForm.elements[field].focus();
						window.alert("Please enter a 15 digit card number.");
						return false;	
					}
				}else {
					if ( vtempnumber.length != 16 )  {
						thisForm.elements[field].focus();
						window.alert("Please enter a 16 digit card number.");
						return false;	
					}
				}
			}
		}else if ( (format == "PHONEAREA") || (format == "PHONEREGION") || (format == "PHONENUMBER") ){

			if(thisForm .elements[field].value == ""){
				thisForm.elements[field].focus();
				window.alert("Please enter "+caption +".");
				return false;	
			}else{
				vtempnumber = thisForm .elements[field].value;
				if( isNaN(vtempnumber) ){
					thisForm.elements[field].focus();
					window.alert("Please enter a 10 digit phone number.");
					return false;	
				}

				if ( (format == "PHONEAREA") || (format == "PHONEREGION") ) {
					if ( vtempnumber.length != 3 )  {
						thisForm.elements[field].focus();
						window.alert("Please enter a 10 digit phone number.");
						return false;	
					}
				}
				if ( format == "PHONENUMBER" )   {
					if ( vtempnumber.length != 4 )  {
						thisForm.elements[field].focus();
						window.alert("Please enter a 10 digit phone number.");
						return false;	
					}
				}
			}

		}else if ((format == "OPHONEAREA") || (format == "OPHONEREGION") || (format == "OPHONENUMBER") ){

			if(thisForm .elements[field].value != ""){

				vtempnumber = thisForm .elements[field].value;
				if( isNaN(vtempnumber) ){
					thisForm.elements[field].focus();
					window.alert("Please enter a 10 digit phone number.");
					return false;	
				}

				if ((format == "OPHONEAREA") || (format == "OPHONEREGION") ) {
					if ( vtempnumber.length != 3 )  {
						thisForm.elements[field].focus();
						window.alert("Please enter a 10 digit phone number.");
						return false;	
					}
				}
				if ( format == "OPHONENUMBER" )   {
					if ( vtempnumber.length != 4 )  {
						thisForm.elements[field].focus();
						window.alert("Please enter a 10 digit phone number.");
						return false;	
					}
				}
			}
			


		}else if (format == "TEXT") {
			if(thisForm .elements[field].value == ""){
				thisForm.elements[field].focus();
				window.alert("Please enter "+caption +".");
				return false;	
			}			
		}else if ((format == "NAME")||(format == "EMAIL")||(format == "PHONE")||(format == "NUMBERS")||(format == "DATE")||(format == "ZIPCODE")) {
			if(thisForm .elements[field].value == ""){
				thisForm.elements[field].focus();
				window.alert("Please enter "+caption +".");
				return false;	
			}else{
				if(!KM_Check_Format(thisForm .elements[field].value, format)){
					thisForm.elements[field].focus();
					window.alert("Please correct "+caption +".");
					return false;	
				}
			}
		}else if ((format == "ONAME")||(format == "OEMAIL")||(format == "OPHONE")||(format == "ONUMBERS")||(format == "ODATE")||(format == "OZIPCODE")) {
			if(thisForm .elements[field].value !== ""){
				if(!KM_Check_Format(thisForm .elements[field].value, format.substr(1,format.length)) ){
					thisForm.elements[field].focus();
					window.alert("Please correct "+caption +".");
					return false;	
				}
			}
		}else{
			if(thisForm .elements[field].value == ""){
				thisForm.elements[field].focus();
				window.alert("Please enter "+caption +".");
				return false;	
			}else{
				if(format !="")
				if(!KM_Check_Format(thisForm .elements[field].value, format)){
					thisForm.elements[field].focus();
					window.alert("Please correct "+caption +".");
					return false;	
				}

			}

		}
	}	


	if(v_customfunc) return eval(v_customfunc +"();" );
	return true;

}


function KM_Trim(v_str)
{
	var i_s=0, i_e;
	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 KM_Check_Format(v_string, v_formatname)
{
	if ( (v_formatname == "DATE") || (v_formatname == "ODATE") ) 
		{
			return KM_ValiDate(v_string);
		}
	else{
		//Built-in Formats regular expression
		var formats = new Array();
		formats = {
			"NAME":/^[a-z A-Z]+$/,
			"ONAME":/^[a-zA-Z]+$/,
			"EMAIL":/^.+\@.+\.\D+$/,
			"OEMAIL":/^.+\@.+\.\D+$/,
			"PHONE":/\(\d{3}\) \d{3}-\d{4}/,
			"OPHONE":/\(\d{3}\) \d{3}-\d{4}/,
			"ZIPCODE":/^\d{5}(\-\d{4}){0,1}$/,
			"OZIPCODE":/^\d{5}(\-\d{4}){0,1}$/,
			"CURRENCY":/^[0-9\-\.\/]+$/,
			"OCURRENCY":/^[0-9\-\.\/]+$/,
			"NUMBERS":/^[0-9\-\/]+$/,
			"ONUMBERS":/^[0-9\-\/]+$/
		}
		return formats[v_formatname].test(v_string);
	}
}

function KM_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 = KM_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((KM_GetYear(tmpDate.getYear()) != year) || (tmpDate.getMonth() + 1 != month) || (tmpDate.getDate() != day))
		return false;
	
	return true;

}

function KM_GetYear(d) { 
  return (d <100) ? d + 1900 : d;
}

//-->


