
var _validationErrorMessage = 'Error: Please be sure to enter information for each field.';
var _emailValidationErrorMessage = 'Error: Please ensure that all email addresses are entered correctly.';
var _emailDuplicatesValidationErrorMessage = 'Error: Please ensure that no email addresses were entered more than once.';
var _emailsNotEnoughValidationErrorMessage = 'Error: You will need to enter at least 3 email addresses to use this feature.';
var _zipValidationErrorMessage = 'Error: Please enter your 5-digit ZIP code.';
var _usnubscribeStatusValidationErrorMessage = '{0} has previously unsubscribed from this list. Please delete them and enter another email address.';

$(document).ready(function() {
	var submitDefined = false;

	$(".controlpanel input[type=submit]")
		.focus(function() { submitDefined = true; })
		.blur(function() { submitDefined = false; });

	$("form").submit(function() {
		if ($.Watermark)
			$.Watermark.HideAll();
		if (submitDefined) return true;
		setTimeout(function() { $("#btnNext").focus().click(); }, 100);
		return false;
	});

	initializePage();
});

function initializePage()
{
	try {
		_initializePage();
	}
	finally {
		$("body").css({ paddingTop: 0 });
	}
}

function _initializePage()
{
	$(".acontainer input:text").addClass("a-text-input");
	$(".acontainer input:radio").addClass("styled");
	$(".acontainer input:checkbox").addClass("styled");

	for (var i = 1; i <= 29; i++) {
		tuneSpecificPage(i, (i != 28));
		if (((i >= 4) && (i <= 6)) || ((i >= 8) && (i <= 27))) {
			$(".la-ff-page" + i).addClass("small");
		}
	}

	// control panel modifications
	var $cp = $("#container .pagecontainer .controlpanel");

	$cp.find("input:visible").each(function(i, elm) {
		$(elm).wrap($("<div class='cp-button'><div class='cp-button-holder'></div></div>").addClass(elm.id))
	});

	$cp.append(
		$("<div class='clear'></div>")
	).append(
		$("<div class='cp-holder'></div>").append($cp.find("> *"))
	);

	// footer modifications
	$("#container").append($(".footer"));

	if (typeof(CustomFormElements) != "undefined")
		CustomFormElements.init();

	// page 1 specific code
	var $pc = $(".la-ff-page1");
	if ($pc.length > 0) {
		$pc.find("#btnNext").val("Click Here >");
		$("#container").width("39.3em");
	}

	// page 4 specific code
	var $pc = $(".la-ff-page4");
	if ($pc.length > 0) {
		var $sepTable = genLayoutTable(2, 3);
		$sepTable.insertAfter($pc.find(".qac1"));
		$pc.find("> table tr.r1 td.c1").append($pc.find(".qac2"));
		$pc.find("> table tr.r1 td.c2").append($pc.find(".qac5"));
		$pc.find("> table tr.r2 td.c1").append($pc.find(".qac3"));
		$pc.find("> table tr.r2 td.c2").append($pc.find(".qac6"));
		$pc.find("> table tr.r3 td.c1").append($pc.find(".qac4"));
		$pc.find("> table tr.r3 td.c2").append($pc.find(".qac7"));

		for (var i = 8; i <= 9; i++) {
			var $container = $pc.find(".qac" + i + " .acontainer div");
			setupCheckboxAndRadioInput($container);
		}
	}

	// page 5 specific code
	var $pc = $(".la-ff-page5");
	if ($pc.length > 0) {
		var $sepTable = genLayoutTable(2, 6);
		$sepTable.insertAfter($pc.find(".qac1"));
		$pc.find("> table tr.r1 td.c1").append($pc.find(".qac2"));
		$pc.find("> table tr.r1 td.c2").append($pc.find(".qac8"));
		$pc.find("> table tr.r2 td.c1").append($pc.find(".qac3"));
		$pc.find("> table tr.r2 td.c2").append($pc.find(".qac9"));
		$pc.find("> table tr.r3 td.c1").append($pc.find(".qac4"));
		$pc.find("> table tr.r3 td.c2").append($pc.find(".qac10"));
		$pc.find("> table tr.r4 td.c1").append($pc.find(".qac5"));
		$pc.find("> table tr.r4 td.c2").append($pc.find(".qac11"));
		$pc.find("> table tr.r5 td.c1").append($pc.find(".qac6"));
		$pc.find("> table tr.r5 td.c2").append($pc.find(".qac12"));
		$pc.find("> table tr.r6 td.c1").append($pc.find(".qac7"));
		$pc.find("> table tr.r6 td.c2").append($pc.find(".qac13"));
	}

	// page 6 specific code
	var $pc = $(".la-ff-page6");
	if ($pc.length > 0) {
		var $sepTable = genLayoutTable(2, 5);
		$sepTable.insertAfter($pc.find(".qac1"));
		$pc.find("> table tr.r1 td.c1").append($pc.find(".qac2"));
		$pc.find("> table tr.r1 td.c2").append($pc.find(".qac7"));
		$pc.find("> table tr.r2 td.c1").append($pc.find(".qac3"));
		$pc.find("> table tr.r2 td.c2").append($pc.find(".qac8"));
		$pc.find("> table tr.r3 td.c1").append($pc.find(".qac4"));
		$pc.find("> table tr.r3 td.c2").append($pc.find(".qac9"));
		$pc.find("> table tr.r4 td.c1").append($pc.find(".qac5"));
		$pc.find("> table tr.r4 td.c2").append($pc.find(".qac10"));
		$pc.find("> table tr.r5 td.c1").append($pc.find(".qac6"));
		$pc.find("> table tr.r5 td.c2").append($pc.find(".qac11"));

		setupWatermark($pc.find("#COMPANY").get(0), "Company Name");
	}

	// page 8 specific code
	var $pc = $(".la-ff-page8");
	if ($pc.length > 0) {
		$pc.find(".acontainer div").each(function(i, elm) {
			var text = $.trim($(this).text());
			var $childs = $(this).find("> span, > input");
			$(this).empty().append($("<label>" + text + "</label>")).append($childs);
			$(this).find("label")
				.mousedown(function() { $(this).parent().find(".radio").mousedown(); })
				.mouseup(function() { $(this).parent().find(".radio").mouseup(); });
			$("<div class='clear'></div>").insertAfter($(this).parent());
		});
	}

	// page 16 specific code
	var $pc = $(".la-ff-page16");
	if ($pc.length > 0) {
		setupCheckboxAndRadioInput($pc.find(".qac2 .acontainer > div"));
	}

	// page 9 to 26 specific code
	for (var i = 9; i <= 26; i++) {
		var $acontainer = $(".la-ff-page" + i + " .qac1 .acontainer");
		if ($acontainer.length > 0) {
			var leftHeaderDesc = $.trim($acontainer.find(".leftheaderdesc").text()).replace(/ /, "<br/>");
			var rightHeaderDesc = $.trim($acontainer.find(".rightheaderdesc").text()).replace(/ /, "<br/>");

			$acontainer.find(".header, .filler, .headerdesc").remove();
			$("<tr class='headerdesc'><td></td><td colspan='10'><div class='leftheaderdesc'>" 
				+ leftHeaderDesc + "</div><div class='rightheaderdesc'>" + rightHeaderDesc 
				+ "</div></td></tr>").insertBefore($acontainer.find(".rating tr:first"));
		}
	}

	// page 27 specific code
	var $pc = $(".la-ff-page27");
	if ($pc.length > 0) {
		$pc.find(".acontainer input").each(function(i, elm) {
			setupWatermark(elm, "Email " + (i + 1));
		});
		$pc.find("#btnNext").val("Continue >");
	}

	// common code
	$("#btnPrevious").removeAttr("onclick");
	if ($(".la-ff-page6, .la-ff-page27").length <= 0) {
		setupWatermark('.a-text-input');
	}
	setupCombobox('select');
}

