var price = null,
	prevPrice = null,
	models = null,
	form = document.forms['calc-wizard'],
	_dEls = [],
	txtNext = 'Дальше &rarr;',
	txtBack = '&larr; Назад',
	txtDone = 'Готово'
;
for (var i = 0, el; el = form.elements[i]; i++) {
	if (el.disabled) {
		_dEls[_dEls.length] = el;
	};
};
String.prototype.reverse = function() {
	var str = '', self = this.split('');
	for (var i = self.length - 1; i >= 0; i--) {
		str += self[i];
	}
	return str;
};
var formatPrice = function( pr) {
	return pr.toString()
		.reverse()
		.replace( /(\d{3})/g, '$1 ')
		.reverse()
	;
};
var roundPrice = function( p, d, doNotFormat) {
	var d = d || 100;
	var pr = Math.round( p / d) * d;
	if (!doNotFormat) {
		pr = formatPrice( pr);
	};
	return pr;
};
var getPrice = function( indx) {
	if (!price || !price[indx]) return null;
	if (price.notRange) {
		return roundPrice( price[indx].amount) + ' ' + price[indx].sign;
	} else {
		var basePrice = Math.round( price[indx].amount);
		var pricediff = Math.round( basePrice * (priceRangeKoeff / 100));
		var lowPrice  = roundPrice( basePrice - pricediff);
		var highPrice = roundPrice( basePrice + pricediff);
		return 'от ' + lowPrice + ' до ' + highPrice + ' ' + price[indx].sign;
	}
};
var finalizeStep = function( finalize, el) {
	var btn = $('#wzrd-next-btn');
	if (!finalize) {
		el.value = 'alg';
		btn.html( txtDone);
	} else {
		el.value = 'tun';
		btn.html( txtNext);
	};
};
var onStepShow = function() {
	for (var i = 0, el; el = form.elements[i]; i++) {
		for (var ii = 0, dEl; dEl = _dEls[ii]; ii++) {
			if (dEl == el) {
				el.disabled = true;
			};
		};
	};
};
function getModelById( id) {
	if (models) {
		for (var i = 0; i < models.length; i++) {
			if (models[i].id == id) return models[i];
		}
	}
	return null;
};
function loadCalcModels( select, all) {
	if (!select.value) {
		$('.calc_model').attr( 'disabled', 'disabled');
	} else {
		var mid = _calc_mid_ || null;
		$('.model_spin').html( '<img src="/images/loader.gif" align="absmiddle" width="16" height="16" />');
		$.ajax({
			url: all? '/directory/ajax/carmodels' : '/directory/ajax/carmodels-active',
			data: 'bid=' + select.value,
			dataType: 'json',
			success: function( _models) {
				var html = '<option value="">- Выберите модель -</option>';
				models = _models;
				for (var i = 0; i < models.length; i++) {
					html += '<option value="' + models[i].id + '"' + (mid && mid == models[i].id ? ' selected="selected"' : '') + '>' + models[i].name + '</option>';
				}
				$('.calc_model').html( html);
				$('.calc_model').removeAttr( 'disabled');
				$('.model_spin').html( '');
				$('.calc_model').unbind( 'change');
				$('.calc_model').change( function() {
					var model = getModelById( this.value),
						html = '<option value="">- Выберите год -</option>'
					;
					if (!model) return ;
					for (var i = 0, s = model.years.length; i < s; i++) {
						html += '<option value="' + model.years[i] + '"' + '>' + model.years[i] + '</option>';
					}
					$('#calc_year').html( html);
					$('#calc_year').removeAttr( 'disabled');
					html = '<option value="">- Выберите кузов -</option>';
					for (var i = 0, s = model.bodystyles.length; i < s; i++) {
						if (model.bodystyles[i]) {
							html += '<option value="' + model.bodystyles[i].id + '"' + '>' + model.bodystyles[i].name + '</option>';
						}
					}
					$('#calc_body').html( html);
					$('#calc_body').removeAttr( 'disabled');
					html = '<option value="">- Выберите КП -</option>';
					for (var i = 0, s = model.transmissions.length; i < s; i++) {
						if (model.transmissions[i]) {
							html += '<option value="' + model.transmissions[i].id + '"' + '>' + model.transmissions[i].name + '</option>';
						}
					}
					$('#calc_kp').html( html);
					$('#calc_kp').removeAttr( 'disabled');
					html = '<option value="">- Выберите объем -</option>';
					for (var i = 0, s = model.displacements.length; i < s; i++) {
						if (model.displacements[i]) {
							html += '<option value="' + model.displacements[i] + '"' + '>' + model.displacements[i] + '</option>';
						}
					}
					$('#calc_vol').html( html);
					$('#calc_vol').removeAttr( 'disabled');
					if (document.getElementById( 'calc_city')) {
						html = '<option value="">- Выберите город -</option>';
						for (var i = 0, s = model.cities.length; i < s; i++) {
							if (model.cities[i]) {
								html += '<option value="' + model.cities[i].id + '"' + '>' + model.cities[i].name + '</option>';
							}
						}
						$('#calc_city').html( html);
						$('#calc_city').removeAttr( 'disabled');
					}
				});
			},
			error: function( response, status) {
				$('.model_spin').html( '');
				alert( 'ERROR: ' + response.responseText);
			}
		});
	}
};
var checkAvgForm = function() {
	var err = '';
	if (!form['displacement'].value) {
		err = 'Выберите объем двигателя автомобиля!';
		try { form['displacement'].focus(); } catch (ex) {};
	}
	if (!form['transmission_id'].value) {
		err = 'Выберите тип коробки передач автомобиля!';
		try { form['transmission_id'].focus(); } catch (ex) {};
	}
	if (!form['bodystyle_id'].value) {
		err = 'Выберите тип кузова автомобиля!';
		try { form['bodystyle_id'].focus(); } catch (ex) {};
	}
	if (!form['year'].value) {
		err = 'Выберите год выпуска автомобиля!';
		try { form['year'].focus(); } catch (ex) {};
	}
	if (!$('#cmavg')[0].value) {
		err = 'Выберите модель автомобиля!';
		try { $('#cmavg')[0].focus(); } catch (ex) {};
	}
	if (!$('#ccavg')[0].value) {
		err = 'Выберите марку автомобиля!';
		try { $('#ccavg')[0].focus(); } catch (ex) {};
	}
	if (err) {
		alert( err);
		return false;
	}
	return true;
};
var checkDepForm = function() {
	var err = '';
	if (!parseInt( form['new_price'].value)) {
		err = 'Укажите должным образом цену аналогичного нового авто!';
		try { form['new_price'].focus(); } catch (ex) {};
	}
	if (!form['dep_year'].value) {
		err = 'Выберите год выпуска автомобиля!';
		try { form['dep_year'].focus(); } catch (ex) {};
	}
	if (!$('#cmdep')[0].value) {
		err = 'Выберите модель автомобиля!';
		try { $('#cmdep')[0].focus(); } catch (ex) {};
	}
	if (!$('#ccdep')[0].value) {
		err = 'Выберите марку автомобиля!';
		try { $('#ccdep')[0].focus(); } catch (ex) {};
	}
	if (err) {
		alert( err);
		return false;
	}
	return true;
};
var checkTunForm = function() {
	if ((form['calc_run'].value * 1) <= 0) {
		alert( 'Укажите должным образом пробег вашего автомобиля!');
		try { form['calc_run'].focus(); } catch (ex) {};
		return false;
	}
	return true;
};
$(document).ready(function() {
	var startStep = 0;
	switch (wzStartStep) {
		case 'avg': {
			startStep = 1;
			$('#atr2').attr( 'checked', 'checked');
			$('#atr1').removeAttr( 'checked');
			break;
		};
		case 'dep': {
			startStep = 2;
			$('#atr1').attr( 'checked', 'checked');
			$('#atr2').removeAttr( 'checked');
			break;
		};
	};
	$('.currency-selector').each(function() {
		this.href = 'javascript:void(0)';
		this.onclick = function() {
			var curr = { UAH : 0, USD: 1, EUR: 2 };
			$('#calc-result-price').html( getPrice( curr[this.innerHTML.toUpperCase()]));
			$('#calc-total-price').html( getPrice( curr[this.innerHTML.toUpperCase()]));
			$('#calc-dep-price').html( getPrice( curr[this.innerHTML.toUpperCase()], true));
			var self = this;
			$('.currency-selector').each(function() {
				this.className = this.className.replace( /\s+selected/, '');
			});
			self.className += ' selected';
		};
	});
	$("#calc-wizard").css({ display: 'block' });
	$("#wzrd-loader").css({ display: 'none' });
	$("#calc-wizard").formwizard({
		back       : '.reset',
		next       : '.submit',
		textSubmit : txtDone,
		textNext   : txtNext,
		textBack   : txtBack,
		afterNext  : onStepShow,
		onCheck    : function( step) {
			switch (step[0].id) {
				case 'avg': return checkAvgForm();
				case 'dep': return checkDepForm();
				case 'tun': return checkTunForm();
			}
			return true;
		},
		startStep: startStep,
		beforeStepRender : function( step) {
			$('.currency-selector').each(function() {
				if (this.innerHTML.toUpperCase() == 'UAH') {
					this.className = this.className.replace( /(\s+selected|$)/, ' selected');
				} else {
					this.className = this.className.replace( /\s+selected/, '');
				}
			});
			if (step[0].id == 'alg') {
				$('#wzrd-next-btn').html( txtNext);
				$('#car-profile').css({ display: 'none' });
				$('#car-profile span').each(function() {
					this.innerHTML = '';
				});
				price = null;
				prevPrice = null;
				return ;
			};
			if (step[0].id == 'tun') {
				$('#wzrd-next-btn').html( txtNext);
				if (window.wizardLastDirection == 'prev' && prevPrice) {
					price = prevPrice;
					prevPrice = null;
				};
			};
			if (step[0].id == 'avg' || step[0].id == 'dep') {
				if (window.wizardLastDirection != 'prev') {
					for (var i = 0, el; el = form.elements[i]; i++) {
						if (el.tagName.toLowerCase() == 'select' || el.type.toLowerCase() == "text") {
							el.value = '';
						};
					};
				};
				$('#car-profile').css({ display: 'block' });
				return ;
			};
			if (step[0].id == 'dres') {
				var btn = $('#wzrd-next-btn');
				if ($('#gototun').attr( 'checked')) {
					btn.html( txtNext);
				} else {
					btn.html( txtDone);
				};
				var params = {};
				price = null;
				for (var i = 0, el; el = form.elements[i]; i++) {
					if (el.name && el.id != 'ccavg' && el.id != 'cmavg') {
						params[el.name] = el.value;
					};
				};
				$('#calc-dep-loader').css({ display: 'block' });
				$('#calc-dep-body').css({ display: 'none' });
				$.ajax({
					url: '/calc/index/depreciation-weight',
					data: params,
					dataType: 'json',
					success : function( result) {
						if (result.price && result.price[0].amount > 0) {
							price = result.price;
							price.notRange = true;
							$('#calc-dep-price').html( getPrice( 0));
							if (result.similar.length) {
								var html = '';
								for (var i = 0, car; car = result.similar[i]; i++) {
									html += '<li><a href="/ad/' + car.id + '" target="_blank">' +
												car.Catalog.Catalog.name + ' ' + car.Catalog.name + ' ' + car.version + ' ' +
												car.Transmission.short_name + ' ' + car.year + ' $' + formatPrice( parseInt( car.calc_price)) + 
									        '</a></li>'
									;
								}
								$('#calc-dep-advs-hdr').css({ display: 'block' });
								$('#calc-dep-advs').html( html);
							}
						} else {
							$('#calc-dep-advs-hdr').css({ display: 'none' });
						};
						$('#calc-dep-loader').css({ display: 'none' });
						$('#calc-dep-body').css({ display: 'block' });
					}
				});
				return ;
			};
			if (step[0].id == 'res') {
				var btn = $('#wzrd-next-btn');
				if ($('#gototun').attr( 'checked')) {
					btn.html( txtNext);
				} else {
					btn.html( txtDone);
				};
				var params = {};
				price = null;
				for (var i = 0, el; el = form.elements[i]; i++) {
					if (el.name && el.id != 'ccdep' && el.id != 'cmdep') {
						params[el.name] = el.value;
					};
				};
				$('#calc-result-loader').css({ display: 'block' });
				$('#calc-result-body').css({ display: 'none' });
				$('#calc-result-fail').css({ display: 'none' });
				$.ajax({
					url: '/calc/index/avg-weight',
					data: params,
					dataType: 'json',
					success : function( result) {
						$('#calc-result-loader').css({ display: 'none' });
						if (result.price && result.price[0].amount > 0) {
							price = result.price;
							price.notRange = false;
							$('#calc-result-price').html( getPrice( 0));
							
							if (result.similar.length) {
								var html = '';
								for (var i = 0, car; car = result.similar[i]; i++) {
									html += '<li><a href="/ad/' + car.id + '" target="_blank">' +
												car.Catalog.Catalog.name + ' ' + car.Catalog.name + ' ' + car.version + ' ' +
												car.Transmission.short_name + ' ' + car.year + ' $' + formatPrice( parseInt( car.calc_price)) + 
									        '</a></li>'
									;
								}
								$('#calc-result-advs-hdr').css({ display: 'block' });
								$('#calc-result-advs').html( html);
							} else {
								$('#calc-result-advs-hdr').css({ display: 'none' });
							};
							$('#calc-result-body').css({ display: 'block' });
							$('#calc-result-fail').css({ display: 'none' });
						} else {
							$('#calc-result-fail').css({ display: 'block' });
							$('#calc-result-body').css({ display: 'none' });
						};
					}
				});
				return ;
			}
			if (step[0].id == 'tot') {
				$('#wzrd-next-btn').html( txtDone);
				$('#calc-total-loader').css({ display: 'block' });
				$('#calc-total-body').css({ display: 'none' });
				var params = {};
				var alg = form['alg_type'];
				for (var i = 0, s = alg.length; i < s; i++) {
					if (alg[i].checked) {
						alg = alg[i].value;
						break;
					}
				};
				for (var i = 0, el; el = form.elements[i]; i++) {
					if ((alg == 'avg' && el.name && el.id != 'ccdep' && el.id != 'cmdep')
						||
						(alg == 'dep' && el.name && el.id != 'ccavg' && el.id != 'cmavg')
					) {
						if (el.type && (el.type.toLowerCase() == 'checkbox' || el.type.toLowerCase() == 'radio')) {
							if (el.checked) params[el.name] = el.value;
						} else {
							params[el.name] = el.value;
						};
					};
				};
				if (price.notRange) {
					params.year = form['dep_year'].value;
					params.catalog_id = $('#cmdep')[0].value;
				} else {
					params.catalog_id = $('#cmavg')[0].value;
				};
				params.price = price[0].amount;
				params.currency_id = price[0].id;
				prevPrice = price;
				$.ajax({
					url: '/calc/index/param-price',
					data: params,
					dataType: 'json',
					success : function( result) {
						price = result;
						price.notRange = false;
						$('#calc-total-price').html( getPrice( 0));
						$('#calc-total-loader').css({ display: 'none' });
						$('#calc-total-body').css({ display: 'block' });
					}
				});
				return ;
			}
		}
	});
	$("#calc-wizard").attr( 'onsubmit', 'return false');
});
