var Matrix = function() {
	this.title = true;
	this.logo = true;
	this.footer = true;
	this.stepMenu = true;
	this.showSeparator = true;

	this.html = [];
	this.data = null;
	this.interval = null;
}

Matrix.prototype.getData = function() {
	if (this.data !== null) {
		this.ini();
		return;
	}
	var params = [];
	params.push('modelID='+ Car.modelID);
	params.push('DBnum='+ Configurator.DBnum);
	params.push('regionID='+Configurator.regionID);
	params.push('marketID='+Configurator.marketID);
	params.push('outletID='+ Configurator.outletID);
	params.push('dealerID='+ Configurator.dealerID);
	if (Car.customerID) params.push('customerID='+ Car.customerID);
	if (Car.customer_type) params.push('customer_type='+ Car.customer_type);
	//alert(params.join('&'));
	ajax('/en/daction/matrix/?XDEBUG_PROFILE=1', 'Configurator.matrix.getDataHandler('+ Configurator.onlyData +')', params.join('&'));
	//ajax('/en/daction/matrix/?XDEBUG_PROFILE=1', 'Configurator.matrix.getDataHandler('+ Configurator.onlyData +')', params.join('&'));
}

Matrix.prototype.getDataHandler = function(onlyData) {
	try {
		this.data = eval('('+ajaxReq.responseText+')');
	} catch(e) {
		document.body.innerHTML = '<pre>'+ajaxReq.responseText;
		return;
	}
	if (onlyData === false) this.ini();
}

Matrix.prototype.ini = function() {
	this.interval = null;
	this.html = [];

	this.html.push('<table align="center" class="content"><tr><td class="content_cell">');
	this.html.push(Interface.showStepButtons());

	var so = this.data.engines.length + 1;
	var so2 = this.data.gears.length;
	var w = 0;
	this.html.push('<br><div class="relative"><div class="sv_popup" id="sv_popup"');
		this.html.push(' onmouseout="if (Configurator.matrix) {Configurator.matrix.interval = setInterval(function() {if (Configurator.matrix) Configurator.matrix.closeSv();}, 200);}"');
		this.html.push(' onmouseover="clearInterval(Configurator.matrix.interval); Configurator.matrix.interval = null;"');
	this.html.push('></div></div>');
	this.html.push('<table class="matrix_table">');
	for (var i = 0; i < so; i++) {
		this.html.push('<tr>');
		if (!i) {
			this.html.push('<td class="matrix_pic"><img src="/images/titles/'+Car.modelID+'.gif" alt="Volvo"/></td>');
			if ((i + 1) < so) this.html.push('<td class="space">&nbsp;</td>');
		} else {
			this.html.push('<td class="engine'+this.data.engines[(i - 1)].fuel_id+'" align="center">');
				this.html.push('<table width="90%"><tr><td style="font-size: 11px;"><b>'+this.getEngineByNum((i - 1)));
				this.html.push('</b></td><td align="right" style="font-size: 11px;">('+this.data.engines[(i - 1)].id+')</td></tr></table>');
			this.html.push('</td><td class="space" />');
		}
		for (var n = 0; n < so2; n++) {
			if (!i) {
				this.html.push('<td><table width="100%"><tr><td class="matrix_g_l"/>');
				this.html.push('<td class="matrix_g_c" align="center"><table class="gear_table"><tr><td align="center">');
					this.html.push('<b>'+ Interface.translate('gear_drive_'+this.data.gears[n].drive) +'<br>');
					this.html.push(Interface.translate('gear_type_'+this.data.gears[n].type) +'<br>');
					this.html.push(Interface.translate('gear_gears_'+this.data.gears[n].gears.toLowerCase()) +'</b></td></tr>');
					this.html.push('<tr class="h20"><td align="center" style="vertical-align: top;">('+ this.data.gears[n].id +')</td></tr></table>');
				this.html.push('</td><td class="matrix_g_r"/></tr></table></td>');
				this.html.push('<td class="space">&nbsp;</td>');
			} else {
				w = Math.round(444/so2);
				this.html.push('<td class="matrix_field" align="center" style="width: '+w+'px;">');
				if (isset(this.data.depend[this.data.engines[(i - 1)].id][this.data.gears[n].id])) {
					this.html.push('<img id="'+ this.data.engines[(i - 1)].id +'_'+ this.data.gears[n].id +'" src="/_/matrix_plus.jpg" class="pointer" alt="more" ');
					this.html.push('onmouseover="clearInterval(Configurator.matrix.interval); Configurator.matrix.interval = null; Configurator.matrix.showSv(\''+ this.data.engines[(i - 1)].id +'\', \''+ this.data.gears[n].id +'\', '+ n +', '+ (i - 1) +');"/>');
				}
				this.html.push('</td><td class="space" />');
			}
		}
		this.html.push('</tr><tr><td class="space" colspan="'+(so2*2+1)+'"/></tr>');
	}
	this.html.push('</table>');

	this.html.push('</td>');
	this.html.push(Interface.showRightMenu());
	this.html.push('</tr></table>');

	$('content').innerHTML = this.html.join('');
	Interface.loading(true);
}