function genLayoutTable(cols, rows)
{
	var result = "<table class='holder' cellpadding='0' cellspacing='0' border='0'>";
	for (var i = 1; i <= rows; i++) {
		result = result + "<tr class='r" + i + "'>";
		for (var j = 1; j <= cols; j++) {
			result = result + "<td class='c" + j + "'></td>";
		}
		result = result + "</tr>";
	}
	return $(result + "</table>");
}

function tuneSpecificPage(pageNumber, modifyCpButtons)
{
	var qacontainer = document.getElementById("Page " + pageNumber + "_1");
	if (!qacontainer)
		qacontainer = document.getElementById("Page " + pageNumber);

	$(qacontainer).parents(".pagecontainer").addClass("la-ff-page" + pageNumber);
	$("#container .pagecontainer .qacontainer").each(function(i, elm) {
		$(elm).addClass("qac" + (i + 1));
	});
	if ((typeof(modifyCpButtons) == "undefined") || modifyCpButtons) {
		$(".la-ff-page" + pageNumber + " #btnPrevious").val("< Previous");
		$(".la-ff-page" + pageNumber + " #btnNext").val("Next >");
	}
}

function setupWatermark(selector, text)
{
	var $elm = $(selector);
	$elm.each(function() {
		if (!text)
			text = $.trim($(this).parents(".qacontainer").find(".qtext").text());
		if (text)
			$(this).Watermark(text);
		text = undefined;
	});
}

