$(function() {
	$.fn.scrollPanel = function(options) {
		var defaults = {
			'panelHeight': '300'
		};

		var opts = $.extend(defaults, options);

		var block = $(this);
		var list = $(opts.list);
		var sl = $(opts.slider);

		block.css({
			'height': 'auto'
		})
			.show();

		var h = parseInt(list.height(), 10)-parseInt(opts.panelHeight, 10)+20;

		block.css('height', opts.panelHeight+'px');

		list.css('marginTop', "0px");

		sl.css('height', '');

		if (h < 21)
		{
			sl.slider("destroy");
			return false;
		}

		block.unmousewheel();
		block.mousewheel(function (evt, d) {
			var t = 0;
			if (d > 0)
			{
				t = 40;
			} else if (d < 0) {
				t = -40;
			}

			sl.slider("value", sl.slider("value")+t);

			list.stop()
				.animate({
					'marginTop': "-" + (h-sl.slider("value")) + "px"
				});

			evt.stopPropagation();
			evt.preventDefault();
		});

		var optsn = {
			max: h,
			orientation: 'vertical',
			value: h,
			slide: function(e, ui) {
				list.stop()
					.animate({
						'marginTop': "-" + (h-ui.value) + "px"
					});
			}
		};

		sl.slider("destroy");
		sl.css('height', parseInt(opts.panelHeight, 10)-40);
		sl.slider(optsn);
	};

	$.fn.linkLoader = function(options) {
		var defaults = {
			'rnfr': '',
			'rnto': '',
			'box': '',
			'callback': ''
		};

		var opts = $.extend(defaults, options);

		$("a", $(this)).each(function (i, val) {
			var a = $(this);
			a.click(function (evt) {
				$(opts.box).load(
					$(this).attr('href').replace(
						new RegExp(opts.rnfr),
						opts.rnto
					),
					{},
					opts.callback
				);
				return false;
			});
		});
	};

	$.fn.paramSelector = function(options) {
		var defaults = {
			className: 'm-active'
		};

		var opts = $.extend(defaults, options);

		$(this).each(function(i, val) {
			$(this).children("li").each(function(j, li) {
				var a = $(li).find("a:first");

				a.click(function() {
					var ali = $($(this).parents("li").get(0));

					$(ali.parents("ul").get(0))
						.find("li."+opts.className)
						.removeClass(opts.className);

					ali.addClass(opts.className);

					return false;
				});
			});
		});
	};

	$.fn.addItems = function(data) {
		return this.each(function() {
			var list = this;
			$.each(data, function(index, itemData) {
				var option = document.createElement("OPTION");
				option.text = itemData.Text;
				option.value = itemData.Value;
				list.options.add(option);
			});
		});
	};
});


function newsPanels(opts)
{
	$(".b-news").scrollPanel({
		'slider': '#slider_list',
		'list': '.b-news > ul',
		'panelHeight': opts.panel1
	});

	if ($("h2", ".b-news_text").length == 0)
	{
		$(".b-news_text").hide();
	} else {
		$(".b-news_text").scrollPanel({
			'slider': '#slider_text',
			'list': '.b-news_text .b-inner',
			'panelHeight': opts.panel2
		});
	}

	$(".b-news > ul").linkLoader({
		'rnfr': opts.rnfr,
		'rnto': opts.rnto,
		'box': '.b-news_text .b-inner',
		'callback': function () {
			$(".b-news_text").scrollPanel({
				'slider': '#slider_text',
				'list': '.b-news_text .b-inner',
				'panelHeight': opts.panel2
			});
		}
	});
}

$.preloadImages = function()
{
	for (var i = 0; i < arguments.length; i++)
	{
		$("<img>").attr("src", arguments[i]);
	}
}

$.preloadImages('/img/menu-back.png');

var infoRows = {
	rows: null,
	samp: null,
	del: null,
	len: 0,

	init: function (s)
	{
		var t = this;

		t.rows = $(s);
		t.samp = $('#sample');

		t.addOne();

		$('.b-contact_spacer .b-link_add')
			.click(function () {
				t.addOne();
				return false;
			});

		$(t.rows.parents('form').get(0))
			.submit(function (evt) {
				t.submit(this);
			});
	},

	addOne: function ()
	{
		var t = this;

		var n = $('<ul class="b-item">'+this.samp.html()+'</ul>');

		n.find('.m-d4 > a')
			.click(function (evt) {
				t.remove(this);
				return false;
			});

		this.rows.append(n);
		this.len++;
	},

	remove: function (el)
	{
		$($(el).parents('ul').get(0)).remove();
		this.len--;
		if (this.len == 0) this.addOne();
	},

	submit: function (el)
	{
		var str = '';
		this.rows.find('ul').each(function (i, val) {
			str += $(val).find('.m-d1 .b-edit').val()
				+'!^!'+$(val).find('.m-d2 .b-edit').val()
				+'!^!'+$(val).find('.m-d3 .b-edit').val()
				+'^^';
		});

		$(this.rows.parents('form').get(0)).find('input[name=\'items\']').val(str);
	}
}

