/* 	

Shane Devane - SFF - 10th June 2000 
shane@shanedevane.com
Updated - 17 October 2003
Complete form verification
V5.0						

*/

/*
<script language='Javascript' src='scripts/js/post.js'></script>
<script language='Javascript' src='scripts/js/verifyform.js'></script>

	//onClick="verify_form()"

*/


//MAIN
function verify_form(formname) {

	//change variables
	var form_name = new String (formname);
	var use_tech_messages = "yes"
	var cookie_path = "/";

	//verification options
	//-a letters only
	//-n numbers only
	//-e email address characters only
	//-b check box field
	//-h only alpha and numeric
	//-lX field must equal this length eg. firstname-10
	//-gX field must be less than X number of characters
	//-sXXXXXX field cannot equal

	//Create user arrays 
	var require_fields = new Array();
	var error_message = new Array();
	var cookie_fields = new Array();

		//multiple forms
		if (formname == "offlineorder1") 
		{ 
		//fields to check (in order)
		require_fields[0] = "emailaddress-e";

		//error message to be displayed (in order)
		error_message[0] = "Please check the email address.";


		//page: info/ask.asp
		} 
		else if (formname == "askaquestion") 
		{
		require_fields[0] = "titlex";
		require_fields[1] = "first_name";
		require_fields[2] = "last_name";
		require_fields[3] = "fromx-e";
		require_fields[4] = "subject";
		require_fields[5] = "enquiry_type";
		require_fields[6] = "message";

		error_message[0] = "Please enter your Title";
		error_message[1] = "Please enter your First Name.";
		error_message[2] = "Please enter your Last Name";
		error_message[3] = "Please enter your Email Address";
		error_message[4] = "Please enter a Subject for your Question";
		error_message[5] = "Please select a Question Type";
		error_message[6] = "Please enter your Question";
		
		} 
		else if (formname == "sendtofriend") 
		{
		alert("here");
		require_fields[0] = "STitle";
		require_fields[1] = "sname";
		require_fields[2] = "slname";
		require_fields[3] = "saddr-e";
		require_fields[4] = "rname";
		require_fields[5] = "remail-e";
		require_fields[6] = "message";

		error_message[0] = "Please enter your Title";
		error_message[1] = "Please enter your First Name.";
		error_message[2] = "Please enter your Last Name";
		error_message[3] = "Please enter your Email Address";
		error_message[4] = "Please enter your Friends Name";
		error_message[5] = "Please enter your Friends Email Address";
		error_message[6] = "Please enter your Message";
		} 
		else if (formname == "payment") 
		{
		if(document.payment.pay_type[0].checked==true)
			{
			
				//parse creditcard number for hyphens and spaces
				ccnum = new String(document.payment.cc_number.value)
				rExp = /-/g;
				result = ccnum.replace(rExp, "");
				rExp = /\s/g;
				result = result.replace(rExp, "");
				document.payment.cc_number.value = result;

			require_fields[0] = "cc_type";
			require_fields[1] = "cc_number-n";
			require_fields[2] = "cc_name";
			
			error_message[0] = "Please Select the Card Type.";
			error_message[1] = "Please Check the Card Number.";
			error_message[2] = "Please Enter card Holders Name";
			
				//check if it's "diners club"
				if (document.payment.cc_type.value == 2) {
				require_fields[3] = "cc_issue_month";
				require_fields[4] = "cc_issue_year";

				error_message[3] = "Please select an issue month";	
				error_message[4] = "Please select an issue year";					
				
				}
			
			}
		
		}
		else if (formname == "frm_survey") 
		{
			
			require_fields[0] = "estimated_num_reports-n";
			
			error_message[0] = "Please enter number of reports";

		
		}
		else if(formname == "reply_question")
		{
		require_fields[0] = "replymessage";
		
		error_message[0] = "Please Enter A Reply Message";
		}
		else if(formname == "register") 
		{
		require_fields[0] = "title";
		require_fields[1] = "first_name";
		require_fields[2] = "last_name";
		require_fields[3] = "email_address-e";
		require_fields[4] = "organisation";
		require_fields[5] = "phone_number";
		require_fields[6] = "password-g6";
		require_fields[7] = "confirm-g6";


		if (document.register.other.style.visibility == 'visible')
		{
			require_fields[8] = "other";
		}
				
		if (document.register.referrer.value == '-1')
		{
			alert("Please choose a referrer")
			document.register.referrer.focus()
			return false;
					
		}	
		
				
		error_message[0] = "Please enter your Title";
		error_message[1] = "Please enter your First Name";
		error_message[2] = "Please enter your Last Name";
		error_message[3] = "Please enter your Email Address";
		error_message[4] = "Please enter your Organisation";
		error_message[5] = "Please enter your Phone Number";
		error_message[6] = "Please enter your Password";
		error_message[7] = "Please confirm your Password";
	
		
		if (document.register.other.style.visibility == 'visible')
		{
			error_message[8] = "Please enter Other referrer";
		}		

		
		if(document.register.password.value != document.register.confirm.value)
			{
				alert("Please ensure password and confirmation password match\n");
				return false;
			}
		
		for (var i = 0; i < document.register.elements.length; i++) 
			{
				if(document.register.elements[i].name.substring(0,4) == "cate")
				{
					if(document.register.elements[i].checked==true)
					{
						var cat_selected = true;
					}
				}
			}
		
		if(cat_selected != true)
			{
				alert("Please Select at least one Research Sector\n");
				return false;
			}
		
		} 
		else if(formname == "basketnew") 
		{
		require_fields[0] = "title";
		require_fields[1] = "first_name";
		require_fields[2] = "last_name";
		require_fields[3] = "email_address-e";
		require_fields[4] = "organisation";
		require_fields[5] = "job_title";
		require_fields[6] = "phone_number";
		require_fields[7] = "street_address_1";
		require_fields[8] = "city";
		require_fields[9] = "post_zip_code";
		require_fields[10] = "country_id";
		require_fields[11] = "is_invoice_address";
		require_fields[12] = "i_title";
		require_fields[13] = "i_first_name";
		require_fields[14] = "i_last_name";
		require_fields[15] = "i_organisation";
		require_fields[16] = "i_street_address_1";
		require_fields[17] = "i_city";
		require_fields[18] = "i_post_zip_code";
		require_fields[19] = "i_country_id";
		
		if (document.basketnew.other.style.visibility == 'visible')
		{
			require_fields[20] = "other";
		}
		
		if (document.basketnew.referrer.value == '-1')
		{
			alert("Please choose a referrer")
			document.basketnew.referrer.focus()
			return false;
			
		}
		
		error_message[0] = "Please enter your Delivery Title";
		error_message[1] = "Please enter your Delivery First Name";
		error_message[2] = "Please enter your Delivery Last Name";
		error_message[3] = "Please enter your Delivery Email Address";
		error_message[4] = "Please enter your Delivery Organisation";
		error_message[5] = "Please enter your Job Title";
		error_message[6] = "Please enter your Phone Number";
		error_message[7] = "Please enter your Delivery Street Address";
		error_message[8] = "Please enter your Delivery City";
		error_message[9] = "Please confirm your Postal / Zip Code";
		error_message[10] = "Please enter your Country";
		error_message[11] = "Please Indicate if this is your Invoice Address";
		error_message[12] = "Please enter your Invoice Title";
		error_message[13] = "Please enter your Invoice First Name";
		error_message[14] = "Please enter your Invoice Last Name";
		error_message[15] = "Please confirm your Invoice Organisation";
		error_message[16] = "Please enter your Invoice Street Address";
		error_message[17] = "Please enter your Invoice City";
		error_message[18] = "Please enter your Invoice Postal / Zip Code";
		error_message[19] = "Please enter your Invoice Country";
		
		if (document.basketnew.other.style.visibility == 'visible')
		{
			error_message[20] = "Please enter Other referrer";
		}
		
		
		}
		else if(formname == "basketaddress") 
		{
		require_fields[0] = "title";
		require_fields[1] = "first_name";
		require_fields[2] = "last_name";
		require_fields[3] = "email_address-e";
		require_fields[4] = "organisation";
		require_fields[5] = "phone_number";
		require_fields[6] = "street_address_1";
		require_fields[7] = "city";
		require_fields[8] = "post_zip_code";
		require_fields[9] = "country_id";
		require_fields[10] = "is_invoice_address";
		require_fields[11] = "i_title";
		require_fields[12] = "i_first_name";
		require_fields[13] = "i_last_name";
		require_fields[14] = "i_organisation";
		require_fields[15] = "i_street_address_1";
		require_fields[16] = "i_city";
		require_fields[17] = "i_post_zip_code";
		require_fields[18] = "i_country_id";
		
		if (document.basketaddress.referrer)
		{
		
		
			if (document.basketaddress.referrer.value == 'Other')
			{
				require_fields[19] = "other";
			}
			
		
			if (document.basketaddress.referrer.value == '-1')
			{
				alert("Please choose a referrer")
				document.basketaddress.referrer.focus()
				document.basketaddress.other.style.visibility = 'hidden'
				return false;
			}
		
		}
			
		
		error_message[0] = "Please enter your Delivery Title";
		error_message[1] = "Please enter your Delivery First Name";
		error_message[2] = "Please enter your Delivery Last Name";
		error_message[3] = "Please enter your Delivery Email Address";
		error_message[4] = "Please enter your Delivery Organisation";
		error_message[5] = "Please enter your Phone Number";
		error_message[6] = "Please enter your Delivery Street Address";
		error_message[7] = "Please enter your Delivery City";
		error_message[8] = "Please confirm your Postal / Zip Code";
		error_message[9] = "Please enter your Country";
		error_message[10] = "Please Indicate if this is your Invoice Address";
		error_message[11] = "Please enter your Invoice Title";
		error_message[12] = "Please enter your Invoice First Name";
		error_message[13] = "Please enter your Invoice Last Name";
		error_message[14] = "Please confirm your Invoice Organisation";
		error_message[15] = "Please enter your Invoice Street Address";
		error_message[16] = "Please enter your Invoice City";
		error_message[17] = "Please enter your Invoice Postal / Zip Code";
		error_message[18] = "Please enter your Invoice Country";
		
		
		if (document.basketaddress.referrer && document.basketaddress.referrer.value == 'Other')
		{
			if (document.basketaddress.other.style.visibility = 'visible')
			{
				error_message[19] = "Please enter Other referrer";
			}
		}
		
		
		}
		else if(formname == "agreement") 
		{
		require_fields[0] = "title";
		require_fields[1] = "first_name";
		require_fields[2] = "last_name";
		require_fields[3] = "email_address-e";
		require_fields[4] = "organisation";
		require_fields[5] = "job_title";
		require_fields[6] = "phone_number";
		require_fields[7] = "street_address_1";
		require_fields[8] = "city";
		require_fields[9] = "post_zip_code";
		require_fields[10] = "country_id";
		require_fields[11] = "url";
		
		error_message[0] = "Please enter your Title";
		error_message[1] = "Please enter your First Name";
		error_message[2] = "Please enter your Last Name";
		error_message[3] = "Please enter your Email Address";
		error_message[4] = "Please enter your Organisation";
		error_message[5] = "Please enter your Job Title";
		error_message[6] = "Please enter your Phone Number";
		error_message[7] = "Please enter your Street Address";
		error_message[8] = "Please enter your City";
		error_message[9] = "Please confirm your Postal / Zip Code";
		error_message[10] = "Please enter your Country";
		error_message[11] = "Please enter your URL (Web Address)";
		
		if(document.agreement.agree.checked == false)
		{
			alert("In order to proceed you must\nagree to the terms and conditions\n");
			document.agreement.agree.focus();
			return false;
		}

		}//end if
		
		
		else if(formname == "affiliateagreement") 
		{
			require_fields[0] = "title";
			require_fields[1] = "first_name";
			require_fields[2] = "last_name";
			require_fields[3] = "email_address-e";
			require_fields[4] = "organisation";
			require_fields[5] = "job_title";
			require_fields[6] = "phone_number";
			require_fields[7] = "street_address_1";
			require_fields[8] = "city";
			require_fields[9] = "post_zip_code";
			require_fields[10] = "country_id";

			error_message[0] = "Please enter your Title";
			error_message[1] = "Please enter your First Name";
			error_message[2] = "Please enter your Last Name";
			error_message[3] = "Please enter your Email Address";
			error_message[4] = "Please enter your Organisation";
			error_message[5] = "Please enter your Job Title";
			error_message[6] = "Please enter your Phone Number";
			error_message[7] = "Please enter your Street Address";
			error_message[8] = "Please enter your City";
			error_message[9] = "Please confirm your Postal / Zip Code";
			error_message[10] = "Please enter your Country";

			if(document.affiliateagreement.agree.checked == false)
			{
				alert("In order to proceed you must\nagree to the terms and conditions\n");
				document.agreement.agree.focus();
				return false;
			}
				
		}//end if
		
		
		//Begin Transcript Form Validation
		else if(formname == "transcripts_search") 
		{
			if(document.transcripts_search.company.value == "" && document.transcripts_search.company_ticker.value == "") 
				{
					alert("Please enter either a\t\n\nCompany Name\nOR\nCompany Ticker\n");
					return false;
				}
				
				if(document.transcripts_search.company.value != "" && document.transcripts_search.company_ticker.value != "") 
				{
					alert("Please enter either a\t\n\nCompany Name\nOR\nCompany Ticker\n");
					return false;
				}
				
		}//end if
		else if(formname == "publisherInterest") 
		{
		require_fields[0] = "title";
		require_fields[1] = "first_name";
		require_fields[2] = "last_name";
		require_fields[3] = "email_address-e";
		require_fields[4] = "organisation";
		require_fields[5] = "job_title";
		require_fields[6] = "phone_number";
		require_fields[7] = "street_address_1";
		require_fields[8] = "city";
		require_fields[9] = "post_zip_code";
		require_fields[10] = "country_id";
		require_fields[11] = "url";
		require_fields[12] = "estimated_num_reports-n";
		require_fields[13] = "report_release_freq";
		
		
		error_message[0] = "Please enter your Title";
		error_message[1] = "Please enter your First Name";
		error_message[2] = "Please enter your Last Name";
		error_message[3] = "Please enter your Email Address";
		error_message[4] = "Please enter your Organisation";
		error_message[5] = "Please enter your Job Title";
		error_message[6] = "Please enter your Phone Number";
		error_message[7] = "Please enter your Street Address";
		error_message[8] = "Please enter your City";
		error_message[9] = "Please confirm your Postal / Zip Code";
		error_message[10] = "Please enter your Country";
		error_message[11] = "Please enter your URL (Web Address)";
		error_message[12] = "Please enter estimated number of reports";
		error_message[13] = "Please choose a report release frequency";
		
		var flagCat;
		flagCat = false;
		var rtn;
		var currentCatId;
		
		for (var x = 1; x <= document.publisherInterest.cateamount.value; x++)
		   {
			
			currentCatId = 'cate' + x;
			
		   	rtn = eval("document.publisherInterest."+currentCatId+".checked;");
		   	
		   	if(rtn)
		   	{
		   		//alert("true");
		   		flagCat = true;
		   	}

			   
                   }
                   
                   if(!flagCat)
                   {
                   	alert("Please choose at least one category");
                   	return false;
                   }


		}//end if
		
	
//NO NEED TO CHANGE BELOW THIS LINE

//go through required fields
for (var i = 0; i < require_fields.length; i++) {

	//get the fieldname
	if (require_fields[i].indexOf('-') != -1)
	{
	var fieldname = require_fields[i].substring(0,require_fields[i].indexOf('-'));
	}
	else 
	{
	var fieldname = require_fields[i];
	}


	//get the verification option
	if (require_fields[i].indexOf('-') != -1) 
	{
	var verify = require_fields[i].substring(require_fields[i].indexOf('-'),require_fields[i].length);
	} 
	else 
	{
	var verify = "";
	}
	

	//get additional amount
	var extra_amount = verify.substring(2);	
	
	//get user input
	var formvalue = eval("document."+formname+"."+fieldname+".value");
	
		//verification (all returns false)
		var verify_chk = true;
		var tech_message;

		//check that there's something there
		if (verify == "" && formvalue == "") {
		verify_chk = false;
		tech_message = "\n(this field is required)";
		
		//check for email
		} else if (verify.indexOf("-e") != -1) {
		verify_chk = str_chk_email(formvalue);
		tech_message = "\n(email address characters only)";

		//check for only letters
		} else if (verify.indexOf("-a") != -1) {
		verify_chk = str_chk_letters(formvalue);
		tech_message = "\n(letters only)";

		//check for only numbers
		} else if (verify.indexOf("-n") != -1) {
		verify_chk = str_chk_numbers(formvalue);
		tech_message = "\n(numbers only)";
		
		//check for both numbers and letters
		} else if (verify.indexOf("-h") != -1) {
		verify_chk = str_chk_alphanumeric(formvalue);
		tech_message = "\n(letters and numbers only)";
		
		//check for check box value
		} else if (verify.indexOf("-b") != -1) {
		verify_chk = str_chk_box(formvalue,form_name);
		tech_message = "\n(email address characters only)";

		//check that str is not the same
		} else if (verify.indexOf("-s") != -1) {
		verify_chk = str_not_equal(formvalue,extra_amount);
		tech_message = "\n(nothing entered)";

		//check for less than (and equal) size
		} else if (verify.indexOf("-l") != -1) {
		verify_chk = str_chk_less_size(formvalue,extra_amount);

			var length_to_remove = eval("document."+form_name+"."+fieldname+".value.length");
			length_to_remove = length_to_remove - extra_amount;
			tech_message = "\n(please remove "+length_to_remove+" characters.)";
		
		//check for greater than (and equal) size
		} else if (verify.indexOf("-g") != -1) {
		verify_chk = str_chk_great_size(formvalue,extra_amount);

			var total_length = eval("document."+form_name+"."+fieldname+".value.length");
			tech_message = "\n(must be "+extra_amount+" characters or more, so far " + total_length + " characters)";
		}
		


			//display error message and form focus
			if (verify_chk == false) {
			var display_message;
			display_message = error_message[i];

				if (use_tech_messages == "yes") {
				display_message += tech_message;
				}

			//display and focus on form element
			alert(display_message);
			eval("document."+form_name+"."+fieldname+".focus()");
			return false;

			//verification successful
			} else if (verify_chk == true) {

				//save cookie fields
				if (cookie_fields.length > 0) {

					for (var x = 0; x < cookie_fields.length; x++) {
						if (cookie_fields[x] == fieldname) {
						sff_new_cookie_val(cookie_fields[x],formvalue,cookie_path);
						}
					}

				}

			}
} //end for

//submit form
return true;

 
 	//debug
 	//alert("form_name "+form_name);
 	//alert("fieldname "+fieldname);
 	//alert("verify "+verify);
 	//alert("extra_amount "+extra_amount);
	//alert("formvalue "+formvalue);
}



