//////////////////////////////////////////////////////////////////////
// This file contains JavaScript functions to support sweepstakes 
// processing.
//////////////////////////////////////////////////////////////////////

// holds error text
var errorText;
var submittedForm = false;

//////////////////////////////////////////////////////////////////
// Determines if the input string represents a syntactically correct
// email address.
//////////////////////////////////////////////////////////////////
function isValidEmail(addr) {
   if ((addr.indexOf("@") == -1) || (addr.indexOf(".") == -1)) {
      return false;
   } else {
      return true;
   }
}

//////////////////////////////////////////////////////////////////
// Determines if the input string contains only whitespace.
//////////////////////////////////////////////////////////////////
function isBlank(s) {
   if (s == "") return true
   for (var i = 0; i < s.length; i++) {
      var c = s.charAt(i);
      if ((c != " ") && (c != '\n') && (c != '\t')) return false;
   }
   return true; 
}


function validateZip(field) {
	var valid = "0123456789-";
	var hyphencount = 0;
	var value = field.value;
	if (value.length!=5 && value.length!=10) {
		errorText += "The zip code is invalid. Please re-enter it.\n";
		return false;
	}
	for (var i=0; i < value.length; i++) {
		temp = "" + value.substring(i, i+1);
		if (temp == "-") hyphencount++;
		if (valid.indexOf(temp) == "-1") {
			errorText += "There are invalid characters in your zip code.";
			return false;
		}
	if ((hyphencount > 1) || ((value.length==10) && (value.charAt(5)!="-"))) {
		errorText += "The hyphen character should be used with a properly formatted 5 digit+four zip code, like '12345-6789'.\n";
		return false;
	   }
	}
	return true;
}

function countFormContacts(inForm)
{
	var emailAddresses = document.Form1.emailAddresses;
	var firstNames = document.Form1.firstNames;
	var numEmailContacts = 0;
	for (var i = 0; i < emailAddresses.length; i++){
		var emailAddress = emailAddresses[i].value;
		var firstName = firstNames[i].value;
		if (firstName.length > 0) {
			if (isValidEmail(emailAddress)) {
				numEmailContacts++;
			}
		}
	}
	return numEmailContacts;
}

function validateEmailContactData(inForm)
{
	var emailAddresses = document.Form1.emailAddresses;
	var firstNames = document.Form1.firstNames;
	
	for (var i = 0; i < emailAddresses.length; i++){
		var emailAddress = emailAddresses[i].value;
		var firstName = firstNames[i].value;
		var contactNum = i + 1;
		if (firstName.length > 0) {
			if (!isValidEmail(emailAddress)) {
				errorText += "For Contact #" + contactNum + ", '" + emailAddress + "' is not a valid email address\n";
			}
		}
	}
}

function validateProfileFormData(inForm)
{
	var blankFields = new Array();
	if (isBlank(inForm.emailAddress.value)) { blankFields.push('Email Address'); }
	if (isBlank(inForm.firstName.value)) { blankFields.push('First Name'); }
	if (isBlank(inForm.lastName.value)) { blankFields.push('Last Name'); }
	if (isBlank(inForm.phoneNumber.value)) { blankFields.push('Phone Number'); }
	if (isBlank(inForm.zip.value)) { blankFields.push('Zip Code'); }
	
	if (inForm.policy) {
		if (inForm.policy.checked == false) {
			errorText += 'Please indicate you accept the terms and privacy statement by checking the box.\n';
		}
	}
	
	if (blankFields.length > 1) {
		var blankFieldString = "";
		for (var i = 0; i < blankFields.length; i++){
		  blankFieldString += "\t" + blankFields[i] + "\n";
		}
		errorText += 'Please enter a value for the following required fields:\n' + blankFieldString + '\n';
	}
	
	if (blankFields.length == 1) {
		errorText += 'Please enter a value for the \'' + blankFields + '\'.\n'
	}
	
	if (document.Form1.zip.value.length > 0) {
		validateZip(document.Form1.zip);
	}

}

function validateContestEligibility(inForm) 
{
	var thldReferrals;
	var emailAddresses = document.Form1.emailAddresses;
	var numInvites = inForm.numInvites.value * 1;
	var numEmailContacts = countFormContacts(inForm);
	var totalContacts = (numInvites + numEmailContacts);
	// validate 'recruit' type of form
	if (inForm.type.value == 'recruit') {
		thldReferrals = inForm.thldReferrals.value * 1;
		var diff = thldReferrals - totalContacts;
		if (diff > 0) {
			errorText += 'To qualify for the contest you must invite ' 
			+ thldReferrals + ' friends. Please enter an additional ';
			if (diff == 1) {
				errorText += 'friend';
				} else {
				errorText += (thldReferrals - (numInvites + numEmailContacts)) 	+ ' friends.';
				}
			return false;
		}
	}
	// validate 'email' type of form
	if (inForm.type.value == 'email') {
		thldReferrals = 2;
		var diff = thldReferrals - totalContacts;
		if (diff > 0) {
			errorText += 'To qualify for the contest you must email ' 
			+ thldReferrals + ' friends. ';
			if (diff == thldReferrals) { errorText += "\nPlease enter the first name and email address of " + thldReferrals + " friends.";} else
				{ if (diff == 1) { errorText += "Please enter an additional friend."; } else {
					if (diff > 1) { errorText += "Please enter an additional " + diff + " friends";  }}}
			return false;
		}
	}
	return true;
}

