//
// Wizard - wheel wizard by vehicle
//
(function ($) {
	$.fn.wizard = function (options) {
		var opts = $.extend({}, $.fn.wizard.defaults, options);
		// iterate and reformat each matched element
		var makeList;
		return this.each(function () {
			var $this = $(this);
			// build element specific options
			var data = $this.metadata();
			var o = data ? $.extend({}, opts, data) : opts;
			var $make = $this.find(o.make), $model = $this.find(o.model), $year = $this.find(o.year), $size = $this.find(o.size);
			if (!makeList) {
				$.post('/Wizard/Make', null, function (data) {
					if (data && data.result) {
						$make.html('<option value="-1">Make...</option>');
						for (var i = 0; i < data.makes.length; i++)
							$('<option value="' + data.values[i] + '">' + data.makes[i] + '</option>').appendTo($make);

						$make.attr('disabled', false);
					}
				});
			}
			$make.change(function (e) {
				$year.attr('disabled', true);
				$model.attr('disabled', true);
				$size.attr('disabled', true);
				if ($(this).val() != '-1') {
					var make = $(this).val();
					$.post('/Wizard/Year/' + make, null, function (data) {
						if (data && data.result) {
							$year.html('<option value="-1">Year...</option>');
							for (var i = 0; i < data.years.length; i++)
								$('<option value="' + make + '/' + data.years[i] + '">' + data.years[i] + '</option>').appendTo($year);

							$year.attr('disabled', false);
						}
					});
				}
			});
			$year.change(function (e) {
				$model.attr('disabled', true);
				$size.attr('disabled', true);
				if ($(this).val() != '-1') {
					$.post('/Wizard/Model/' + $(this).val(), null, function (data) {
						if (data && data.result) {
							$model.html('<option value="-1">Model...</option>');
							for (var i = 0; i < data.models.length; i++)
								$('<option value="' + data.models[i].id + '">' + data.models[i].model + '</option>').appendTo($model);

							$model.attr('disabled', false);
						}
					});
				}
			});
			$model.change(function (e) {
				$size.attr('disabled', true);
				if ($(this).val() != '-1') {
					$.post('/Wizard/Size/' + $(this).val(), null, function (data) {
						if (data && data.result) {
							$size.html('<option value="-1">Size...</option>');
							for (var i = 0; i < data.sizes.length; i++)
								$('<option value="' + data.values[i] + '">' + data.sizes[i] + '</option>').appendTo($size);

							$size.attr('disabled', false);
						}
					});
				}
			});
			if (o.search)
				$(o.search).click(function () {
					if (!$size.attr('disabled') && $size.val() != '-1')
						window.location = '/Store/Wheels/0/-' + $size.val() + '/' + $model.val();
					return false;
				});
			else
				$size.change(function (e) {
					if (!$size.attr('disabled') && $size.val() != '-1')
						window.location = '/Store/Wheels/0/-' + $size.val() + '/' + $model.val();
				});
		});
	};
	$.fn.wizard.defaults = { make: 'select.make', model: 'select.model', year: 'select.year', size: 'select.size', search: null };
})(jQuery);