/*
sub rountines
*/


//Add a new value onto the cookie
function sff_new_cookie_val(cookname,cookvalue,path) {
var cookie_save_string = cookname +"="+cookvalue; 
document.cookie = cookie_save_string + ";path="+path+"; expires=Sun, 26-Mar-2070 12:00:00 GMT;";
}


//check for email
function str_chk_email(str) {
	if (str == "" || str.indexOf('.') == -1 || str.indexOf('@') == -1 || str.length < 5 || str.indexOf(';') != -1 || str.indexOf(':') != -1 || str.indexOf('!') != -1 || str.indexOf('"') != -1 || str.indexOf('£') != -1 || str.indexOf('$') != -1 || str.indexOf('%') != -1 || str.indexOf('^') != -1 || str.indexOf('&') != -1 || str.indexOf('*') != -1 || str.indexOf('?') != -1 || str.indexOf('#') != -1 || str.indexOf('}') != -1 ||str.indexOf('{') != -1 || str.indexOf('~') != -1 || str.indexOf('`') != -1 || str.indexOf(' ') != -1 || str.indexOf('&') != -1  || str.indexOf('/') != -1  || str.indexOf("'") != -1 ) {
	return false;
	}
return true;
}


//check for only letters
function str_chk_letters(str) {
	if (isNaN(str) == false) {
	return false;
	}
return true;
}