Matrix.prototype.getEngineByNum = function(num) {
	return Interface.translate('fuel'+this.data.engines[num].fuel_id)+' '+Interface.translate('emblem'+this.data.engines[num].id)+' '+
		+this.data.engines[num].hp+Interface.translate('engine_hp')+' '+this.data.engines[num].nm+'Nm';
}

Matrix.prototype.getEngineById = function() {
	var so = this.data.engines.length;
	for (var i = 0; i < so; i++) {
		if (this.data.engines[i].id == Car.engineID) return this.getEngineByNum(i);
	}
}

Matrix.prototype.getEngineData = function() {
	var so = this.data.engines.length;
	for (var i = 0; i < so; i++) {
		if (this.data.engines[i].id == Car.engineID) {
			//alert(this.data.engines[i].fuel_id);
			return {"fuel_id":this.data.engines[i].fuel_id,
			"emblem":this.data.engines[i].id, "nm":this.data.engines[i].nm, "hp":this.data.engines[i].hp,
			"cyl":this.data.engines[i].cyl, "disp": this.data.engines[i].disp, "code": this.data.engines[i].code};

		}
	}
}

Matrix.prototype.getCO2 = function() {
	return this.data.depend[Car.engineID][Car.gearboxID][Car.svID].co2 +' '+ Interface.translate('g_per_km');
}

Matrix.prototype.getFC = function() {
	return this.data.depend[Car.engineID][Car.gearboxID][Car.svID].fc +' '+ Interface.translate('l_per_100km');
}

Matrix.prototype.getGearboxById = function() {
	var so = this.data.gears.length;
	for (var i = 0; i < so; i++) {
		if (this.data.gears[i].id == Car.gearboxID)
			return  Interface.translate('gear_drive_'+this.data.gears[i].drive) +' '+
					Interface.translate('gear_type_'+this.data.gears[i].type) +' '+
					Interface.translate('gear_gears_'+this.data.gears[i].gears.toLowerCase());
	}
}

Matrix.prototype.getGearboxData = function() {
	var so = this.data.gears.length;
	for (var i = 0; i < so; i++) {
		if (this.data.gears[i].id == Car.gearboxID) {
			return {"drive":this.data.gears[i].drive, "type":this.data.gears[i].type, "gears":this.data.gears[i].gears};
		}
	}
}

Matrix.prototype.showSv = function(engineID, gearID, x, y) {
	var o = $('sv_popup');
	var html = [];
	html.push('<table>');
	var so = this.data.engines.length;
	var so2 = this.data.gears.length;
	var i = 0;
	for (el in this.data.depend[engineID][gearID]) {
		html.push('<tr class="matrix_sv_cell"');
			html.push(' onmouseover="this.style.color=\'#fff\'; this.style.backgroundColor=\'#6D7E8E\';"');
			html.push(' onmouseout="this.style.color=\'#3e3e3e\'; this.style.backgroundColor=\'#fff\';"');
			html.push(' id="'+ engineID +'_'+ gearID +'_'+ el +'"');
			html.push(' onclick="Car.engineID = \''+ engineID +'\'; Car.gearboxID = \''+ gearID +'\'; Car.svID = \''+ el +'\'; ');
			html.push(' Car.sv_category_id = '+this.data.depend[engineID][gearID][el].sv_category_id+'; Car.sv = \''+this.data.depend[engineID][gearID][el].name+'\';');
			html.push(' Car.mc = '+ this.data.depend[engineID][gearID][el].mc +';');
			//html.push(' Price.MSRP = parseInt('+ this.data.depend[engineID][gearID][el].price +', 10);');
			html.push(' Configurator.currentStep = \'standartOptions\'; if (Configurator.matrix) Configurator.matrix.closeSv(); Configurator.ini();"');
		html.push('><td><nobr><b>('+ el +') '+ this.data.depend[engineID][gearID][el].name +'</b></nobr></td><td><div class="w50"></div></td>');
		html.push('<td><nobr>'+ Price.defaultCurrency +' '+ Price.getPrice(this.data.depend[engineID][gearID][el].price) +'</nobr>&nbsp;</td></tr>');
		i++;
	}
	html.push('</table>');
	o.innerHTML = html.join('');
	o.style.visibility = 'hidden';
	o.style.display = 'block';

	var temp = 444/so2;
	var w = parseInt(o.clientWidth, 10);
	o.style.left = Math.round((x*temp +(temp/2) + 210) - (x == (so2 - 1) ? (w - temp/2) : 0) )+'px';
	o.style.top = (y*47 + 110)+'px';
	o.style.visibility = 'visible';
}

Matrix.prototype.closeSv = function() {
	if (this.interval !== null && $('sv_popup')) $('sv_popup').style.display = 'none';
}

