/******************************************/
/* Coded with: Macromedia Dreamweaver 8   */
/* File Name: TellAFriendFunctions.js     */
/* Created By: PricelessSurveys.com       */
/* Created: June 7, 2006                  */
/* Last Modified: June 11, 2006           */
/* Comment: this is only for free-surveys */
/*          section                       */
/******************************************/


// main function: doSubmit()
function doSubmit()
{
	if(isNameOK() && isEmailOK() && isFriendOK() && isMessageOK())
	{
		document.tellForm.tellfriend.value = 1;
		document.tellForm.submit();
		return true;
	}
	else
	{
		return false;
	}
}

// check for correct chars in sender name field
function isNameOK()
{
	// declare local vars
	var form = document.tellForm;
	var field = eval("document.tellForm.senderName");
	// check if there is any invalid symbol in name field
	if (isGenericNameOK("senderName"))
	{
		return true;
	}
	else
	{
		alert('Please enter your real name.');
		field.focus();
		return false;
	}
}

// check for correct chars in sender email field
function isEmailOK()
{
	// declare local vars
	var form = document.tellForm;
	var field = eval("document.tellForm.senderEmail");
	// check if there is any invalid symbol in name field
	if (isGenericEmailOK("senderEmail"))
	{
		return true;
	}
	else
	{
		alert('Please enter a valid email address.');
		field.focus();
		return false;
	}
}

// check for correct chars in friend's name and email fields
function isFriendOK()
{
	// declare local vars
	var form = document.tellForm;
	var fName1 = eval("document.tellForm.friendName1");
	var fName2 = eval("document.tellForm.friendName2");
	var fName3 = eval("document.tellForm.friendName3");
	var fEmail1 = eval("document.tellForm.friendEmail1");
	var fEmail2 = eval("document.tellForm.friendEmail2");
	var fEmail3 = eval("document.tellForm.friendEmail3");
	var is_fName2_only_spaces = fName2.value.replace(/[ ]/g, "");
	var is_fName3_only_spaces = fName3.value.replace(/[ ]/g, "");
	var is_fEmail2_only_spaces = fEmail2.value.replace(/[ ]/g, "");
	var is_fEmail3_only_spaces = fEmail3.value.replace(/[ ]/g, "");
	// check 1st friend's name field
	if (!isGenericNameOK("friendName1"))
	{
		// first friend's name field failed
		alert('Please enter your friend\'s name.');
		fName1.focus();
		return false;
	}
	else if (!isGenericEmailOK("friendEmail1"))
	{ // next check 1st friend's email field
		alert('Please enter your friend\'s valid email address.');
		fEmail1.focus();
		return false;
	}
	else
	{
		// check rest of fields
		// check 2nd name and email fields
		if ((is_fName2_only_spaces.length != 0) || (is_fEmail2_only_spaces.length != 0))
		{ // see if user entered anything in 2nd friend's name field
			if (!isGenericNameOK("friendName2"))
			{
				// 2nd friend's name field failed
				alert('Please enter your friend\'s name.');
				fName2.focus();
				return false;
			}
			else if (!isGenericEmailOK("friendEmail2"))
			{ // next check 2nd friend's email field
				alert('Please enter your friend\'s valid email address.');
				fEmail2.focus();
				return false;
			}
		}
		else
		{
			fName2.value = "";
			fEmail2.value = "";
		}
		// check 3rd name and email fields
		if ((is_fName3_only_spaces.length != 0) || (is_fEmail3_only_spaces.length != 0))
		{ // see if user entered anything in 3rd friend's name field
			if (!isGenericNameOK("friendName3"))
			{
				// 2rd friend's name field failed
				alert('Please enter your friend\'s name.');
				fName3.focus();
				return false;
			}
			else if (!isGenericEmailOK("friendEmail3"))
			{ // next check 3rd friend's email field
				alert('Please enter your friend\'s valid email address.');
				fEmail3.focus();
				return false;
			}
		}
		else
		{
			fName3.value = "";
			fEmail3.value = "";
		}
	}
	
	// everything is fine now
	return true;
}

// check for correct chars in message field
function isMessageOK()
{
	// declare local vars
	var form = document.tellForm;
	var field = form.elements['message'];
	var is_name_only_spaces = field.value.replace(/[ ]/g, "");
	var text = field.value;
	
	// see if only spaces or nothing provided (at least 4 chars)
	if ((is_name_only_spaces.length <= 3) || (text.length <= 3))
	{
		alert('Please include a message you would like to send to your friends.');
//		document.tellForm.message.value="";
		document.tellForm.message.focus();
		return false;
	}

	return true;
}