//check for only numbers
function str_chk_numbers(str) {
	//if (str == "" || str.indexOf('a') != -1 || str.indexOf('b') != -1 || str.indexOf('c') != -1 || str.indexOf('d') != -1 || str.indexOf('e') != -1 || str.indexOf('f') != -1 || str.indexOf('g') != -1 || str.indexOf('h') != -1 || str.indexOf('i') != -1 || str.indexOf('j') != -1 || str.indexOf('k') != -1 || str.indexOf('m') != -1 || str.indexOf('n') != -1 || str.indexOf('o') != -1 || str.indexOf('p') != -1 || str.indexOf('q') != -1 || str.indexOf('r') != -1 || str.indexOf('t') != -1 || str.indexOf('u') != -1 || str.indexOf('v') != -1 || str.indexOf('w') != -1 || str.indexOf('x') != -1 || str.indexOf('y') != -1 || str.indexOf('z') != -1 || str.indexOf('A') != -1 || str.indexOf('B') != -1 || str.indexOf('C') != -1 || str.indexOf('D') != -1 || str.indexOf('E') != -1 || str.indexOf('F') != -1 || str.indexOf('G') != -1 || str.indexOf('H') != -1 || str.indexOf('I') != -1 || str.indexOf('J') != -1 || str.indexOf('K') != -1 || str.indexOf('L') != -1 || str.indexOf('M') != -1 || str.indexOf('N') != -1 || str.indexOf('O') != -1 || str.indexOf('P') != -1 || str.indexOf('Q') != -1 || str.indexOf('R') != -1 || str.indexOf('S') != -1 || str.indexOf('T') != -1 || str.indexOf('U') != -1 || str.indexOf('V') != -1 || str.indexOf('W') != -1 || str.indexOf('X') != -1 || str.indexOf('Y') != -1 || str.indexOf('Z') != -1) {
	if(isNaN(str)){
		return false;
	}
return true;
}

