//===================================================================
//
//	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,4}$/;
	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 you first time to enter, 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");
		}

		if (isBlank(myForm.fvAreaCode.value)) {
			errors.push("\tArea Code");
		}

		if (isBlank(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 {
		myForm.submitButton.disabled=true;
		return true;
	}
}

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


//===================================================================
