<!-- Vignette V/5 Thu Dec 20 10:04:22 2007 -->
//===================================================================
//
//	COOKIE FUNCTIONS
//
//===================================================================


// The constructor function: creates a cookie object for the specified
// document, with a specified name and optional attributes.
// Arguments:
//   document: The Document object that the cookie is stored for. Required.
//   name:     A string that specifies a name for the cookie. Required.
//   hours:    An optional number that specifies the number of hours from now
//             that the cookie should expire.
//   path:     An optional string that specifies the cookie path attribute.
//   domain:   An optional string that specifies the cookie domain attribute.
//   secure:   An optional Boolean value that, if true, requests a secure cookie.
//
function Cookie(document, name, hours, path, domain, secure)
{
    // All the predefined properties of this object begin with '$'
    // to distinguish them from other properties which are the values to
    // be stored in the cookie.
    this.$document = document;
    this.$name = name;
    if (hours)
        this.$expiration = new Date((new Date()).getTime() + hours*3600000);
    else this.$expiration = null;
    if (path) this.$path = path; else this.$path = null;
    if (domain) this.$domain = domain; else this.$domain = null;
    if (secure) this.$secure = true; else this.$secure = false;
    //alert("finished constructor "+name);
}

// This function is the store() method of the Cookie object.
function _Cookie_store()
{
    // First, loop through the properties of the Cookie object and
    // put together the value of the cookie. Since cookies use the
    // equals sign and semicolons as separators, we'll use colons
    // and ampersands for the individual state variables we store 
    // within a single cookie value. Note that we escape the value
    // of each state variable, in case it contains punctuation or other
    // illegal characters.
    var cookieval = "";
    for(var prop in this) {
        // Ignore properties with names that begin with '$' and also methods.
        if ((prop.charAt(0) == '$') || ((typeof this[prop]) == 'function')) 
            continue;
        if (cookieval != "") cookieval += '&';
        cookieval += prop + ':' + escape(this[prop]);
    }

    // Now that we have the value of the cookie, put together the 
    // complete cookie string, which includes the name and the various
    // attributes specified when the Cookie object was created.
    var cookie = this.$name + '=' + cookieval;
    if (this.$expiration)
        cookie += '; expires=' + this.$expiration.toGMTString();
    if (this.$path) cookie += '; path=' + this.$path;
    if (this.$domain) cookie += '; domain=' + this.$domain;
    if (this.$secure) cookie += '; secure';
    //alert("Cookie: "+cookie);

    // Now store the cookie by setting the magic Document.cookie property.
    this.$document.cookie = cookie;
}
// This function is the load() method of the Cookie object.
function _Cookie_load()
{
    // First, get a list of all cookies that pertain to this document.
    // We do this by reading the magic Document.cookie property.
    var allcookies = this.$document.cookie;
    if (allcookies == "") return false;
    // Now extract just the named cookie from that list.
    var start = allcookies.indexOf(this.$name + '=');
    if (start == -1) return false;   // Cookie not defined for this page.
    start += this.$name.length + 1;  // Skip name and equals sign.
    var end = allcookies.indexOf(';', start);
    if (end == -1) end = allcookies.length;
    var cookieval = allcookies.substring(start, end);

    // Now that we've extracted the value of the named cookie, we've
    // got to break that value down into individual state variable 
    // names and values. The name/value pairs are separated from each
    // other by ampersands, and the individual names and values are
    // separated from each other by colons. We use the split method
    // to parse everything.
    var a = cookieval.split('&');    // Break it into array of name/value pairs.
    for(var i=0; i < a.length; i++)  // Break each pair into an array.
        a[i] = a[i].split(':');

    // Now that we've parsed the cookie value, set all the names and values
    // of the state variables in this Cookie object. Note that we unescape()
    // the property value, because we called escape() when we stored it.
    for(var i = 0; i < a.length; i++) {
        this[a[i][0]] = unescape(a[i][1]);
    }

    // We're done, so return the success code.
    return true;
}

// This function is the remove() method of the Cookie object.
function _Cookie_remove()
{
    var cookie;
    cookie = this.$name + '=';
    if (this.$path) cookie += '; path=' + this.$path;
    if (this.$domain) cookie += '; domain=' + this.$domain;
    cookie += '; expires=Fri, 02-Jan-1970 00:00:00 GMT';

    this.$document.cookie = cookie;
}

// Create a dummy Cookie object, so we can use the prototype object to make
// the functions above into methods.
new Cookie();
Cookie.prototype.store = _Cookie_store;
Cookie.prototype.load = _Cookie_load;
Cookie.prototype.remove = _Cookie_remove;

