var uniqueEmailMessage = "";
var emptyFriendMessage = "";
var emailAddresses = new Array();
var emails;

function isEmpty(stringToCheck) {
	var isEmpty = /^\s*$/;
	return (isEmpty.test( stringToCheck ) );
}

function isAtMissing(stringToCheck) {
	var isAtMissing = /\@/;
	return (!isAtMissing.test( stringToCheck) );
}
function checkMailingListSignUp(obj) {
	var message = "";
	formError = 0;


	// First we check to ensure that our members
	// have inputted membernames and memberemails
	// correctly.

	message += checkMemberName(obj.name.value);
	message += checkMemberEmail(obj.email_address.value);
	if( formError == 1 ) {
		alert( message );
		return false;
	}
	return true; 
}

function checkRegistration(obj) {
	var message = "";
	formError = 0;

	// First we check that a member has entered email information
	// as this is the only field that is really required. Along  
	// with name information.

	message += checkMemberName( obj.FName.value );
	if( formError == 1 ) {
		alert( "First Name is a required field please enter your firstname");
		return false; 
	}
	message += checkMemberName( obj.LName.value );
	if( formError == 1 ) {
		alert( "Last Name is a requrired Field please enter your lastname");
		return false;
	}
	message += checkMemberEmail(obj.Email.value );
	if( formError == 1 ) {
		alert(message);
		return false;
	}
	
	return checkMemberImages(obj);
}	
	
function checkGuestListSignUp(obj) {
	var message = "";
	formError = 0;


	// First we check to ensure that our members
	// have inputted membernames and memberemails
	// correctly.

	message += checkMemberName(obj.memberName.value);
	message += checkMemberEmail(obj.memberEmail.value);
	
	if( formError == 1 ) {
		alert( message );
		return false;
	}

	// Now we check to ensure that the dates
	// that have been entered have been entered correctly

	if( !checkDateEntries( obj ) ) {
		message = "You must enter a valid date or \n"; 
		message += "You must select a day of week";
		alert( message );
		return false;
	}

	// Now check and ensure that at least %50 of the guests
	// added to the list are sigdup

	if( !checkFifty( obj ) ) {
		message = "You must enter the emails or mobiles\n";
		message += "of half your guests";
		alert( message );
		return false;
	}	


	// Check that each email entered has a name associated
	// with it. 

	if( !checkEmailsHaveNames(obj) ) {
		alert( emptyFriendMessage );
		return false;
	}
	
	// Check if unique email addresses have been entered for the 
	// guests of the user.
	
	if( !checkUniqueEmails() ) {
		alert( uniqueEmailMessage );
		return false;
	}

	// Enable the month date and year fields before submission.
	obj.day.disabled = false;
	obj.month.disabled = false;
	obj.year.disabled = false;
	return true;

	
}

function checkMemberImages(obj) {
	var message = "";
	if( isEmpty(obj.file1.value) && isEmpty(obj.file2.value) && isEmpty(obj.file3.value) ) {
		message = "At least one image file needs to be uploaded";
		alert( message);
		return false;
	}
	return true;
}
/**
*
*	Name:		checkEmailsHaveNames 
*
*	Description:	Checks that all emails entered have names
*			that go with the email addresses entered.
*
**/

function checkEmailsHaveNames(obj) {
	var friendsName; 
	var friendsEmail;
	var friendsEmailText;
	var friendsText;
	var allTextFieldsNotNull = true;
	emptyFriendMessage = "Please fill out Names for all the email addresses entered. The follwing";
	emptyFriendMessage += " email addresses do not have corresponding friends names. \n";

	for(var i = 1; i <= 10; i++ ) {
		friendText = ""; 
		friendsEmailText = "";
		friendsName = eval( "obj.friendName"+i);
		friendsEmail = eval( "obj.friendEmail"+i);
		friendText = friendsName.value;
		friendsEmailText = friendsEmail.value;

		if( isEmpty(friendText) && !isEmpty( friendsEmailText ) ) {
			emptyFriendMessage += " Entry " + i + " " + friendsEmailText + "\n";
			allTextFieldsNotNull = false;
		}
	}
	return allTextFieldsNotNull;
}


