$(function() {

	$("#frm").submit(function() {
		if(isValid()) {
			var params = {
				Series: $("#ddSeries option:selected").text(),
				Front_Size: $(".front_selectedSize").text(),
				Rear_Size: $(".rear_selectedSize").text(),
				Color: $("#ddColors option:selected").val() || "",
				Other_Options: getOtherOptions(),
				id: "a*p"
			};
			
			// input fields
			var fieldTypes = ["input", "textarea"];
			var fieldTypesLen = fieldTypes.length;
			var fields, fieldsLen, ii;
			for(var i = 0; i < fieldTypesLen; i++)
			{
				fields = $("#userInfo " + fieldTypes[i]);
				fieldsLen = fields.length;
				for(ii = 0; ii < fieldsLen; ii++)
				{
					params[$(fields[ii]).attr("name")] = $(fields[ii]).val();
				}
			}
						
			$.post("submission.php", params, function(response) {
				$("#viewForm").hide();
				$("#viewSubmission").show().append(response);
			});
		}
		return false;
	});


	// -- WHEEL SIZES --
	showWheelSizes("front", $("#ddSeries option:selected").val());
	showWheelSizes("rear", $("#ddSeries option:selected").val());

	$("#ddSeries option").click(function() {
		showWheelSizes("front", $(this).val());
		showWheelSizes("rear", $(this).val());
	});
	
	$(".front_ddWheelSizes").live('click', function() {
		showWheelSizesBy("front", $(this).val(), $(this).attr("name"));
	});
	
	$(".rear_ddWheelSizes").live('click', function() {
		showWheelSizesBy("rear", $(this).val(), $(this).attr("name"));
	});
	
	$(".front_ddWheelSizesBy").live('click', function() {
		displaySelection("front", $(this).find("option:selected").text());
	});	
	
	$(".rear_ddWheelSizesBy").live('click', function() {
		displaySelection("rear", $(this).find("option:selected").text());
	});
	
	
	// other text fields
	$(".front_wheelSizesBy_other .other").bind('keyup', function() {
		displaySelection("front", $(this).val());
	});
	
	$(".rear_wheelSizesBy_other .other").bind('keyup', function() {
		displaySelection("rear", $(this).val());
	});
	
	// -- END WHEEL SIZES --
});

function showWheelSizes(which, seriesVal)
{
	$("."+which+"_wheelSizes").hide();
	$("#"+which+ "_wheelSizes_" + seriesVal).show();
	// select first one	
	if($("#"+which+"_wheelSizes_"+seriesVal + " option").length) {
		$("#"+which+"_wheelSizes_"+seriesVal + " option")[0].selected = true;
	}
	// show sizes by for selected value
	showWheelSizesBy(which, $("#"+which+"_ddWheelSizes_"+seriesVal+ " option:selected").val(), $("#"+which+"_ddWheelSizes_"+seriesVal).attr("name"));
}

function showWheelSizesBy(which, sizeBy, name)
{
	$("."+which+"_wheelSizesBy").hide();
	$("."+which+"_wheelSizesBy_"+name+"_"+sizeBy).show();
	// select first one
	if($("."+which+"_wheelSizesBy_"+name+"_"+sizeBy+ " option").length) {
		$("."+which+"_wheelSizesBy_"+name+"_"+sizeBy+ " option")[0].selected = "selected";
	}
	var val = $("."+which+"_wheelSizesBy_"+name+"_"+sizeBy+ " option:selected").text() || $("."+which+"_wheelSizesBy_"+name+"_"+sizeBy + " .other").val();
	displaySelection(which, val);
}

function displaySelection(which, val)
{
	$("."+which+"_selectedSize").html(val);
}

function isValid() 
{
	var requiredFields = $("#frm .required");
	var requiredFieldsLen = requiredFields.length;
	var field, isValid = true;
	
	for(var i = 0; i < requiredFieldsLen; i++)
	{
		field = $(requiredFields[i]);
		if(field.val() == "")
		{
			field.addClass("requiredField");
			field.next(".requiredMsg").show();
			isValid &= false;
		}
		// email validation
		else if(field.attr("name") == "Email")
		{
			var re =/^([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$/;
			if(!field.val().match(re))
			{
				field.addClass("requiredField");
				field.next(".requiredMsg").show();
				isValid &= false;	
			}
			else
			{
				field.removeClass("requiredField");
				field.next(".requiredMsg").hide();
			}
		}
		else
		{
			field.removeClass("requiredField");
			field.next(".requiredMsg").hide();
		}
	}
	
	return isValid;
}

function getOtherOptions()
{
	var aryStr = [];
	var ary = $(".otherOptions input:checked").each(function() {
		aryStr.push($(this).val());
	});

	return aryStr.join(", ");
}