//===================================================================
//
//	FORM VALIDATION FUNCTIONS
//
//===================================================================

function isBlank(s) {
	var c = "";
	for (var i = 0; i < s.length; i++) {
 		c = s.charAt(i);
		if ((c != ' ') && (c != '\n') && (c != '\t')) return false
	}
	return true;
}

function isRadioChecked(r) {
	for (var i=0; i < r.length; i++) {
		if (r[i].checked) {
			return true;
		}
	}
	return false;
}

function isEmailInvalid(str) {
	var reg1 = /^.+@.+\..{2,6}$/;
	var reg2 = /@.*@|\.\.|@\.|\.@|^\.|\.$|\(|\)|\|\>|\,|\;|\:|\"|\`|\s+/;
	if (!reg1.test(str) || reg2.test(str)) {
		return true;
	} else {
		return false;
	}
}

function ValidateEntry(myForm) {
//	alert("In Validate Entry");
	var errors = new Array();

	//var form = document.entryform;
	if (isBlank(myForm.fvEmail.value)) {
		errors.push("\tEmail Address");
	}

	if (isBlank(myForm.fvFirstName.value) && isBlank(myForm.fvLastName.value) &&
		isBlank(myForm.fvAddress1.value) && isBlank(myForm.fvCity.value) &&
		(myForm.fvState.selectedIndex == 0) && isBlank(myForm.fvZip.value) &&
		isBlank(myForm.fvAreaCode.value) && isBlank(myForm.fvPhone.value) &&
		!isRadioChecked(myForm.fvGender) && (myForm.fvBirthYear.selectedIndex == 0)) {

		var addMessage = "If this is your first time entering, please complete all the required information.";


	} else {
		var addMessage = "";

		if (myForm.fvConfirmEmail != null && myForm.fvEmail.value != myForm.fvConfirmEmail.value) {
			errors.push("\tEmails do not match");
		}
		
		if (isBlank(myForm.fvFirstName.value)) {
			errors.push("\tFirst Name");
		}

		if (isBlank(myForm.fvLastName.value)) {
			errors.push("\tLast Name");
		}

		if (myForm.fvConfirmEmail != null && isBlank(myForm.fvConfirmEmail.value)) {
			errors.push("\tConfirm Email");
		}

		if (isBlank(myForm.fvAddress1.value)) {
			errors.push("\tStreet Address");
		}

		if (isBlank(myForm.fvCity.value)) {
			errors.push("\tCity");
		}

		if (myForm.fvState.selectedIndex == 0) {
			errors.push("\tState");
		}

		if (isBlank(myForm.fvZip.value)) {
			errors.push("\tZip Code");
		}
		
		var reg3 = /\d.*\d.*\d.*/;
		if (!reg3.test(myForm.fvAreaCode.value)) {
			errors.push("\tArea Code");
		}

		var reg7 = /\d.*\d.*\d.*\d.*\d.*\d.*\d.*/;
		if (!reg7.test(myForm.fvPhone.value)) {
			errors.push("\tPhone Number");
		}
		
		if (!isRadioChecked(myForm.fvGender)) {
			errors.push("\tGender");
		}
		
		if (myForm.fvBirthYear != null && myForm.fvBirthYear.selectedIndex == 0) {
			errors.push("\tBirth Year");
		}

	}


	// Check for errors
	if (errors.length > 0) {
		alert ("There were errors in your form. Please correct the following" +
				" fields and re-submit.\n\n" +
				errors.join("\n") +
				"\n\n" + addMessage);
		return false;
	} else {
		//if (myForm.fvAlreadyEntered) {
		//	var cookie_value = getCookie(myForm.fvEmail.value + myForm.fvContestId.value);
		//	if (cookie_value == 'entered') {
		//		myForm.action = myForm.fvAlreadyEntered.value;		
		//	}
		//}
		setGMCcookie(myForm);
		myForm.submitButton.disabled=true;
		return true;
	}
}

function setGMCcookie(myForm) {
	// get fvGender selected index
	for (i = 0; i < myForm.fvGender.length; i++) {
		if (myForm.fvGender[i].checked) {
			selectedIndex = i;
		}
	}
	var ayear = new Date();
	ayear.setTime(ayear.getTime() + (365 * 24 * 60 * 60 * 1000));
	var UTCstring = ayear.toGMTString();
	var primary_domain = getPrimaryDomain();
	// Email-only entries should not set a cookie
	if ((myForm.fvLastName.value != "") && (myForm.fvFirstName.value != "")) {
		var cookie_value = myForm.fvGender[selectedIndex].value + "||" + myForm.fvFirstName.value + "||" + myForm.fvLastName.value + "||" + myForm.fvAddress1.value + "||" + myForm.fvCity.value + "||" + myForm.fvState.value + "||" + myForm.fvZip.value + "||" + myForm.fvAreaCode.value + "||" + myForm.fvPhone.value + "||" + myForm.fvEmail.value;
		setCookie('gmc', cookie_value, UTCstring, '/', primary_domain);
	}
}

