// JavaScript Document
function validate(form){
if (form.fname.value == "") { alert("Your first name is required."); form.fname.focus( ); return false; }
if (form.lname.value == "") { alert("Your last name is required."); form.lname.focus( ); return false; }
if (form.title.value == "") { alert("Your job title is required."); form.title.focus( ); return false; }
if (form.org.value == "") { alert("The name of the company you work for is required."); form.org.focus( ); return false; }
if (form.phone.value == "") { alert("Your phone number is required."); form.phone.focus( ); return false; }
if (form.email.value == "") { alert("Your email address is required."); form.email.focus( ); return false; }
if (form.email2.value == "") { alert("Please enter your email address again for confirmation."); form.email2.focus( ); return false; }

var em = form.email.value;
var filter = /(^[a-z]([a-z0-9_\.\-\+"'"]*)@([a-z0-9_\.\-\-]*)([.][a-z]{2,4})$)|(^[a-z]([a-z_\.]*)@[a-z0-9-]+(\.[a-z0-9-]+)*\.([a-z]{2,4})$)/i;
if (!filter.test(em)) 
	{
		alert("The email address you entered does not appear to be valid");
		form.email.focus();
		return false;
	}
var em2 = form.email2.value;
var filter2 = /(^[a-z]([a-z0-9_\.\-\+"'"]*)@([a-z0-9_\.\-\-]*)([.][a-z]{2,4})$)|(^[a-z]([a-z_\.]*)@[a-z0-9-]+(\.[a-z0-9-]+)*\.([a-z]{2,4})$)/i;
if (!filter2.test(em2)) 
	{
		alert("The second email address you entered is not valid");
		form.email2.focus();
		return false;
	}
if (form.email.value != form.email2.value) {alert("The email addresses you entered do not match."); form.email.focus();return false; }
if (form.jobfunc.value == "") { alert("Please select a job function that most closely matches your job responsibilities."); form.jobfunc.focus( ); return false; }
if (form.add.value == "") { alert("A mailing address is required."); form.add.focus( ); return false; }
if (form.city.value == "") { alert("Please enter the city you work in."); form.city.focus( ); return false; }
if (form.state.value == "") { alert("Please enter the state you work in."); form.state.focus( ); return false; }
if (form.payment[0].checked == false && form.payment[1].checked == false && form.payment[2].checked == false && form.payment[3].checked == false) { alert("Please select your payment method."); form.payment[0].focus( ); return false; }

if(form.payment[3].checked == true)
	{
		if(form.CC.value == ""){alert("Please select your credit card type.");form.CC.focus();return false;}
		if(form.NameOnCC.value == ""){alert("Please provide the card holder's name.");form.NameOnCC.focus();return false;}

        	var now = new Date();
			var year = 20+form.year.value;
			var month = form.month.value;							// this function is designed to be Y2K compliant.
            var expDate=new Date();
   			expDate.setFullYear(year, month, 1);
		    var today = new Date();
   			if (expDate<today){alert("Sorry! The expiration date you have entered would make this card invalid."+expDate);
                                                		return false;}
		var cardNumber = form.NumberOnCC.value;
		var ar = new Array( cardNumber.length );
		var i = 0,sum = 0;


    	for( i = 0; i < cardNumber.length; ++i ) {
    		ar[i] = parseInt(cardNumber.charAt(i));
    	}
    	for( i = ar.length -2; i >= 0; i-=2 ) { // you have to start from the right, and work back.
    		ar[i] *= 2;							 // every second digit starting with the right most (check digit)
    		if( ar[i] > 9 ) ar[i]-=9;			 // will be doubled, and summed with the skipped digits.
    	}										 // if the double digit is > 9, ADD those individual digits together 


        	for( i = 0; i < ar.length; ++i ) {
        		sum += ar[i];						 // if the sum is divisible by 10 mod10 succeeds
        	}
        	if((sum%10)!=0){alert("Sorry! this is not a valid credit card number.");return false;}	 	

        	if( cardNumber.length == 0 ) {						//most of these checks are self explanitory
        		alert("Please enter a valid card number.");
        		return false;				
        	}
        	for( var i = 0; i < cardNumber.length; ++i ) {		// make sure the number is all digits.. (by design)
        		var c = cardNumber.charAt(i);


            		if( c < '0' || c > '9' ) {
            			alert("Please enter a valid card number. Use only digits. do not use spaces or hyphens.");
            			return false;
            		}
            	}
            	var length = cardNumber.length;			//perform card specific length and prefix tests
				var cardType = form.CC.value;

                	switch( cardType ) {
                		case 'American Express':


                    			if( length != 15 ) {
                    				alert("Please enter a valid American Express Card number.");
                    				return false;
                    			}
                    			var prefix = parseInt( cardNumber.substring(0,2));


                        			if( prefix != 34 && prefix != 37 ) {
                        				alert("Please enter a valid American Express Card number.");
                        				return false;
                        			}
                        			break;
                        		case 'Discover':


                            			if( length != 16 ) {
                            				alert("Please enter a valid Discover Card number.");
                            				return false;
                            			}
                            			var prefix = parseInt( cardNumber.substring(0,4));


                                			if( prefix != 6011 ) {
                                				alert("Please enter a valid Discover Card number.");
                                				return false;
                                			}
                                			break;
                                		case 'Master Card':


                                    			if( length != 16 ) {
                                    				alert("Please enter a valid MasterCard number.");
                                    				return false;
                                    			}
                                    			var prefix = parseInt( cardNumber.substring(0,2));


                                        			if( prefix < 51 || prefix > 55) {
                                        				alert("Please enter a valid MasterCard Card number.");
                                        				return false;
                                        			}
                                        			break;
                                        		case 'Visa':


                                            			if( length != 16 && length != 13 ) {
                                            				alert("Please enter a valid Visa Card number.");
                                            				return false;
                                            			}
                                            			var prefix = parseInt( cardNumber.substring(0,1));


                                                			if( prefix != 4 ) {
                                                				alert("Please enter a valid Visa Card number.");
                                                				return false;
                                                			}
                                                			break;
                                                	}
		if (form.NameOnCC.value == ""){alert("Please select your credit card type.");form.NameOnCC.focus();return false;}
		if (form.code.value == "") { alert("Please fill in the security code on the back of your card."); form.code.focus( ); return false; }
		if (form.Bzip.value == "") { alert("Please fill in the billing zip or postal code for this card."); form.Bzip.focus( ); return false; }
	}
if (form.refer.value == "") { alert("Please tell us how you heard about this event."); form.refer.focus( ); return false; }
return true;
}