// check for correct chars in generic name field
function isGenericNameOK(field_name)
{
	// declare local vars
	var form = document.tellForm;
	var field = eval("document.tellForm."+field_name);
	var name_to_check = field.value;
	var valid_symbol = /^([A-Za-z]{1})+([A-Za-z'. ]{0,71})+$/;
	// check if there is any invalid symbol in name field
	if (!valid_symbol.test(name_to_check))
	{
		return false;
	}
	else
	{
		return true;
	}
}

// checks if generic email is valid (only the form)
/* Got this script from: http://javascript.internet.com/forms/check-email.html */
function isGenericEmailOK(field_name)
{
	// declare local vars
	var form = document.tellForm;
	var field = eval("document.tellForm."+field_name);
	var emailStr = field.value;
	/* The following pattern is used to check if the entered e-mail address fits the user@domain format.  It also is used to separate the username from the domain. */
	var emailPat=/^(.+)@(.+)$/;
	/* The following string represents the pattern for matching all special characters.  We don't want to allow special characters in the address. These characters include ( ) < > @ , ; : \ " . [ ] */
	var specialChars="\\(\\)<>@,;:\\\\\\\"\\.\\[\\]";
	/* The following string represents the range of characters allowed in a username or domainname.  It really states which chars aren't allowed. */
	var validChars="\[^\\s" + specialChars + "\]";
	/* The following pattern applies if the "user" is a quoted string (in which case, there are no rules about which characters are allowed and which aren't; anything goes).  E.g. "jiminy cricket"@disney.com is a legal e-mail address. */
	var quotedUser="(\"[^\"]*\")";
	/* The following pattern applies for domains that are IP addresses, rather than symbolic names.  E.g. joe@[123.124.233.4] is a legal e-mail address. NOTE: The square brackets are required. */
	var ipDomainPat=/^\[(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\]$/
/* The following string represents an atom (basically a series of non-special characters.) */
	var atom=validChars + '+';
	/* The following string represents one word in the typical username. For example, in john.doe@somewhere.com, john and doe are words. Basically, a word is either an atom or quoted string. */
	var word="(" + atom + "|" + quotedUser + ")";
	// The following pattern describes the structure of the user
	var userPat=new RegExp("^" + word + "(\\." + word + ")*$");
	/* The following pattern describes the structure of a normal symbolic domain, as opposed to ipDomainPat, shown above. */
	var domainPat=new RegExp("^" + atom + "(\\." + atom +")*$");

	/* Finally, let's start trying to figure out if the supplied address is valid. */

	/* Begin with the coarse pattern to simply break up user@domain into different pieces that are easy to analyze. */
	var matchArray=emailStr.match(emailPat);
	if (matchArray==null)
	{
		/* Too many/few @'s or something; basically, this address doesn't even fit the general mould of a valid e-mail address. */
//		alert('Please enter a valid email address.');
//		field.focus();
		return false;
	}
	
	var user=matchArray[1];
	var domain=matchArray[2];

	// See if "user" is valid 
	if (user.match(userPat)==null)
	{
		// user is not valid
//		alert('Please enter a valid email address.');
//		field.focus();
		return false;
	}

	/* if the e-mail address is at an IP address (as opposed to a symbolic host name) make sure the IP address is valid. */
	var IPArray=domain.match(ipDomainPat);
	if (IPArray!=null)
	{
		// this is an IP address
		for (var i=1;i<=4;i++)
		{
			if (IPArray[i]>255)
			{
				// the IP address is invalid
//				alert('Please enter a valid email address.');
//				field.focus();
				return false;
			}
		}
		// IP address seems to be valid
		return true;
	}

	// Domain is symbolic name
	var domainArray=domain.match(domainPat);
	if (domainArray==null)
	{
//		alert('Please enter a valid email address.');
//		field.focus();
		return false;
	}

	/* domain name seems valid, but now make sure that it ends in a three-letter word (like com, edu, gov) or a two-letter word, representing country (uk, nl), and that there's a hostname preceding the domain or country. */
	/* Now we need to break up the domain to get a count of how many atoms it consists of. */
	var atomPat=new RegExp(atom,"g");
	var domArr=domain.match(atomPat);
	var len=domArr.length;
	if (domArr[domArr.length-1].length<2 || domArr[domArr.length-1].length>3)
	{
		// the address must end in a two letter or three letter word.
//		alert('Please enter a valid email address.');
//		field.focus();
		return false;
	}

	// Make sure there's a host name preceding the domain.
	if (len<2)
	{
//		alert('Please enter a valid email address.');
//		field.focus();
		return false;
	}

	// If we've gotten this far, everything's valid!
	return true;
}