var paramsCollection = {
	params: [0, 0, 0],
	data: null,
	form: null,

	init: function ()
	{
		var t = this;

		$("input[name='r_02_']")
			.focus(function (evt) {
				t.hideParams(evt, this);
				$(this).addClass("m-high");
				t.showParams(evt, this, 0);
			});

		$("input[name='r_03_']")
			.focus(function (evt) {
				if (!t.params[0])
				{
					t.hideParams(evt, this);
					return false;
				}
				t.hideParams(evt, this);
				$(this).addClass("m-high");
				t.showParams(evt, this, 1);
			});

		$("input[name='r_04_']")
			.focus(function (evt) {
				if (!t.params[1])
				{
					t.hideParams(evt, this);
					return false;
				}
				t.hideParams(evt, this);
				$(this).addClass("m-high");
				t.showParams(evt, this, 2);
			});

		$(".b-params_list > .b-close")
			.click(function (evt) {
				t.hideParams(evt, this);
				evt.preventDefault();
			});

		t.form = $($("input[name='r_02_']").parents('form').get(0))
			.submit(function (evt) {
				t.submit(this);
			});
	},

	showParams: function (evt, elm, num)
	{
		var t = this;

		$.getJSON(
			"/parts/parameters-ajax.html"
				+((num > 0)?"?model="+this.params[0]:"")
				+((num > 1)?"&mod="+this.params[1]:"")
				+((num > 2)?"&engine="+this.params[2]:""),
			function(data) {
				var str = "";

				var step = 0;
				if (t.params[0]) step++;
				if (t.params[1]) step++;
				if (t.params[2]) step++;

				var oldpar = t.params[num];

				var sz = data.length;
				var k = 0;
				$(data).each(function(i, val) {
					if (i == sz-1)
					{
						return;
					}

					var p = "";

					var l = val.length;
					if (num == 1) l--;
					for (j = 2; j < l; j++)
					{
						if (!val[j]) continue;
						if (p) p += ", ";
						p += val[j];
					}

					if (p) p = " <span>"+p+"</span>";

					t.params[num] = val[0];

					if (val[1]) k++;

					str += "<li><a href=\"#\" onclick=\"paramsCollection.select("
						+((num >= 0)?t.params[0]:0) +", "
						+((num > 0)?t.params[1]:0) +", "
						+((num > 1)?t.params[2]:0) +", '"
						+$(elm).attr('name') +"', "+i+"); return false;\">"
						+val[1]
						+p
						+"</a></li>\n";
				})

				t.params[num] = oldpar;

				if ((k > 0) && (num < 3))
				{
					elm = $(elm);

					var pos = $(".b-contact_spacer").offset();
					pos.left -= $("#params").outerWidth();
					pos.top -= 26;


					$("#params")
						.css({
							'left': pos.left+'px',
							'top': pos.top+elm.outerHeight()+'px'
						})
						.show()
						.find("ul")
						.html(str);
				}

				t.data = data;

				t.fillYears();
			}
		);
	},

	hideParams: function (evt, elm)
	{
		this
			.form
			.find(".m-high")
			.removeClass("m-high");
		$("#params").hide();
	},

	select: function (n1, n2, n3, elm, n)
	{
		this.params = [n1, n2, n3];

		var step = 0;
		if (n1) step++;
		if (n2) step++;
		if (n3) step++;

		$("input[name='r_0"+ (2+step-1) +"_']")
			.val(this.data[n][1])
			.change();

		var lim = (step < 3)?8:6;
		for (i = 2+step; i < lim; i++)
		{
			$("input[name='r_0"+ i +"_']").val('');
		}

		if (this.data)
		{
			this.fillYears();

			if (step == 2) // mod
			{
				// vol
				$("input[name='r_06_']")
					.val(
						((this.data[n][5])?this.data[n][5]:"")
					)
					.change();

				// power
				$("input[name='r_07_']")
					.val(
						((this.data[n][2])?this.data[n][2].replace(/\s*л\.\s*с\./, ""):"")
					)
					.change();
			}

			if (step == 3)
			{
				this.showParams(null, null, 3);
			}

			this.data = null;
		}

		this.hideParams();

		$(((step < 3)?"input":"select") +"[name='r_0"+ (2+step) +"_']").focus();
	},

	fillYears: function ()
	{
		var sz = this.data.length;

		var min = this.data[sz-1][0];
		var max = this.data[sz-1][1];

		max = Math.min(2009, max)+1;

		$("select[name='r_05_'] option").remove();

		var syears = $("select[name='r_05_']");
		for (i = min; i < max; i++)
		{
			syears.addItems([{Text: i, Value: i}]);
		}
		syears.change();
	},

	submit: function (el)
	{
		var str = '';

		$(".b-table_params > dt, dd").each(function (i, val) {
			if ($(val).attr('tagName').toLowerCase() == 'dt')
			{
				str += $(val).text().replace(/\s*$/, "") +": ";
				return true;
			}

			val = $(val.firstChild);

			switch (val.attr('tagName').toLowerCase())
			{
				case 'input':
				case 'select':
				case 'textarea':
					str += val.val() +"\n";
					break;

				case 'ul':
					str += val.find(".m-active").text() +"\n";
					break;
			}
		});

		this.form.find('input[name=\'params\']').val(str);
	}
}

