function setSurvey(survey)
{
	document.forms['contact_form']['SurveyName'].value = survey;
}

function calculateSleepiness() {
	var calc = document.forms['calculator'];

	var result = 0;

	for(var q = 1; q < 9; q++) {
		var q_answered = false;

		for(var i = 0; i < 4; i++) {
			if(eval('calc.q' + q + '[' + i + '].checked') == true) {
				result += i;
				q_answered = true;
			}
		}

		if(q_answered == false) {
			alert("For an accurate measurement, you must rate all of the situations.");
			return;
		}

	}

	calc.result.value = result;

}


/**********************************************************
 *** FUNCTION: showSegmentation()                       ***
 *** -------------------------------------------------- ***
 *** Shows segmentation questions.                      ***
 **********************************************************/
function showSegmentation(questions) {

	var questions = questions.split(",");
	var seg_1 = document.getElementById('seg_1');
	var seg_2 = document.getElementById('seg_2');
	var seg_3 = document.getElementById('seg_3');
	var seg_4 = document.getElementById('seg_4');
	var seg_4_1 = document.getElementById('seg_4_1');

	seg_1.style.display = "none";
	seg_2.style.display = "none";
	seg_3.style.display = "none";
	seg_4.style.display = "none";
	seg_4_1.style.display = "none";

	var checkboxes = new Array();
	checkboxes = document.contact_form["Strategies[]"];

	for(var i = 0; i < checkboxes.length; i++) {
		if(checkboxes[i].checked == true) { checkboxes[i].checked = false; }
	}

	for(var i = 0; i < questions.length; i++) {
		switch(questions[i]) {
			case "1":
				seg_1.style.display = "block";
				break;
			case "2":
				seg_2.style.display = "block";
				break;
			case "3":
				seg_3.style.display = "block";
				break;
			case "4":
				seg_4.style.display = "block";
				break;
		}
	}
}

/**********************************************************
 *** FUNCTION: toggleSegmentation()                     ***
 *** -------------------------------------------------- ***
 *** Shows additional segmentation questions.           ***
 **********************************************************/
function toggleSegmentation(seg_q) {

	var seg_q = document.getElementById(seg_q);

	if(seg_q.style.display == "block") { seg_q.style.display = "none"; }
	else { seg_q.style.display = "block"; }
}

/**********************************************************
 *** FUNCTION: togglePrescription()                     ***
 *** -------------------------------------------------- ***
 *** Shows additional segmentation questions.           ***
 **********************************************************/
function togglePrescription(seg_q) {

	var seg_q = document.getElementById(seg_q);

	var checkboxes = new Array();
	checkboxes = document.contact_form["Strategies[]"];

	for(var i = 0; i< checkboxes.length; i++) {
		if(checkboxes[i].value == "1" && checkboxes[i].checked == true) {
			seg_q.style.display = "block";
			return true;
		} else if(checkboxes[i].value == "2" && checkboxes[i].checked == true) {
			seg_q.style.display = "block";
			return true;
		} else if(checkboxes[i].value == "3" && checkboxes[i].checked == true) {
			seg_q.style.display = "block";
			return true;
		} else {
			seg_q.style.display = "none";
		}
	}
}


/**********************************************************
 *** FUNCTION: formatData()                             ***
 *** -------------------------------------------------- ***
 *** Formats data to a specific mask.                   ***
 **********************************************************/
 function formatData(field, mask)
 {
 	var str = field.value;

 	switch(mask)
 	{
 		case "PHONE":
 			str = str.replace(/[\.\(\)\s_-]/g, "");
 			if(str.length != 10) { return false; }
 			str = "(" + str.substr(0,3) + ") " + str.substr(3,3) + "-" + str.substr(6,4);
 			break;
 	}

 	field.value = str;
 }


/**********************************************************
 *** FORM VALIDATION FUNCTION: validateForm()           ***
 *** -------------------------------------------------- ***
 *** Calls individual validations for form fields.      ***
 **********************************************************/
