window.onresize = function(e) {
	$('.corn').corner('15px');
}

window.dump=function(e,a,f){var s='['+typeof e+']={\n';var v='',t='';a=a||true;f=f||false;for(p in e){v=e[p];t=typeof v;if((t=='function')&&(!f))v='[function]';if((t=='string')&&(!f)&&(v.length>=50))v='[long value]';s+='  ['+t+'] '+p+' = '+v+';\n';}s+='}';if(typeof a=='string'&&a=='print'){document.write('<pre>'+s+'</pre>');return true;}if(a){alert(s);return true;}else return str_dump;};

function num_format(value) {
	value = Math.round(value);
	var s = '' + value, n = 0, res = '';
	for (var i = (s.length - 1); i >= 0; i--) {
		res = ((n++%3) == 2? ' ': '') + s.charAt(i) + res;
	}
	return res;
}

function failure() {
	alert('Error');
}

function _reset(objects) {
	for(var i = 0; i < objects.length; i++) {
		var o = document.getElementById(objects[i]);
		if (!o) continue;
		var tN = o.tagName.toUpperCase();
		if (tN == 'INPUT') {
			o.value = ''; 
		} else if (tN == 'SELECT') {
			o.options.length = 0;
		} else {
			o.innerHTML = '&nbsp;';
		}
	}
}

function load_model(maker_id) {
	_reset(['model', 'grade', 'span_power', 'year', 'result']);
	var model			= document.calc.model.options;
	model[0]			= new Option('< модель >', 0, false, false);
	if (maker_id == 0) return;
	model_array			= model_str.split(';');
	for(i = 0; i < model_array.length; i++) {
		var model_data	= model_array[i].split(':');
		if(model_data[0] == maker_id) {
			model[model.length] = new Option(model_data[2], model_data[1], false, false);
		}
	}
}

var grades = {};
grades.load = function (model_id, func) {
	func = func || false;
	_reset(['grade', 'span_power', 'year', 'result']);
	this.reload([{value: 0, text: '< загрузка >'}]);
	$.getJSON(url.grades, {model: model_id}, func? function(data) { grades.success(data); func('grades'); }: grades.success);
}
grades.success = function (data) {
	_reset(['grade', 'span_power', 'year', 'result']);
	grades.reload(data);
}
grades.add_option = function(index, data) {
	var obj = document.getElementById('grade');
	obj.options[obj.options.length] = new Option(data.text, data.value);
}
grades.reload = function (gradesArr) {
	$(gradesArr).each(this.add_option);
}

var powers = {};
powers.load = function(grade, func) {
	func = func || false;
	_reset(['span_power', 'year', 'result']);
	$('#span_power').html('загрузка');
	$.getJSON(url.power, { grade: grade }, func? function(data) { powers.success(data); func('powers'); }: powers.success);
}
powers.success = function (data) {
	var buf = ''; data = $(data);
	if (data.size() > 1) {
		buf	+= '<select class="text" name="power" id="power">';
		for (var i = 0; i < data.size(); i++) {
			buf += '<option value="' + data[i].power + '">' +
				+ data[i].power + ' л.с.</option>';
		}
		buf	+= '</select>';
	} else {
		buf = '<input type="text" id="power" name="power" value="' 
			+ (data.size() == 1? data[0].power: '')
			+ '" size="3" /> л.с.';
	}
	$('#span_power').html(buf);
}

var tamoj = {};
tamoj.calculate = function() {
	var maker = $('#maker').val(), model = $('#model').val(),
		grade = $('#grade').val(), year = $('#year').val(),
		fuel = $('#fuel_g').attr('checked')? 'g': 'd',
		d = new Date(), max_y,
		power = ($('#power').size() > 0)? $('#power').val(): 0;
	max_y = d.getYear() < 1000? d.getYear() + 1900: d.getYear();
	if (maker <= 0) {
		alert('Необходимо указать производителя автомобиля!');
		$('#maker').focus();
	} else if (model <= 0) {
		alert('Необходимо указать модель автомобиля!');
		$('#model').focus();
	} else if (grade == '' || grade == 0) {
		alert('Необходимо указать комплектацию автомобиля!');
		$('#grade').focus();
	} else if (year < 1950 || year > max_y) {
		alert('Необходимо правильно указать год выпуса автомобиля!');
		$('#year').focus();
	} else if (power <= 20 || power > 1000) {
		alert('Необходимо правильно указать мощность двигателя автомобиля (в л.с.)!');
		$('#power').focus();
	} else {
		$('#result').html('Подождите пожалуйста. Идут вычисления...');
		$.getJSON(url.calc, { maker: maker, model: model, grade: grade, year: year,
					power: power, fuel: fuel }, tamoj.calculate_success)
	}
	$(window).trigger('resize');
	return false;
}
tamoj.calculate_success = function(json) {
	json = json || { error: true, message: 'Faild' }, i, j = 0;
	if (!json.error && (typeof json != 'undefined')) {
		var r = $('#result');
		r.hide();
		Calc_TableGenerator.set_data(json);
		var html = Calc_TableGenerator.generate();
		if (html == '') {
			html = '<table><tr><td>В указанном году этот автомобиль не выпускался</td></tr></table>';
		}
		r.html(html);
		r.show();
	} else {
		alert('Error');
	}
	$(window).trigger('resize');
}

var end = {};