function validateEditionSelection(inForm)
{
	if (inForm.editionNames) {
		if (inForm.editionNames.length > 0) {
			for (var i = 0; i < inForm.editionNames.length; i++){
				editionNameChecked = inForm.editionNames[i].checked;
				if (editionNameChecked) {
					return true;
				}
			}
			errorText += 'Please select at least one of the edition checkboxes.\n';
			return false;
		}
	}
	return true;
}

function displayEmailPreview(template)
{
	var title = 'Sweepstakes Email Preview';
	var options = 'height=875,width=820,status=0,toolbar=0,menubar=0,directories=0,location=0,scrollbars=1';
	window.open (template, title,options); 
	return false;
}

//////////////////////////////////////////////////////////////////
// Validate
//////////////////////////////////////////////////////////////////
function validateForm(inForm,numInvites)
{ 
	var valid = true;
	errorText = '';
		
	validateEmailContactData(inForm);	
	validateProfileFormData(inForm);
	validateContestEligibility(inForm);
	validateEditionSelection(inForm);

	if (errorText != '')
	{
		valid = false;
	}

	return valid;
}


function clearFormEmailAddresses(inForm) {
	var len = inForm.emailAddresses.length;
	for (var i = 0; i < len; i++) {
		//inForm.emailAddresses[i].value = "";
		//inForm.firstNames[i].value = "";
	}
}


//////////////////////////////////////////////////////////////////
// submitForm
//////////////////////////////////////////////////////////////////
function submitForm(inForm)
{ 
	if ( ! submittedForm ) {
		submittedForm = true;
		
		// if the form is NOT invalid
		if ( !validateForm(inForm) )
		{
			// slap them around...
			alert(errorText+ '\n');
			submittedForm = false;
			return;
		}
		
		inForm.submit();

		clearFormEmailAddresses(inForm);
	}
}



var entryReferralFieldIndex = null;
var entryReferralField = null;
var arrReferralEmailAddresses = new Array();

function setEntryReferralEmailAddresses (x) {
 arrReferralEmailAddresses = x;
}

if (!Array.prototype.contains){
    Array.prototype.contains = function(obj){
    var len = this.length;
    for (var i = 0; i < len; i++){
      if(this[i]==obj){return true;}
    }
    return false;
  };
}

function arrContains (arr,obj) {
    var len = arr.length;
    for (var i = 0; i < len; i++){
      if(arr[i]==obj){ alert('found: ' + obj); return true;}
    }
    return false;
  }


function submitSweepstakesEmailAddress(field, index)
{
	var emailAddress = field.value;
	var entryReferralFieldIndex = index;
	var entryReferralField = field;
	var firstNames = document.Form1.firstNames;
	var firstName = firstNames[index].value;
	if ((!isValidEmail(emailAddress)) && firstName && (firstName.length > 0)) {
		alert('Error: \'' + emailAddress + '\' is not a valid email address! Please enter a valid email address.');
		field.value="";
	} else {
		if (arrReferralEmailAddresses.contains(emailAddress)) {
			alert('That email address has already been entered. Please try another one.');
			field.value="";
		} else {
			ajaxVisitorLookupByEmail(emailAddress);
		}
	}

}

//////////////////////////////////////////////////////////////////
// submitSweepstakesEmailViaAjax
//////////////////////////////////////////////////////////////////
function ajaxVisitorLookupByEmail(emailAddress)
{ 

//	var url = "/ajax/visitor_lookup_by_email.htm";
	var url = document.getElementById('visitor_lookup_url').value;

	var jsonRequest = new Request.JSON(
						{
							url: 		url, 
							onComplete: ajaxParseVisitorLookupByEmail
						}).post(
							{
								'emailAddress'   		: emailAddress
							})

	return jsonRequest;
}

//////////////////////////////////////////////////////////////////
// Parse the JSON result into an object
//////////////////////////////////////////////////////////////////
function ajaxParseVisitorLookupByEmail(responseText)
{ 
//	var commandBean = responseText.evalJSON(true);
 if ((responseText != null) && (responseText.id != null) && (responseText.unsubscribeDate == null)) {
  alert('This email address has already been registered with TastingTable. Please enter another one.');
  entryReferralField.value="";
 }
			
}