var formChecker  = {
	formObj: '',
	clCorr: 'b-edit_correct',
	clWrong: 'b-edit_wrong',

	setForm: function (f)
	{
		var t = this;
		this.formObj = $(f).get(0);
		$(this.formObj).bind('submit', function (evt) {
			return t.check(this);
		});
	},

	add: function (fieldName, rule)
	{
		var t = this;
		var o = this.formObj[fieldName];
		o.fillRule = rule;
		$(o).bind('change keyup', function (e) { t.checkField(this); });
		t.checkField(o);
	},

	remove: function (fieldName)
	{
		var o = this.formObj[fieldName];
		o.fillRule = '';
		$(o)
			.unbind('change keyup')
			.attr('className', 'b-edit');
	},

	check: function (f)
	{
		if (!f)
		{
			f = this.formObj;

			var l = f.length;

			for (var i = 0; i < l; i++)
			{
				if (
					(!f[i].fillRule)
					&& (f[i].name)
					&& (f[i].name.toString().match(/_$/))
				)
				{
					this.add(f[i].name, '.+');
				}
			}
			return false;
		}

		var l = f.length;
		var r = true;
		for (var i = 0; i < l; i++)
		{
			if (f[i].fillRule)
			{
				if (!this.checkField(f[i]))
				{
					r = false;
				}
			}
		}

		if (!r) alert("Заполните, пожалуйста, все необходимые поля!");

		return r;
	},

	checkField: function (el)
	{
		var rule = el.fillRule;
		el = $(el);

		var d = (el.val()) && (el.val().match(new RegExp(rule)));
		if (d) d = d.length > 0;

		el.toggleClass(this.clCorr, d);
		el.toggleClass(this.clWrong, !d);

		return d;
	}
}

var imageSwitcher = {
	fnc_click: null,

	init: function (s, b)
	{
		var t = this;
		b = $(b);
		if (!this.fnc_click)
		{
			t.fnc_click = function (e) {
				el = $(this);
				var img1 = el.attr('src').replace(/(.*\/)(.+)(_)(\d{1,4}){0,1}(x)(\d{1,4}){0,1}(\..*$)/, "$1$2_266x200$7");
				var img2 = el.parent('a').attr('href');

				b.attr('src', img1);
				b.parent('a').attr('href', img2);

				e.preventDefault();
			};
		}

		$(s).each(function (i, el){
			$(el).bind('click', t.fnc_click);
		});
	}
}

var subMenu = {
	fnc_click: null,

	init: function (s, s1)
	{
		var t = this;
		if (!this.fnc_click)
		{
			t.fnc_click = function (e) {
				el = $(this);
				el.parent().parent().toggleClass('m-active');
				e.preventDefault();
			};
		}

		$(s).each(function (i, el) {
			$(el).bind('click', t.fnc_click);
		});
	}
}

function validateImageReload(im)
{
	var params = "";

	var src = im.src.split('?');
	if (src[1])
	{
		var tmp = src[1].split(/0\.\d/);
		tmp = tmp[0].replace(/^(.*)(\&)$/, '$1');
		params = tmp;
	}
	src = src[0]+'?'+params+'&'+Math.random();
	im.src = src;
}