end.calculate = function() {
	var maker = $('#maker').val(), model = $('#model').val(),
		grade = $('#grade').val(), year = $('#year').val(),
		auc = $('#auc').val(), city = $('#city').val(),
		price = $('#price').val(),
		fuel = $('#fuel_g').attr('checked')? 'g': 'd',
		d = new Date(), max_y,
		power = ($('#power').size() > 0)? $('#power').val(): 0;
	max_y = d.getYear() < 1000? d.getYear() + 1900: d.getYear();
	if (maker <= 0) {
		alert('Необходимо указать производителя автомобиля!');
		$('#maker').focus();
	} else if (model <= 0) {
		alert('Необходимо указать модель автомобиля!');
		$('#model').focus();
	} else if (grade == '' || grade == 0) {
		alert('Необходимо указать комплектацию автомобиля!');
		$('#grade').focus();
	} else if (year < 1950 || year > max_y) {
		alert('Необходимо правильно указать год выпуса автомобиля!');
		$('#year').focus();
	} else if (power <= 20 || power > 1000) {
		alert('Необходимо правильно указать мощность двигателя автомобиля (в л.с.)!');
		$('#power').focus();
	} else if (auc <= 0) {
		alert('Необходимо выбрать аукцион, с которого приобритается автомобиль!');
		$('#auc').focus();
	} else if (price <= 1000) {
		alert('Неверно указана стоимость автомобиля в Японии!');
		$('#price').focus();
	} else {
		$('#result').html('Подождите пожалуйста. Идут вычисления...');
		$.getJSON(url.calc, { maker: maker, model: model, grade: grade, year: year,
					power: power, fuel: fuel, auc: auc, city: city, price: price },
					end.calculate_success)
	}
	$(window).trigger('resize');
	return false;
}
end.calculate_success = function(json) {
	json = json || { error: true, message: 'Faild' }, i, j = 0;
	if (!json.error && (typeof json != 'undefined')) {
		var r = $('#result');
		r.hide();
		Calc_TableGenerator.set_data(json);
		var html = Calc_TableGenerator.generate();
		if (html == '') {
			html = '<table><tr><td>В указанном году этот автомобиль не выпускался</td></tr></table>';
		}
		r.html(html);
		r.show();
	} else {
		alert('Error');
	}
	$(window).trigger('resize');
}

/* Calc_TableGenerator */
var Calc_TableGenerator = { data: [], content: '', step: 'odd' /* or even */, itogo: '' };
Calc_TableGenerator.set_data = function(data) {
	this.data = data;
};
Calc_TableGenerator.add_row_th = function() {
	this.content += '<tr class="fields">\n' +
		'\t<th>Платёж</th>\n' +
		'\t<th>Ставка</th>\n' +
		'\t<th class="val">Сумма (руб.)</th>\n' +
		'\t<th class="val">Сумма (дол.)</th>\n' +
		'</tr>\n';
};
Calc_TableGenerator.add_row = function(row) {
	this.content += '<tr class="' + this.step + ' ' + this.itogo + '">\n' +
		'\t<td>' + row.name + '</td>\n' +
		'\t<td>' + row.msg + '</td>\n' +
		'\t<td class="val">' + (row.rur != null? num_format(row.rur) + ' руб.': '') + '</td>\n' +
		'\t<td class="val">' + (row.usd != null? num_format(row.usd) + ' $': '') + '</td>\n' +
		'</tr>\n';
	this.step = this.step == 'odd'? 'even': 'odd';
};
Calc_TableGenerator.generate_rows = function(data, notTh) {
	var num = 0; notTh = notTh || false;
	for (key in data) {
		if (key == 'yur' || key == 'fiz') {
			continue;
		}
		if (this.is_row(data[key])) {
			num == 0 && !notTh? this.add_row_th(): '';
			this.itogo = key == 'itogo'? key: '';
			this.add_row(data[key]);
			num++;
		}
	}
}
Calc_TableGenerator.is_row = function(row_data) {
	return (typeof row_data.name != 'undefined'
		&& typeof row_data.msg != 'undefined'
		&& typeof row_data.rur != 'undefined'
		&& typeof row_data.usd != 'undefined');
};
Calc_TableGenerator.generate = function() {
	this.content = '';
	if (this.data.count > 0) {
		this.content += '<table>\n';
		for (var i = 0; i < this.data.count; i++) {
			if (typeof this.data[i].yur == 'undefined' || typeof this.data[i].fiz == 'undefined') {
				continue;
			}
			this.content += '<tr class="caption">\n\t<th colspan="4">'
				+ this.data[i].name + '</th>\n</tr>\n';
			this.generate_rows(this.data[i]);
			this.content += '<tr class="caption">\n\t<th colspan="4">'
				+ 'Расчёт для юридических лиц'
				+ '</th>\n</tr>\n';
			this.generate_rows(this.data[i].yur);
			this.content += '<tr class="caption">\n\t<th colspan="4">'
				+ 'Расчёт для физических лиц'
				+ '</th>\n</tr>\n';
			this.generate_rows(this.data[i].fiz);
		}
		this.content += '<tr class="caption">\n\t<th colspan="4">'
			+ 'Курсы валют <span class="help" title="Центральный банк Российской Федерации">ЦБ РФ</span>'
			+ '</th>\n</tr>\n';
		var cbrf = {
			usd: { name: '1 доллар США', msg: this.data.USD + ' руб.', usd: null, rur: null },
			jpy: { name: '100 японских йен', msg: this.data.JPY + ' руб.', usd: null, rur: null },
			eur: { name: '1 евро', msg: this.data.EUR + ' руб.', usd: null, rur: null }
		};
		this.generate_rows(cbrf, true);
		this.content += '</table>\n\n';
	}
	return this.content;
};
/* :: Calc_TableGenerator */