function populatefields(myForm) {
	var cookie_string = getCookie("DHEnterVals");
	if (cookie_string != null) {
		var c_array = cookie_string.split("|");
/*
		var Title = "";
		if (c_array[0] == "m") {
			Title = "Mr";
		} else if (c_array[0] == "f") {
			Title = "Ms";
		}
*/			
		var phone = (c_array[7] + c_array[8]).replace(/[^0-9]/g, '');
		//remove if the first digit is a "1"
		phone = phone.replace(/^1/g, '');
		var phone_area = /^\d\d\d/i.exec(phone);	
		phone = phone.replace(/^\d\d\d/g, '');
		var phone_prefix = /^\d\d\d/i.exec(phone);	
		phone = phone.replace(/^\d\d\d/g, '');
		var phone_suffix = /^\d\d\d\d/i.exec(phone);	
		//myForm.TITLE.value = Title;
		myForm.EMAIL.value = c_array[0];
		myForm.FIRST_NAME.value = c_array[1];
		myForm.LAST_NAME.value = c_array[2];
		myForm.ADDRESS.value = c_array[3];
		myForm.CITY.value = c_array[4];
		//myForm.STATE.value = c_array[5];
		myForm.ZIP.value = c_array[6];
		myForm.PHONE_AREA_CODE.value = phone_area;
		myForm.PHONE_EXCHANGE.value = phone_prefix;
		myForm.PHONE_ENDING.value = phone_suffix;

	}
}

function getPrimaryDomain() {
	//host = location.hostname;
	var d_array = location.hostname.split(".");
	dval = d_array[(d_array.length - 2)] + "." + d_array[(d_array.length - 1)];
	return dval;
}

function setCookie(name, value, expires, path, domain, secure) {
    document.cookie= name + "=" + escape(value) +
        ((expires) ? "; expires=" + expires : "") +
        ((path) ? "; path=" + path : "") +
        ((domain) ? "; domain=" + domain : "") +
        ((secure) ? "; secure" : "");
}

function getCookie(c_name) {
	if (document.cookie.length>0) {
		c_start=document.cookie.indexOf(c_name + "=");
		if (c_start!=-1) { 
			c_end=c_start + c_name.length;
			val_start=c_end+1;
		} else {
			c_start = null;
			c_end = null;
			val_start = null;
		}
		if (val_start!=null) {
			val_end=document.cookie.indexOf(";", val_start); 
			if (val_end==-1) {
				val_end=document.cookie.length;
			}
			return unescape(document.cookie.substring(val_start,val_end));
		}
	}
	return null;
}


function ValidateSendEmail(myForm) {

	var emptyFields = "";
	
	// did user enter their name
	if (isBlank(myForm.fvSenderName.value)) {
		emptyFields= emptyFields + "\nYou must enter your name.";
	}
	// did user enter their email
	if (isBlank(myForm.fvSenderEmail.value)) {
		emptyFields= emptyFields + "\nYou must enter your email.";
	// and was the email address valid
	} else if (isEmailInvalid(myForm.fvSenderEmail.value)) {
		emptyFields= emptyFields + "\nYour email address is not valid.";
	}
	
	// did user enter at least one recipient email
	var empty = true;
	var invalid = false;
	if (myForm.fvEmail.length) {
		for (i=0; i<myForm.fvEmail.length; i++) {
			if (!isBlank(myForm.fvEmail[i].value)) {
				empty = false;
				if (isEmailInvalid(myForm.fvEmail[i].value)) {
					invalid = true;
				}
			}
		}
		if (empty) emptyFields= emptyFields + "\nYou must enter at least one recipient email.";
		if (invalid) emptyFields= emptyFields + "\nA recipient email is invalid.";
	} else {
		if (isBlank(myForm.fvEmail.value)) {
			emptyFields= emptyFields + "\nYou must enter at least one recipient email.";
		}		
	}

	//if any errors then display and return false else return true
	if (emptyFields != "") {
		alert(emptyFields);
		return false;
	} else {
        //document.emailform.fvEmail.value = receiverEmail1 + " " + receiverEmail2 + " " + receiverEmail3;
		return true;
		return false;
	}

}  //end validateFormThanks