//
//  Wheel Filter
//
(function ($) {
	$.fn.wheelFilter = function (options) {
		var opts = $.extend({}, $.fn.wheelFilter.defaults, options);
		// iterate and reformat each matched element
		//var sizeList = opts.sizes;
		return this.each(function () {
			var $this = $(this);
			// build element specific options
			var data = $this.metadata();
			var o = data ? $.extend({}, opts, data) : opts;
			var $size = $this.find(o.size), $width = $this.find(o.width), $pcd = $this.find(o.pcd),
			$offset = $this.find(o.offset), $cb = $this.find(o.cb), $b = $this.find(o.search);

			$b.attr('disabled', false);
			$size.attr('disabled', true);
			$width.attr('disabled', true);
			$pcd.attr('disabled', true);
			$offset.attr('disabled', true);
			$cb.attr('disabled', true);

			if (!o.sizes || o.sizes.length == 0) {
				$.post('/Wizard/WheelSize', null, function (data) {
					if (data && data.result) {
						$size.html('<option value="-1">...</option>');
						for (var i = 0; i < data.sizes.length; i++)
							$('<option value="' + data.sizes[i].id + '">' + data.sizes[i].size + '</option>').appendTo($size);
						$size.attr('disabled', false);
					}
				});
			}
			$size.change(function (e) {
				$pcd.attr('disabled', true);
				$offset.attr('disabled', true);
				$cb.attr('disabled', true);
				if ($(this).val() != '-1') {
					$b.attr('disabled', false);
					var size = $(this).val();
					$.post('/Wizard/WheelSpec', $this.serialize(), function (data) {
						if (data && data.result) {
							setWidths(data);
							setPCDs(data);
							setOffsets(data);
							setCBs(data);
						}
					});
				}
				else
					$b.attr('disabled', true);
			});
			$width.change(function (e) {
				$pcd.attr('disabled', true);
				$offset.attr('disabled', true);
				$cb.attr('disabled', true);
				if ($(this).val() != '-1') {
					var size = $size.val();
					var width = $(this).val();
					$.post('/Wizard/WheelSpec', $this.serialize(), function (data) {
						if (data && data.result) {
							setPCDs(data, size);
							setOffsets(data);
							setCBs(data);
						}
					});
				}
			});
			$pcd.change(function (e) {
				$offset.attr('disabled', true);
				$cb.attr('disabled', true);
				if ($(this).val() != '-1') {
					$.post('/Wizard/WheelSpec', $this.serialize(), function (data) {
						if (data && data.result) {
							setOffsets(data);
							setCBs(data);
						}
					});
				}
			});
			$offset.change(function (e) {
				$cb.attr('disabled', true);
				if ($(this).val() != '-1') {
					$.post('/Wizard/WheelSpec', $this.serialize(), function (data) {
						if (data && data.result) {
							setCBs(data);
						}
					});
				}
			});
			$this.submit(function () {
				//if (!$size.attr('disabled') && $size.val() != '-1')
					$.post('/Store/WheelFinder', $this.serialize(), function (data) {
						//if (data)
						// $('.master-wrapper-cph').html(data);
					});
				return false;
			});

			function setWidths(data) {
				$width.html('<option value="-1">...</option>');
				for (var i = 0; i < data.widths.length; i++)
					$('<option value="' + data.widths[i].id + '">' + data.widths[i].width + '</option>').appendTo($width);
				$width.attr('disabled', false);
			}

			function setPCDs(data) {
				$pcd.html('<option value="-1">Any...</option>');
				for (var i = 0; i < data.pcds.length; i++)
					$('<option value="' + data.pcds[i].id + '">' + data.pcds[i].pcd + '</option>').appendTo($pcd);

				$pcd.attr('disabled', false);
			}
			function setOffsets(data) {
				$offset.html('<option value="-1">Any...</option>');
				for (var i = 0; i < data.offsets.length; i++)
					$('<option value="' + data.offsets[i].id + '">' + data.offsets[i].offset + '</option>').appendTo($offset);

				$offset.attr('disabled', false);
			}
			function setCBs(data) {
				$cb.html('<option value="-1">Any...</option>');
				for (var i = 0; i < data.cbs.length; i++)
					$('<option value="' + data.cbs[i].id + '">' + data.cbs[i].cb + '</option>').appendTo($cb);

				$cb.attr('disabled', false);
			}
		});
	};
	$.fn.wheelFilter.defaults = { sizes: [], size: 'select.size', width: 'select#width', pcd: 'select#pcd', offset: 'select#offset', cb: 'select#cb', search: null };
})(jQuery);

//
//   Tyre filter
//
(function ($) {
	$.fn.tyreFilter = function (options) {
		var opts = $.extend({}, $.fn.tyreFilter.defaults, options);
		// iterate and reformat each matched element
		//var sizeList = opts.sizes;
		return this.each(function () {
			var $this = $(this);
			// build element specific options
			var data = $this.metadata();
			var o = data ? $.extend({}, opts, data) : opts;
			var $diam = $this.find(o.diam), $width = $this.find(o.width), $ratio = $this.find(o.ratio), $b = $this.find(o.search);

			$b.attr('disabled', false);
			$width.attr('disabled', true);
			$ratio.attr('disabled', true);
			$diam.attr('disabled', true);

			if (!o.sizes || o.sizes.length == 0) {
				$.post('/Wizard/TyreSizes', null, function (data) {
					if (data && data.result) {
						$width.html('<option value="-1">...</option>');
						for (var i = 0; i < data.widths.length; i++)
							$('<option value="' + data.widths[i].id + '">' + data.widths[i].width + '</option>').appendTo($width);
						$width.attr('disabled', false);
						setRatio(data);
						setDiam(data);
					}
				});
			}
			$width.change(function (e) {
				$ratio.attr('disabled', true);
				$diam.attr('disabled', true);
				if ($(this).val() != '-1') {
					$.post('/Wizard/TyreSizes', $this.serialize(), function (data) {
						if (data && data.result) {
							setRatio(data);
							setDiam(data);
						}
					});
					//$b.attr('disabled', false);
				}
				//else
				//	$b.attr('disabled', true);
			});
			$ratio.change(function (e) {
				$diam.attr('disabled', true);
				if ($(this).val() != '-1') {
					$.post('/Wizard/TyreSizes', $this.serialize(), function (data) {
						if (data && data.result) {
							setDiam(data);
						}
					});
				}
			});
			$this.submit(function () {
				//if (!$width.attr('disabled') && $width.val() != '-1')
					$.post('/Store/TyreFinder', $this.serialize(), function (data) {
						//if (data)
						// $('.master-wrapper-cph').html(data);
					});
				return false;
			});

			function setRatio(data) {
				$ratio.html('<option value="-1">Any...</option>');
				for (var i = 0; i < data.ratios.length; i++)
					$('<option value="' + data.ratios[i].id + '">' + data.ratios[i].ratio + '</option>').appendTo($ratio);

				$ratio.attr('disabled', false);
			}
			function setDiam(data) {
				$diam.html('<option value="-1">Any...</option>');
				for (var i = 0; i < data.diams.length; i++)
					$('<option value="' + data.diams[i].id + '">' + data.diams[i].diam + '</option>').appendTo($diam);

				$diam.attr('disabled', false);
			}
		});
	};
	$.fn.tyreFilter.defaults = { sizes: [], width: 'select#width', ratio: 'select#ratio', diam: 'select#diam', search: 'button#go' };
})(jQuery);