//check for both numbers and letters
function str_chk_alphanumeric(str) {
	if (str == "" || str.indexOf('!') != -1 || str.indexOf('"') != -1 || str.indexOf('£') != -1 || str.indexOf('$') != -1 || str.indexOf('%') != -1 || str.indexOf('^') != -1 || str.indexOf('&') != -1 || str.indexOf('*') != -1 || str.indexOf('(') != -1 || str.indexOf(')') != -1 || str.indexOf('-') != -1 || str.indexOf('_') != -1 || str.indexOf('=') != -1 || str.indexOf('+') != -1 || str.indexOf('?') != -1 || str.indexOf('/') != -1 || str.indexOf('>') != -1 || str.indexOf('<') != -1 || str.indexOf('.') != -1 || str.indexOf(',') != -1 || str.indexOf('|') != -1 || str.indexOf('\\') != -1 || str.indexOf('`') != -1 || str.indexOf('¬') != -1 || str.indexOf('#') != -1 || str.indexOf('@') != -1 || str.indexOf('\'') != -1 || str.indexOf(';') != -1 || str.indexOf(':') != -1 || str.indexOf(']') != -1 || str.indexOf('[') != -1 || str.indexOf('{') != -1 || str.indexOf('}') != -1) {
	return false;
	}
return true;
}