function setupCombobox(selector)
{
	var $elm = $(selector);
	if ($elm.length > 0)
		$elm.selectbox();
}

function setupCheckboxAndRadioInput(container)
{
	var $container = $(container);
	$container.each(function() {
		var $childs = $(this).find("> :lt(2)").remove();
		$(this).html("<label>" + $(this).html() + "</label>");
		$(this).prepend($childs);
		$(this).find("label")
			.mousedown(function() { $(this).parent().find(".checkbox, .radio").mousedown(); })
			.mouseup(function() { $(this).parent().find(".checkbox, .radio").mouseup(); });
	});
}

function isZipCode(value)
{
	var regExp = /^\d{5}([\-]\d{4})?$/;
	return regExp.test(value);
}

function checkRequiredField(controlId, validateContentFn)
{
	var $ctrl = $("#" + controlId);
	var $label = $ctrl.parents(".qacontainer").find(".qcontainer .qtext").removeClass("error");
	if (($ctrl.attr($.Watermark.EmptyAttrName) == $.Watermark.EmptyAttrName) 
		|| ($.trim($ctrl.val()) == "")
		|| ((typeof(validateContentFn) == "function") && !validateContentFn($ctrl.val())))
	{
		$label.addClass("error");
		return false;
	}
	return true;
}

function isDropDownValueSelected(controlId)
{
	var $ctrl = $("#" + controlId);
	var $label = $ctrl.parents(".qacontainer").find(".qcontainer .qtext").removeClass("error");
	var value = $.trim($ctrl.val());
	if ((value == "") || (value == '.')) {
		$label.addClass("error");
		return false;
	}
	return true;
}

function validateVerticalRadioGroup(groupName)
{
	var $ctrls = $(":radio[name=" + groupName + "]");
	var $label = $ctrls.parents(".qacontainer").find(".qcontainer .qtext").removeClass("error");
	if (!$ctrls.is(":checked")) {
		$label.addClass("error");
		return false;
	}
	return true;
}

function validateHorizontalRadioGroup(groupName)
{
	var $ctrls = $(":radio[name=" + groupName + "]");
	var $errorHolder = $("#" + groupName + "error").parent().hide();
	if (!$ctrls.is(":checked")) {
		$errorHolder.show().css({ visibility: "visible" });
		return false;
	}
	return true;
}

function validateRadioGroupSeriesPage()
{
	var pageValid = true;
	$(".acontainer .rating .answer0, .acontainer .rating .answer1").each(function() {
		pageValid &= validateHorizontalRadioGroup($(this).find("input:radio:eq(0)").attr("name"));
	});

	if (!pageValid) {
		alert(_validationErrorMessage);
		return false;
	}
	return true;
}