function validateForm(form)
{

	var validator = new FormValidator();

	// Set object variables for the form fields
	var fields = new Array();

	// FormFieldObject( FORM, NAME, REQUIRED, VALIDATION_METHOD, DESCRIPTOR )
	fields.push( new FormFieldObject(form, 'Salutation',     true,  'ALPHA',        'Salutation'));
	fields.push( new FormFieldObject(form, 'FirstName',      true,  'ALPHAPLUS',    'First name'));
	fields.push( new FormFieldObject(form, 'LastName',       true,  'ALPHAPLUS',    'Last name'));
	fields.push( new FormFieldObject(form, 'Address1',       true,  'ALPHANUMERIC', 'Mailing address'));
	fields.push( new FormFieldObject(form, 'Address2',       false, 'ALPHANUMERIC', 'Address 2'));
	fields.push( new FormFieldObject(form, 'City',           true,  'ALPHAPLUS',    'City'));
	fields.push( new FormFieldObject(form, 'State',          true,  'ALPHA',        'State'));
	fields.push( new FormFieldObject(form, 'Zip',            true,  'ZIP',          'Zip code'));
	fields.push( new FormFieldObject(form, 'Phone',          true,  'PHONE',        'Phone'));
	fields.push( new FormFieldObject(form, 'Fax',            false, 'PHONE',        'Fax'));
	fields.push( new FormFieldObject(form, 'Email',          true,  'EMAIL',        'Email address'));
	fields.push( new FormFieldObject(form, 'Email2',         true,  'EMAIL',        'Confirmation Email address'));
	fields.push( new FormFieldObject(form, 'Occupation',     true,  'ALPHAPLUS',    'Occupation'));
	fields.push( new FormFieldObject(form, 'Gender',         true,  'ALPHA',        'Gender'));
	fields.push( new FormFieldObject(form, 'BirthMonth',     true,  'NUMERIC',      'Birth month'));
	fields.push( new FormFieldObject(form, 'BirthYear',      true,  'AGE',          'Birth year'));
	fields.push( new FormFieldObject(form, 'Industry',       true,  'ALPHANUMERIC', 'Industry'));
	fields.push( new FormFieldObject(form, 'Title[]',        true,  'CHECKBOX',     'Degree'));
	fields.push( new FormFieldObject(form, 'Specialty[]',    true,  'CHECKBOX',     'Specialty'));
	fields.push( new FormFieldObject(form, 'Diagnosed',      true,  'RADIO',        'Have you been diagnosed...'));
	fields.push( new FormFieldObject(form, 'DiscussedES',    true,  'RADIO',        'Have you discussed ES...'));
	fields.push( new FormFieldObject(form, 'Interfere',      true,  'RADIO',        'How much does your ES interfere...'));
	fields.push( new FormFieldObject(form, 'WorkShifts',     true,  'RADIO',        'Do you work shifts...'));
	fields.push( new FormFieldObject(form, 'OSATreatment[]', true,  'CHECKBOX',     'How is your OSA being treated...'));
	fields.push( new FormFieldObject(form, 'HowLong',        true,  'RADIO',        'How long have you been using...'));
	fields.push( new FormFieldObject(form, 'f_name',         true,  'ALPHAPLUS',    'Friend\'s Name'));
	fields.push( new FormFieldObject(form, 'f_email',        true,  'EMAIL',        'Friend\'s Email'));
	fields.push( new FormFieldObject(form, 'u_name',         true,  'ALPHAPLUS',    'Your Name'));
	fields.push( new FormFieldObject(form, 'u_email',        true,  'EMAIL',        'Your Email'));

	for(var i=0; i < fields.length; i++)
	{
		if(fields[i].field != null)
		{
			validator.validate(fields[i]);

			// Special case for Confirmation Email matching
			if(i == 11 && fields[10].field.value != fields[11].field.value)
			{
				validator.addError(" - Your " + fields[11].descriptor + " does not match your " + fields[10].descriptor + ".\n");
			}
		}
	}

	// Special Opt In Field
	var optIn = document.getElementById('OptedIn_req');
	if(isset(optIn) && !optIn.checked)
	{
		validator.error += "\n\nTo proceed with your order, please check the box, permitting\nCephalon to provide information to you in the future.\nOrders cannot be processed unless this box is checked.";
		validator.errors = true;
	}


	if(validator.errors) { alert(validator.error); return false; }
	else       { return true; }

} // End: validateForm()


function FormFieldObject(form, name, required, validation, descriptor)
{
	//alert(name + ":" + validation + " (active=" + (name in form) + ")");
	this.name        = name;
	this.field       = (name in form) ? form[name] : null;
	this.field       = (isVisible(this.field)) ? this.field : null;
	this.descriptor  = descriptor;
	this.validation  = validation;
	this.required    = required;
	this.error = {"req": " - " + descriptor + " is a required field.\n",
	              "fmt": " - " + descriptor + " is not formatted correctly.\n"}
}