/**
*
*	Name: checkUniqueEmails
*
*	Description: 	Checks that the emailAddresses being entered into the
*			system are unique. And that a user has just not copied
*			and pasted a series of emails into the fields.
**/
function checkUniqueEmails() {
	var isUnique = true;
	uniqueEmailMessage = "The email addresses of your guests need to be unique\n The following email addresses";
	uniqueEmailMessage +=" has been entered more than once\n";
	for ( var i in emailAddresses ) {
		if ( emailAddresses[i] > 1 ) {
			isUnique = false;
			uniqueEmailMessage += i +" has been entered " + emailAddresses[i] + " times\n";  
		}
	}
	return isUnique; 
}
function checkFifty( obj ) {
	var friendsName;
	var friendsEmail; 
	var friendText = "";
	var friensdEmailText = "";
	var totalAmount, emailsEntered;
	var totalAmount = 0;
	var emailsEntered = 0;
	emailAddresses = new Array();
	
	
	
	for ( var i = 1; i <= 10; i++ ) {
		friendText = "";
		friendsEmailText = "";
		friendsName = eval( "obj.friendName"+i );
		friendsEmail = eval( "obj.friendEmail"+i)
		friendText = friendsName.value;
		friendsEmailText = friendsEmail.value;
			
		
		
		if(! isEmpty(friendText) ) {
			totalAmount++;
			if(! isEmpty( friendsEmailText ) ) {
				
				if( emailAddresses[friendsEmailText] ) {
					emailAddresses[friendsEmailText]++;
				} else {
					emailAddresses[friendsEmailText] = 1;
				}
				
				emailsEntered++;
			}
		}
	}
	
	var fiftyPercent = Math.floor ( totalAmount / 2 );
	
	// If only one  guest has been entered then fifty percent
	// of emails would still be 0...therefore emailsEntered will
	// need to be checked if they are 0 then we need to return false;
	if( totalAmount == 1 && emailsEntered == 0 ) {
		return false;
	}
	if ( emailsEntered >= fiftyPercent ) {
		return true;
	} else {
		return false;
	}
}


	
function checkMemberEmail(memberemail) {	
	var message = "";
	var bandMessage =checkBannedEmails( memberemail)
	if( isEmpty( memberemail ) ) {
		formError = 1;
		message = "emailAddress is a required field";
	} else if( isAtMissing( memberemail) ) {
		formError = 1;
		message = "\This is not a valid email address";
	} else if( bandMessage != "Safe Addresses"  ) {
		message = bandMessage;	
		formError = 1;
	}
	return message;
}
function getBannedEmailData() {
	var urlString = "userAction=get";
	new Ajax.Request("/cgi-bin/getBannedEmails.pl", {
		onSuccess: function(resp) {
			emails = resp.responseText.evalJSON();
		},
		onFailure: function(resp) {
			alert("Oops, backend error");
		},
		parameters: urlString
	});
}

function checkBannedEmails( memberemail,message ) {
	var message;
	for( var i =0; i < emails.length; i++ ) {
		var pattern = emails[i]; 
		var isAtMissing = eval("/"+pattern+"/");

		if(isAtMissing.test( memberemail) )  {
			message = "Unfortunately we are not accepting " + pattern +" email addresses. Please use an alternative.";
			return message;
		} 
	}
	message = "Safe Addresses";
	return message;
}

function checkMemberName(membername) {
	var message = "";
	if( isEmpty( membername ) ) {
		formError = 1;
		message = "membername is a required\n";
	} 
	return( message );
}	

function checkDateEntries(obj) {
	var goodDate = false;

	var dayOfWeek =  obj.dayOfWeek.value;
	var year = obj.year.value;
	var day = obj.day.value;
	var month = obj.month.value;

	var dayRe = /Day/;
	var yearRe = /Year/;
	var monthRe = /Month/;
	var dayOfWeekRe = /-Day-/;

	var daySelected = isEmpty(day) ? false : true;	
	var yearSelected = isEmpty(year) ? false : true; 
	var monthSelected = isEmpty(month) ? false : true;

	var dayOfWeekSelected = dayOfWeekRe.test(dayOfWeek) ? false : true;

	// check if we  have a goodDate. If this is the case
	// then we can return. If the date is bad then 
	// check that we have a good dayOfWeek if this is not good
	// them we but a message out explaining to the user
	// that they have to enter a full date or they need 
	// to input a day of the week.

	if( daySelected && yearSelected && monthSelected ) {	
		return ( true );
	} else if( dayOfWeekSelected )  { 
		return ( true );	
	} else {
		return ( false );
	}
}

function setFieldsToLastInput() {
	setSelect('day', day);
	setSelect('month',month);
	setSelect('year', year);
	setSelect('HowOften',howOften);
	setSelect('FoundSite',foundSite);
	setSelect('EmailType',emailType);
	setSelect('Sex',sex);
	
	setCheckBoxes();
}
function setCheckBoxes() {
	if( isEmpty(texting) ) {
		document.forms[2].Texting.checked = false;
	}
	if( isEmpty(emailOpt) ) {
		document.forms[2].EmailOpt.checked = false;
	}
	if( isEmpty(shareInfo) ) {
		document.forms[2].ShareInfo.checked = false;
	}
	if( isEmpty(terms) ) {
		document.forms[2].Terms.checked = false;
	}
	if( isEmpty(sugar) ) {
		document.forms[2].Sugar.checked = false;
	}
}
function setSelect(field, fieldValue) {
	var formElement = eval( "document.forms[2]." + field );
	for( var i = 0; i < formElement.options.length; i++ ) {
		if( formElement.options[i].value == fieldValue ) {
			formElement.selectedIndex = i ;
		}
	}
}