/* different agruments */

//check for less than (and equal) size
function str_chk_less_size(str,chr_size) {
	if (str == "" || str.length > chr_size) {
	return false;
	}
return true;
}

//check for greater than (and equal) size
function str_chk_great_size(str,chr_size) {
	if (str == "" || str.length < chr_size) {
	return false;
	}
return true;
}


//check for check box value
function str_chk_box(checkbox,form_name) {
	//redefine form value for a checkbox
	var str = eval("document."+form_name+"."+checkbox+".checked");
	if (str == false) {
	return false;
	}
return true;
}

//check that str is not the same
function str_not_equal(str,equal) {
	if (str == equal) {
	return false;
	}
return true;
}


//SPECIAL FUNCTION FOR BASKET_NEW AS IT USES PASSWORD
function verify_form_password(formname)
{

var maj = verify_form(formname);
if (maj==true)
{

	if(eval("document."+formname+".password.value.length") < 6)
		{
			alert("Please enter a password of atleast 6 characters\n");
			eval("document."+formname+".password.focus()");
			return false;
		}

	if(eval("document."+formname+".password.value") != eval("document."+formname+".confirm.value"))
		{
			alert("Please ensure password and confirmation password match\n");
			eval("document."+formname+".confirm.focus()");
			return false;
		}

}

return maj;

}