function FormValidator()
{
	//==[ VALIDATION REGULAR EXPRESSIONS ]===============================
	this.REGEX = new Array();
	this.REGEX['REQUIRED']     = /^(\S\s?)+$/;
	this.REGEX['ALPHA']        = /^[A-Za-z]+$/;
	this.REGEX['ALPHAPLUS']    = /^[A-Za-z][A-Za-z\s_-]*$/;
	this.REGEX['ALPHANUMERIC'] = /^\w[\w\s\.-]*$/;
	this.REGEX['NUMERIC']      = /^\d+$/;
	this.REGEX['ZIP']          = /^(\d{5}$)|(^\d{5}-\d{4})$/;
	this.REGEX['PHONE']        = /^\(?\d{3}\)?([-\.\s])?\d{3}([-\.\s])?\d{4}$/;
	this.REGEX['EMAIL']        = /^\w[\w\.-]+@\w[\w\.-]+\.[a-zA-Z]{2,}$/;
	this.REGEX['DEA']          = /^[ABCDEFGHJKLMNPRSTUX][A-Z]\d{7}$/;

	this.AGEMIN = 17;
	this.AGEMAX = 125;
	this.errors = false;
	this.error  = "The following errors occured:\n\n";
}

// Validates non-empty input fields
FormValidator.prototype.addError = function(str)
{
	this.error += str;
	this.errors = true;
}

//==[ VALIDATION FUNCTIONS ]========================================

FormValidator.prototype.validate = function(f)
{
	if(!f.required && f.field.value == "") { return; }

	switch(f.validation)
	{
		case 'REQUIRED':
			if(!this.validateRequired(f.field.value)) { this.addError(f.error.req); }
			break;

		case 'AGE':
			var d    = new Date();
			var year = d.getFullYear();

			if(f.required && !this.validateRequired(f.field.value)) { this.addError(f.error.req); }
			else if(!this.REGEX['NUMERIC'].test(f.field.value))     { this.addError(f.error.fmt); }
			else if(!this.validateAge(f.field.value, year))
			{
				var startYear = year-this.AGEMAX;
				var endYear   = year-this.AGEMIN;
				this.addError(" - " + f.descriptor + "s before " + startYear + " and after " + endYear + " are not accepted.\n");
			}
			break;

		case 'DEA':
			if(f.required && !this.validateRequired(f.field.value)) { this.addError(f.error.req); }
			else if(!this.validateDEA(f.field.value))               { this.addError(f.error.fmt); }
			break;

		case 'CHECKBOX':
		case 'RADIO':
			if(f.required)
			{
				var checked = false;
				for(j = 0; j < f.field.length; j++)
				{
					if(f.field[j].checked) { checked = true; }
				}
				if(!checked)
				{
					this.error += f.error.req;
					this.errors = true;
				}
			}
			break;

		default:
			if(f.required && !this.validateRequired(f.field.value)) { this.addError(f.error.req); }
			else if(!this.REGEX[f.validation].test(f.field.value))  { this.addError(f.error.fmt); }
			break;
	}
}

// Validates non-empty input fields
FormValidator.prototype.validateRequired = function(str)
{
	return (str != null && this.REGEX['REQUIRED'].test(str));
}

// Validates valid Age
FormValidator.prototype.validateAge = function(num, year)
{
	if(this.REGEX['NUMERIC'].test(num))
	{
		return (num > (year-this.AGEMAX) && num < (year-this.AGEMIN));
	}
	else
	{
		return false;
	}
}

// Validates a properly formatted DEA number
FormValidator.prototype.validateDEA = function(dea, lname)
{
	var valid       = true;

	dea   = dea.toUpperCase();
	lname = lname.toUpperCase();

	if(this.REGEX['DEA'].test(dea) == false)   { return false; }

	var check = (dea[2] + dea[4] + dea[6]) + ((dea[3] + dea[5] + dea[7]) * 2);

	if(dea[1] != lname[0])              { return false; }
	if(dea[8] != check[dea.length - 1]) { return false; }

	return true;
}



function isVisible(el)
{
	var visible = true;
	if(isset(el) && el.length > 1) { el = el[0]; }

	while(isset(el) && isset(el.parentNode))
	{
		if(el.style.display == "none" || el.style.visibility == "hidden")
		{
			visible = false;
			break;
		}
		el = el.parentNode;
	}

	return visible;
}


// Test if variable is set
function isset(variable)
{
	return (typeof(variable) != "undefined" && variable != null);
}


