//sharepoint ambienti
//var cmsPath = 'http://93.62.229.136';//integrazione
//var cmsPath = 'https://auth.test2.fiat.com';//certificazione
//var cmsPath = 'https://auth.prod2.fiat.com';//produzione
//var cmsPath = 'http://prod2.fiat.it';//produzione
var cmsPath = '';//panacea?

/* var url = window.location.href;
var urlSplit = url.split('//')[1];
var secUrl = urlSplit.split('/')[0];
var cmsPath = "://" + secUrl;
cmsPath = ( cmsPath.lastIndexOf(".it") ) ? cmsPath + "/cmsit/" : cmsPath + "/it/cmsit/"; */
//la url da chiamare va composta prendendo il valore della variabile fiat_lang e fiat market

var testCar = {
	market: 'it',
	language: 'it',
	modelId: '',
	modelDesc: '',
	versionId: '',
	versionDesc: '',
	carCode: '',
	colorExt: '',
	colorInt: '',
	price:'',
	pricePromo:'',
	selectedOpt: '|'
};
var testMvs = {
	init: function(){
		$('div.test_mvs input').val('');
		testMvs.model();
	},
	model:function(){
		cc.getModel(testCar, testMvs.printModel);
	},
	printModel: function(param, modelDesc, allModels){
		var modelList='';
		for (var i=0, len=allModels.length; i<len; i++) {
			//modelList += '<option rel="'+allModels[i].code+'">'+allModels[i].name+'</option>';
			modelList += '<option value="'+allModels[i].code+'">'+allModels[i].name+'</option>';
		}
		$('select.select_model').append(modelList);
		
		//$('select.select_model option').click(function(){
		$('select.select_model').change(function(){
			var _this = $(this); 
			//testCar.modelId = _this.attr('rel');
			testCar.modelId = _this.val();
			//testCar.modelDesc = _this.html();
			testCar.modelDesc = _this.children('option:selected').text();
			$('div.test_mvs input').val('');
			$('select.select_version').html('<option>----- Versione -----</option>');//reset della select
			$('select.select_engine').html('<option>----- Motore | CarCode -----</option>');//reset della select
			testMvs.version();
		})
	},
	version: function(){
		cc.getVersions(testCar, testMvs.printVersion);
	},
	printVersion: function(param, versionDesc, allVersions){
		var versionList='';
		for (var i=0, len=allVersions.length; i<len; i++) {
			//versionList += '<option rel="'+allVersions[i].code+'">'+allVersions[i].description+'</option>';
			versionList += '<option value="'+allVersions[i].code+'">'+allVersions[i].description+'</option>';
		}
		$('select.select_version').append(versionList);
		//$('select.select_version option').click(function(){
		$('select.select_version').change(function(){
			var _this = $(this); 
			//testCar.versionId = _this.attr('rel');
			testCar.versionId = _this.val();
			//testCar.versionDesc = _this.html();
			testCar.versionDesc = _this.children('option:selected').text();
			$('div.test_mvs input').val('');
			$('select.select_engine').html('<option>----- Motore | CarCode -----</option>');//reset della select
			testMvs.engine();
		})
	},
	engine: function(){
		cc.getTrim(testCar, testMvs.printEngine);
	},
	printEngine: function(param, engineId, engineDesc, gearId, gearDesc, fuelId, fuelDesc, driveId, driveDesc, price, priceNoVat, pricePromo, allFuels, allTrims){
		var engineList='';
		for (var i=0, len=allTrims.length; i<len; i++) {
			//engineList += '<option rel="'+allTrims[i].id+'">'+allTrims[i].engineDescription+' | '+allTrims[i].id+'</option>';
			//engineList += '<option rel="'+allTrims[i].id+'">'+allTrims[i].description+' | '+allTrims[i].id+'</option>';
			engineList += '<option value="'+allTrims[i].id+'">'+allTrims[i].description+' | '+allTrims[i].id+'</option>';
		}
		$('select.select_engine').append(engineList);
		//$('select.select_engine option').click(function(){
		$('select.select_engine').change(function(){
			var _this = $(this); 
			//testCar.carCode = _this.attr('rel');
			testCar.carCode = _this.val();
			$('div.test_mvs input').val('');
		})
	},
	build: function(){
		modelCar = testCar;
		$('a.configure').trigger('click');
		$('div.test_mvs').hide();
	},
	printMvs: function(){
		$('div.test_mvs input').val(testCar.modelDesc+' '+testCar.versionDesc+' '+testCar.carCode);
	}
};

var currentCar = {
	market: fiat_market,
	language: fiat_lang,
	superModelId: '',
	modelId: '',
	modelDesc: '',
	versionId: '',
	versionDesc: '',
	carCode: '',
	colorExt: '',
	colorInt: '',
	stdWheels: '',
	price:'',
	pricePromo:'',
	selectedOpt: '',
	numOpt: 0,
	counter: 0
};

var modelCar = {
	market: fiat_market,
	language: fiat_lang,
	superModelId: '',
	modelId: '',
	modelDesc: '',
	versionId: '',
	versionDesc: '',
	carCode: '',
	colorExt: '',
	colorInt: '',
	price:'',
	pricePromo:'',
	selectedOpt: ''
};

function HandleCar (car) {
	var _self = this;//storing this in a var to always access the object in the function
	this.bg = '';
	this.core = '';
	this.modelUpdated = true;
	this.versionUpdated = true;
	//this.priceUpdated = true;
	this.landingTrim = null;
	//this.landingDescs = [];
	//this.landingCodes = [];
	this.init = function (mvsDescs, mvsCodes, from) {//at landing, populate current car from hidden inputs served by BE
		car.market = fiat_market;
		car.language = fiat_lang;
		car.superModelId = statusHandler.supermodel;//the supermodel is always the same
		this.landingTrim = $('input.landing_trim');
		
		switch (from) {
			case 'model':
				_self.copy();
			break;
			case 'COA':
				car.modelId = mvsCodes[0];
				car.versionId = mvsCodes[1];
				car.carCode = mvsCodes[2];
				car.colorExt = mvsCodes[3];
				car.colorInt = mvsCodes[4];
				
				//car.selectedOpt = car.colorExt+'|'+car.colorInt;//ext and int colors; wheels added by checkConfigConsistency
				//car.selectedOpt = car.colorExt;
				car.selectedOpt = car.colorInt;
				
				cc.getModel(currentCar, myPanel.printModel);
				//cc.getVersions(currentCar, myPanel.printVersion);//obsolete
				handleMpFlags.init();
			break;
			case 'compare':
				car.modelDesc = mvsDescs[0];
				car.modelId = mvsCodes[0];
			break;
			default:
				car.modelDesc = mvsDescs[0];
				car.versionDesc = mvsDescs[1];
				car.modelId = mvsCodes[0];
				car.versionId = mvsCodes[1];
				car.carCode = mvsCodes[2];
				car.colorExt = mvsCodes[3];
				car.colorInt = mvsCodes[4];
				//car.colorInt = '144#-';//sharepoint test
				
				
				//car.selectedOpt = car.colorExt+'|'+car.colorInt;//ext and int colors; wheels added by checkConfigConsistency
				//car.selectedOpt = car.colorExt;//int colors and wheels added by checkConfigConsistency
				car.selectedOpt = car.colorInt;//wheels added by checkConfigConsistency
				
				handleMpFlags.init();
		}
		
		/* if (fromModel) {//if it comes from model car
		} else {
			
			if (this.modelUpdated) {
				//this.modelUpdated = false;
			} else {
				car.modelDesc = mvsDescs[0];
			}
			if (this.versionUpdated) {
				cc.getVersions(currentCar, myPanel.printVersion);
			} else {
				car.versionDesc = mvsDescs[1];
			}
			
			
			car.modelId = mvsCodes[0];
			car.versionId = mvsCodes[1];
			car.carCode = mvsCodes[2];
			car.colorExt = mvsCodes[3];
			car.colorInt = mvsCodes[4];
			
			car.selectedOpt = car.colorExt+'|'+car.colorInt;//ext and int colors; wheels added by checkConfigConsistency
			
			handleMpFlags.init();
		} */
		
		
		this.initialized = true;
	};
	this.clear = function(what){//market and language are set only when landing at the page
		car.modelId = '';
		car.modelDesc = '';
		car.versionId = '';
		car.versionDesc = '';
		car.carCode = '';
		car.colorExt = '';
		car.colorInt = '';
		car.price = '';
		car.stdWheels = '';
		//this.modelUpdated = true;
		//this.versionUpdated = true;
		//this.priceUpdated = true;
		switch(what) {
			case 'model':
				fiatCom.filledModelPanel = false;
				modelTabs.tabControls.eq(0).find('span').empty();
				modelTabs.tabContent.eq(0).find('div.engine').empty();
				modelTabs.tabContent.eq(0).find('ul.colors').empty();
				
			break;
			case 'current':
				fiatCom.filledMyPanel = false;
				//my panel: model desc, versiondesc, prezzo di partenza
				//	my selections: colore est, colori int, ruote, svuota tutti gli altri
				//	lista standard
				myPanelInnerTabs.tabContent.eq(0).children('div.opt_cat').empty();
				//$.log('prima'+$('ul.flags.cc').html());
				$('ul.flags.cc').empty();
				//$.log('dopo'+$('ul.flags.cc').html());
				$('div.opt_panel').remove();
				fiatCom.filledExt = false;//clearing flags and panels
				fiatCom.filledInt = false;
				
				fiatCom.readyPack = false;
				fiatCom.filledPack = false;
				fiatCom.filledPackPanel = false;
				handleOpt.configFlagsPack = null;
				
				fiatCom.readyColorExt = false;
				fiatCom.filledColorExt = false;
				
				fiatCom.readyColorInt = false;
				fiatCom.filledColorInt = false;
				
				fiatCom.filledTechSpec = false;
				
				finitoPage.container.find('li.finito_pack div.optional').remove();//clearing finito page
				finitoPage.container.find('div.finito_outside ul.summary').children('li').not('[rel="$"], [rel="-"]').remove();
				finitoPage.container.find('div.finito_inside ul.summary').children('li').not('[rel="#"]').remove();
				finitoTabs.tabContent.empty();
				
				//reset wheels:
				myPanel.myWheels.find('div.img_wrap img').hide();
				myPanel.myWheels.find('div.txt_wrap div.description').html('');
				$('div.finito_outside ul.summary').find('li[rel="-"] > div').html('');
			break;
			default:
		}
	};
	this.copy = function(){//copy model car to current car
		currentCar.modelId = modelCar.modelId;
		currentCar.modelDesc = modelCar.modelDesc;
		currentCar.versionId = modelCar.versionId;
		currentCar.versionDesc = modelCar.versionDesc;
		currentCar.carCode = modelCar.carCode;
		currentCar.colorExt = modelCar.colorExt;
		currentCar.colorInt = modelCar.colorInt;
		currentCar.price = modelCar.price;
		currentCar.pricePromo = modelCar.pricePromo;
		currentCar.selectedOpt = modelCar.selectedOpt;
	};
	this.initRedraw = function(){
		//$.log('dentro initredraw');
		//currentCar.selectedOpt='4RR|433|400';
		//4RR = linea e stile - Calotte specchi esterni cromate
		//433 = cerchioni - Cerchi in lega da 15" a 9 razze con pneum. 185/55 R15 non cat.
		//400 = comfort-funzionalita' - Tetto apribile elettrico SkyDome
		//cms.getOpt(car.carCode);
		switch (cms.type){
			case 1://configuratore
				//$.log('de');
				//if (statusHandler.current == 0) {
					//$.log('ma de');
					//$('div.layers').append(fiatCom.loadingCC);
					$('div.layers').after(fiatCom.loadingCC);
				//}
			break;
			case 2://zoom
				
			break;
			default:
		}
		cms.getOpt(currentCar, handleOpt.initLanding);//should be distinguished between modelCar and currentCar
	};
	this.redraw = function(){
		fiatCom.imgCounter=0;
		cms.imgLayer = [];
		
		switch (statusHandler.current){
			case 0://model page
			case 1://outside
				$('div.model_outside').find('div.layers').clone(true,true).removeClass('layers').addClass('layers_old').appendTo('div.model_outside');
			break;
			case 2://inside
				$('div.inside').find('div.layers').clone(true,true).removeClass('layers').addClass('layers_old').appendTo('div.inside');
			break;
		}
		//$('div.layers').after(fiatCom.loadingCC);
		
		//https://93.62.229.136/PCResources/1000/00/1981/1981_bg_1.jpg
		switch (statusHandler.current) {
			case 0://model page uses same divs as currentcar to draw modelcar
			case 1://outside
				if(cms.type==1){//configurator
					//$('div.layers').hide();
					var container = 'div.model_outside';
					this.bg = cmsPath+'/PCResources/'+fiat_marketcode+'/'+fiat_brandcode+'/'+currentCar.modelId+'/'+currentCar.modelId+'_bg_'+statusHandler.carViewExt+'.jpg';//to be modified
					this.core = cmsPath+'/PCResources/'+fiat_marketcode+'/'+fiat_brandcode+'/'+currentCar.modelId+'/'+currentCar.versionId+'/base/'+currentCar.modelId+currentCar.versionId+'_b_'+statusHandler.carViewExt+'.png';//to be modified
					$('div.above_wider img.ext').attr({'src':_self.bg});//background image
					$(container).find('div.layers').find('img:eq(0)').attr({'src':_self.core});//core image
					$(container).find('div.layers > img').not('img:eq(0)').remove();//reset all layer images except core one
				}
				if(cms.type==2){//zoom
					this.bg = cmsPath+'/PCResources/'+fiat_marketcode+'/'+fiat_brandcode+'/'+currentCar.modelId+'/'+currentCar.modelId+'_bgz_'+statusHandler.carViewExt+'.jpg';//to be modified
					this.core = cmsPath+'/PCResources/'+fiat_marketcode+'/'+fiat_brandcode+'/'+currentCar.modelId+'/'+currentCar.versionId+'/base/'+currentCar.modelId+currentCar.versionId+'_b_z_'+statusHandler.carViewExt+'.png';//to be modified
				}
			break;
			case 2://inside
				var container = 'div.inside';
				var colorInt = currentCar.colorInt.replace('#','@');
				//this.core = fiat_respath+'img/configurator/cars/'+currentCar.modelId+'/'+currentCar.versionId+'/base_int_'+statusHandler.carViewInt+'.jpg';//to be modified
				this.core = cmsPath+'/PCResources/'+fiat_marketcode+'/'+fiat_brandcode+'/'+currentCar.modelId+'/'+currentCar.versionId+'/'+currentCar.carCode+'/internal/'+colorInt+'/'+currentCar.carCode+'_'+colorInt+'_i_'+statusHandler.carViewInt+'.png';
				//alert('');
				$('div.above_wider img.int').attr({'src':_self.core});
				if(cms.type==1){//configurator
					$(container).find('div.layers > img').remove();//reset all images
				}
			break;
		}
		
		if(cms.type==2){//zoom
			$('div.zoom div.dragging').html('');
		}
		var optList = currentCar.selectedOpt.split('|');
		//$.log('currentCar.selectedOpt: '+currentCar.selectedOpt);
		currentCar.numOpt = optList.length;
		currentCar.counter = 0;
		//$.log(optList);
		for(var i=0, len=optList.length; i<len; i++){
			cms.opt = optList[i];
			//cms.type = 1;// configurator - zoom - viewPanel
			//alert(cms.opt);
			cms.getOptHandler(cms.opt);
		}
		
/* 		switch (statusHandler.current) {
			case 0://model page
			case 1://outside
				var container = 'div.model_outside';
			break;
			case 2://inside
				var container = 'div.inside';
			break;
		} */
		
		var totImg = 0;
		//$.log('fiatCom.imgCounter: '+fiatCom.imgCounter);
		if(cms.type==1){//configurator
			//$.log($('div.model_outside').find('div.layers').html());
/* 			switch (statusHandler.current) {
				case 0://model page
				case 1://outside
					$('div.model_outside').find('div.layers').clone(true,true).removeClass('layers').addClass('layers_old').appendTo('div.model_outside');
				break;
				case 2://inside
					$('div.inside').find('div.layers').clone(true,true).removeClass('layers').addClass('layers_old').appendTo('div.inside');
				break;
			} */
			for(var i=0, len=cms.imgLayer.length; i<len; i++){//ciclo sugli strati
				if(cms.imgLayer[i] != undefined){
					for(var j=0, l=cms.imgLayer[i].length; j<l; j++){//ciclo sulle immgini in ogni strato
						//$.log('img2: '+cms.imgLayer[i][j]);
						totImg++;
						//var _image = new Image();
						var _image = '<img src="'+cmsPath+cms.imgLayer[i][j]+'" alt="" style="z-index:'+i+'"/>';
						//_image.src = cmsPath+cms.imgLayer[i][j];
						//_image.style = "z-index:"+i;
						//var _this = cms.imgLayer[i][j];
						
						 //_this.load( imageLoaded);

						if( $(_image).complete ) {
							//$.log('complete');
							imageLoaded();
						} else {
							$(_image).load(function(){
								//$.log('load');
								imageLoaded();
							});
						}
					
						switch (statusHandler.current) {
							case 0://model page
							case 1://outside
								$('div.model_outside').find('div.layers').append(_image);
								//$('div.model_outside').find('div.layers').not('.old').append(_image);
							break;
							case 2://inside
								if((cmsPath+cms.imgLayer[i][j]) != $('div.above_wider img.int').attr('src')){
									$('div.inside').find('div.layers').append(_image);
								}
								//if((cmsPath+cms.imgLayer[i][j]) != $('div.above_wider img.int').attr('src')){
									//$('div.inside').find('div.layers').not('.old').append(_image);
								//}
							break;
						}
						//$(container).find('div.layers').append('<img src="'+cmsPath+cms.imgLayer[i][j]+'" alt="" style="z-index:'+i+'"/>');
					}
				}
			}
			//alert('2');
			//$('div.layers div.loading').remove();
		}
		//$.log('totImg: '+totImg);
		
		if(cms.type==2){//zoom
			$('div.zoom div.dragging').append('<img src="'+_self.bg+'" alt="" style="z-index:200"/><img src="'+_self.core+'" alt="" style="z-index:200"/>');
			for(var i=0, len=cms.imgLayer.length; i<len; i++){
				if(cms.imgLayer[i] != undefined){
					for(var j=0, l=cms.imgLayer[i].length; j<l; j++){
						totImg++;
						var _image = '<img src="'+cmsPath+cms.imgLayer[i][j]+'" alt="" style="z-index:'+(i+200)+'"/>';
						
						$('div.zoom div.dragging').append(_image);
						
						if( $(_image).complete ) {
							//$.log('complete');
							imageLoaded();
						} else {
							$(_image).load(function(){
								//$.log('load');
								imageLoaded();
							});
						}
					}
				}
			}
		}
	}
}
function imageLoaded(){	// function to invoke for loaded image
	fiatCom.imgCounter--;	// decrement the counter
	if( fiatCom.imgCounter === 0 ) {
		// counter is 0 which means the last one loaded, so do something else
		switch (cms.type) {
			case 1://configurator
				$('div.layers_old').fadeOut(800, function(){
					$('div.layers_old').remove();
					$('div.layers').next('div.loading').remove();
				});
				$('div.layers').fadeIn('slow');
			break;
			case 2://zoom
				$('div.loader_wrapper.zoom div.dragging img').fadeIn('slow');
			break;
		}
		//$.log('img caricate!');
	}
}

var cms = {
	/* $.ajax({
		type: 'GET',
		url: 'http://93.62.229.136/_layouts/fgautilitypages/listdata.aspx',
		contentType: 'text/xml',
		dataType: 'xml',//The type of data that you're expecting back from the server
		data: 'list='+list+'&Expression='+expression,
		cache: true,
		success: function(msg){
		//complete: function(msg){
			var response = msg;
			cms[callback](response, fn);
		},
		error: function(XMLHttpRequest, textStatus, errorThrown) {
			var sStatus = XMLHttpRequest.status;
			var sResponse = XMLHttpRequest.responseText;
			var sXml = XMLHttpRequest.responseXml;
			alert('http status: '+sStatus+', text response entity body: '+sResponse+', document response entity body: '+sXml+', type of error: '+textStatus);
		}
	}), */
	opt: null,
	type: 1,// 1=configuratore, 2=zoom
	initCmsData: 0,
	cmsData: null,//xml for opt
	cmsCurrentTrim: null,//xml for currentcar trim
	imgLayer: new Array(),
	packCoord:{
		extFlags:{
			view1:{
				x: 0,
				y: 0
			},
			view2:{
				x: 0,
				y: 0
			},
			view3:{
				x: 0,
				y: 0
			},
			view4:{
				x: 0,
				y: 0
			}
		},
		intFlags:{
			view1:{
				x: 0,
				y: 0
			},
			view2:{
				x: 0,
				y: 0
			}
		}
	},
	ajaxCall: function(file, callback, fn, param){
		//var rightUrlDomain = window.location.protocol+'//'+window.location.hostname;//obsolete
		$.ajax({
			type: 'GET',
			//http://93.62.229.136/it/cmsit/_layouts/fgautilitypages/listdata.aspx?list=ModelVersionTrimList&Expression=VehicleTrim,001985331000
			//url: 'http://sitetest.svil.domino.it/transport.php?action=http://93.62.229.136/it/cmsit/_layouts/fgautilitypages/listdata.aspx',
			//url: rightUrlDomain+'/transport.php?action='+cmsPath+'/it/cmsit/_layouts/fgautilitypages/listdata.aspx',
			//url: cmsPath+'/cmsit/_layouts/fgautilitypages/listdata.aspx',//sharepoint ambienti
			url: listPath+'_layouts/fgautilitypages/listdata.aspx',//sharepoint ambienti
			contentType: 'text/xml',
			dataType: 'xml',//The type of data that you're expecting back from the server
			//data: 'list='+list+'&Expression='+expression,
			data: 'list='+file,
			cache: true,
			success: function(msg){
				var response = msg;
				cms[callback](response, fn, param);
			},
			error: function(XMLHttpRequest, textStatus, errorThrown) {
				var sStatus = XMLHttpRequest.status;
				var sResponse = XMLHttpRequest.responseText;
				var sXml = XMLHttpRequest.responseXml;
				//alert('http status: '+sStatus+', text response entity body: '+sResponse+', document response entity body: '+sXml+', type of error: '+textStatus);
			}
		})
		
		/* $.ajax({
			type: 'GET',
			//url: fiat_respath+'other/cms/'+file+'.xml',//acn
			url: '/fiat.com/www.fiat.com/other/cms/'+file+'.xml',//barbara
			//url: '/fiat/fiat.com/codice/www.fiat.com/other/cms/'+file+'.xml',//tom
			contentType: 'text/xml',
			dataType: 'xml',//The type of data that you're expecting back from the server
			data: '',
			cache: true,
			success: function(msg){
				var response = msg;
				cms[callback](response, fn, info);
			},
			error: function(XMLHttpRequest, textStatus, errorThrown) {
				var sStatus = XMLHttpRequest.status;
				var sResponse = XMLHttpRequest.responseText;
				var sXml = XMLHttpRequest.responseXml;
				alert('http status: '+sStatus+', text response entity body: '+sResponse+', document response entity body: '+sXml+', type of error: '+textStatus);
			}
		}) */
	},
	getModel: function(fn){
		//cms.ajaxCall('ModelList'+filter, 'getModelHandler', fn);
		cms.ajaxCall('ModelList', 'getModelHandler', fn);
	},
	getModelHandler: function(response, fn){
		/* $(response).find("item").each(function(){
			var image = $('Image',this).text();
			var modelId = $('VehicleModelId',this).text();
			mvsSelection.modelPanel.children('ul').children('li[rel="'+modelId+'"]').children('img').attr({'src': image});
		}); */
		fn(response);
	},
	getVersion: function(model, fn){
		//cms.ajaxCall('ModelVersionList'+filter, 'getVersionHandler');
		cms.ajaxCall('ModelVersionList&Expression=VehicleModel,'+model, 'getVersionHandler', fn);
	},
	getVersionHandler: function(response, fn){
		$(response).find("item").each(function(){
			var modelId = $('VehicleModelId',this).text();
			var versionId = $('VehicleVersionId',this).text();
			var image = $('Image',this).text();
			var ROPanelTitle = $('ROPanelTitle',this).text().replace(/(<([^>]+)>)/ig,"");//regex rimuove tag html
			var ROPanelImage1 = $('ROPanelImage1',this).text();
			var ROPanelImage2 = $('ROPanelImage2',this).text();
			//var ROPanelDescription = $('ROPanelDescription',this).contents();
			var ROPanelDescription = $('ROPanelDescription',this).text();
			
/* 			var container = mvsSelection.modelPanel.find('ul > li[rel="'+modelId+'"]').find('div.trim > ul > li[rel="'+versionId+'"]');
			
			container.children('a').children('img').attr({'src': image});
			container.find('div.details > h2').text(ROPanelTitle);
			container.children('div.details').children('img').eq(0).attr({'src': ROPanelImage1});
			container.children('div.details').children('img').eq(1).attr({'src': ROPanelImage2});
			container.children('div.details').children('div.description').html(ROPanelDescription); */
			fn(modelId,versionId,image,ROPanelTitle,ROPanelImage1,ROPanelImage2,ROPanelDescription);
		});
	},
	getTrim: function(fn, filter, param){
		//cms.ajaxCall('mvsList'+filter, 'getTrimHandler', fn);
		//cms.ajaxCall('ModelVersionTrimList&Expression=VehicleTrim,'+param.carCode, 'getTrimHandler', fn, param);
		
		cms.ajaxCall('ModelVersionTrimList'+filter, 'getTrimHandler', fn, param);
	},
	getTrimHandler: function(response, fn, param){
		fn(response, param);
	},
	getMpFlags: function(filter){
		//alert(filter);
		//cms.ajaxCall('MPFlagPositionList', 'getMpFlagsHandler');
		//cms.ajaxCall('MPFlagPositionList&Expression=VehicleTrim,'+filter, 'getMpFlagsHandler');//obsolete
		cms.ajaxCall('MPFlagPositionList&Expression=MVSId,'+filter, 'getMpFlagsHandler');
	},
	getMpFlagsHandler: function(response){
		var code = '';
		$(response).find("item").each(function(){
			var title = $('Title',this).text();
			var x = parseInt($('X',this).text(), 10);
			var y = parseInt($('Y',this).text(), 10);
			var CssFlag = $('CssFlag',this).text();
			var Url = $('URL',this).text();
			/* switch (CssFlag) {
				case 'lt':
					code += '<li class="'+CssFlag+'" style="left:'+x+'px; top:'+y+'px"><a href="'+Url+'">'+title+'</a></li>'
				break;
				case 'rt':
					code += '<li class="'+CssFlag+'" style="right:'+x+'px; top:'+y+'px"><a href="'+Url+'">'+title+'</a></li>'
				break;
				default:
			} */
			code += '<li class="'+CssFlag+'" style="left:'+x+'px; top:'+y+'px"><a href="'+Url+'">'+title+'</a></li>';
		});
		handleMpFlags.modelFlags.append(code);
		//fiatCom.filledMpFlags = true;
		handleMpFlags.initDynamic();
	},
	getCcFlagsExt: function(view){
		//cms.ajaxCall('CCFlagPositionList_ext_'+view, 'getCcFlagsExtHandler');
		//cms.ajaxCall('CCFlagPositionList&Expression=MVSId,'+currentCar.carCode+'|View,external'+view, 'getCcFlagsExtHandler');
		var info = {
			packView: 'view'+view,//needed by pack flag
			whereFlag: 'extFlags',
			whereDiv: 'model_outside'
		};
		cms.ajaxCall('CCFlagPositionList&Expression=MVSId,'+currentCar.carCode+'|View,external'+view, 'getCcFlagsHandler', null, info);
	},
	getCcFlagsInt:function(view){
		//cms.ajaxCall('CCFlagPositionList_int_'+view, 'getCcFlagsIntHandler');
		//cms.ajaxCall('CCFlagPositionList&Expression=MVSId,'+currentCar.carCode+'|View,internal'+view, 'getCcFlagsIntHandler');
		var info = {
			packView: 'view'+view,//needed by pack flag
			whereFlag: 'intFlags',
			whereDiv: 'inside'
		};
		cms.ajaxCall('CCFlagPositionList&Expression=MVSId,'+currentCar.carCode+'|View,internal'+view, 'getCcFlagsHandler', null, info);
	},
	getCcFlagsHandler: function(response, fn, info){
		$(response).find("item").each(function(){
			var code = $('OptionalCategoryId',this).text();
			var x = parseInt($('X',this).text(), 10);
			var y = parseInt($('Y',this).text(), 10);
			var cssClass = $('CssFlag',this).text();
			//$.log(code);
			if (code=='5') {//packs don't need css class
				//$.log('pack');
				//$.log('prima '+ cms.packCoord[info.whereFlag][info.packView].x );
				cms.packCoord[info.whereFlag][info.packView].x = x;
				cms.packCoord[info.whereFlag][info.packView].y = y;
				//$.log('dopo '+ cms.packCoord[info.whereFlag][info.packView].x );
				switch (statusHandler.current) {
					case 1://i'm outside
						if ( info.whereFlag=='extFlags' ) {//print flag position only if it's an external call
							$('div.'+info.whereDiv+' #item_pack').removeAttr('style').css({'left':cms.packCoord[info.whereFlag][info.packView].x, 'top':cms.packCoord[info.whereFlag][info.packView].y});
						}
					break;
					case 2:
						if ( info.whereFlag=='intFlags' ) {//print flag position only if it's an internal call
							$('div.'+info.whereDiv+' #item_pack').removeAttr('style').css({'left':cms.packCoord[info.whereFlag][info.packView].x, 'top':cms.packCoord[info.whereFlag][info.packView].y});
						}
					break;
					default:
				}
				
			} else {
				$('div.'+info.whereDiv+' ul.flags.cc li[rel="'+code+'"]').removeAttr('style').css({'left':x, 'top':y}).removeClass('up dn lt rt').addClass(cssClass);
			}
		});
	},
	/* getCcFlagsExtHandler: function(response){//obsolete
		$(response).find("item").each(function(){
			var code = $('OptionalCategoryId',this).text();
			var x = parseInt($('X',this).text(), 10);
			var y = parseInt($('Y',this).text(), 10);
			var cssClass = $('CssFlag',this).text();
			if (code=='5') {//packs don't need css class
				cms.packCoord.extFlags.view1.x = x;
				cms.packCoord.extFlags.view1.y = y;
				$('#item_pack').removeAttr('style').css({'left':cms.packCoord.extFlags.view1.x, 'top':cms.packCoord.extFlags.view1.y});
				
			} else {
				$('div.model_outside ul.flags.cc li[rel="'+code+'"]').removeAttr('style').css({'left':x, 'top':y}).addClass(cssClass);
			}
		});
	},
	getCcFlagsIntHandler: function(response){//obsolete
		$(response).find("item").each(function(){
			var code = $('OptionalCategoryId',this).text();
			var x = parseInt($('X',this).text(), 10);
			var y = parseInt($('Y',this).text(), 10);
			var cssClass = $('CssFlag',this).text();
			if (code=='5') {//packs don't need css class
				cms.packCoord.intFlags.view1.x = x;
				cms.packCoord.intFlags.view1.y = y;
				$('#item_pack').removeAttr('style').css({'left':cms.packCoord.intFlags.view1.x, 'top':cms.packCoord.intFlags.view1.y});
			} else {
				$('div.inside ul.flags.cc li[rel="'+code+'"]').removeAttr('style').css({'left':x, 'top':y}).addClass(cssClass);
			}
		});
	}, */
	getOpt: function(param, fn){
		//cms.ajaxCall('optionalList', 'getOptResponse');
		//cms.ajaxCall('ModelVersionTrimList&Expression=VehicleTrim,'+carCode, 'getOptResponse');
		//cms.ajaxCall('OptionalList&Expression=VehicleTrim,'+param.carCode, 'getOptResponse', fn, param);
		//$.log(param.carCode)
		cms.ajaxCall('OptionalList&Expression=MVSId,'+param.carCode, 'getOptResponse', fn, param);
	},
	getOptResponse: function(response, fn, param){
		cms.cmsData = null;//reset
		//$.log('prima')
		//$.log(cms.cmsData)
		cms.cmsData = response;
		//$.log('dopo')
		//$.log(cms.cmsData)
		fn(param);
		
		/* if ( $('#layout').hasClass('model_page') ) {//we're in model page
			handleOpt.initExt();
			handleOpt.initInt();
			handleCurrentCar.redraw();
		} else {//COA
			
		} */
	},
	getOptHandler: function(info){
		//alert('handler'+info);
		response = cms.cmsData;
		//alert($(response).text());
		switch (statusHandler.current) {
			case 0://model page
				var carView = 2;//MP default view is 2
				var currentFake = 1;
			break;
			case 1://outside
				var carView = statusHandler.carViewExt;
				var currentFake = statusHandler.current;
			break;
			case 2://inside
				var carView = statusHandler.carViewInt;
				var currentFake = statusHandler.current;
			break;
		}
		
		//$.log( $(cms.cmsData).find('item').length );
		$(cms.cmsData).find('item').each(function(i){
			var optId = $('VehicleOptionalId',this).text();
			var layer = parseInt($('Layer',this).text());
			var isVisible = $('IsVisible',this).text();
			//var thumb = $('Thumbnail',this).text();
			var views = $('views',this);
			var type = $(this).attr('type');
			
			var paintedExt = $(this).find('color[cod="'+currentCar.colorExt+'"]');//opt in tinta ext
			if(paintedExt.text() != ''){
				views = $('views', paintedExt);
			}
			var peintedInt = $(this).find('color[cod="'+currentCar.colorInt+'"]');//opt in tinta int
			if(peintedInt.text() != ''){
				views = $('views', peintedInt);
			}
			
			if(currentFake==1){//per gestire la visualizzazione di un opt interno che influenza anche gli esterni (es. capote) viene caricato su cms nella cartella external un opt con codice del tipo 123@456. L'if serve perche' solo per gli esterni (currentFake==1) bisogna stampare lo strato, mentre per gli interni lo strato e' gia' stampato a parte. Infatti la selleria richiede una gestione particolare: deve venir posizionata in above_wider e non nel div.layers come tutti gli altri opt
				optId = optId.replace('@','#');
			}
			//per opt esterno che influenza l'interno (es. 500 POP che ha il cruscotto colorato come la carrozzeria), non c e' bisogno di if perche' il colore esterno e' gestito come tutti gli altri opt
			
			
			//alert('optId: '+optId+'|info: '+info)
			//if( ((optId == info && optId.length>0 && info.length>0) || (color == info && color.length>0 && info.length>0)) && type==statusHandler.current && isVisible == 'True'){
			if( optId == info && optId.length>0 && info.length>0 && type==currentFake && isVisible == 'True'){
				//alert(optId);
				switch (cms.type) {
					case 1://configurator
						var image = views.find('view[cod="'+carView+'"]').find('ConfigImage').text(); 
					break;
					case 2://zoom
						var image = views.find('view[cod="'+carView+'"]').find('ZoomImage').text();
					break;
				}
				//alert(carView);
				
				//controlla presenza immagine nel layer specifico
				//alert(cms.imgLayer[layer]);
				//$.log('img strato: '+image);
				if (image !== '') {//prevent empty images (BE bug?)
					//$.log('image'+image);
					fiatCom.imgCounter++;
					if(cms.imgLayer[layer] == undefined){//inizializzazione del primo elemento
						cms.imgLayer[layer] = new Array();
						cms.imgLayer[layer][0] = image;
					}else{//aggiunta nuovi elementi in coda
						var imgLen = cms.imgLayer[layer].length;
						cms.imgLayer[layer][imgLen] = image;
					}
				}
			}
		})
	}
};

var cc = {
	ajaxCall: function(method, data, callback, param, fn, info){
		$.ajax({
			type: 'GET',
			//url: 'http://93.62.229.136:8080/virtuallayerservice.svc/vehicles/'+method+'/jsonp',//VL integrazione ACN
			//url: 'http://vl.test2.fiat.com/service/virtuallayerservice.svc/vehicles/'+method+'/jsonp',//VL certificazione Fiat
			//url: 'http://vl.fiat.com/service/virtuallayerservice.svc/vehicles/'+method+'/jsonp',//VL produzione Fiat
			url: fiat_vlurl+'/vehicles/'+method+'/jsonp',//VL panacea
			//url: 'http://vl.test2.fiat.com/VirtualLayerServiceWebSetup/VirtualLayerService.svc/vehicles/'+method+'/jsonp',//VL collaudo Fiat (obsolete)
			//url: 'http://vl.fiat.com/virtuallayerservice.svc/vehicles/'+method+'/jsonp',//VL produzione Fiat (obsolete)
			contentType: 'application/json; charset=utf-8',
			dataType: 'jsonp',//The type of data that you're expecting back from the server
			data: data,
			cache: true,
			success: function(msg){
			//complete: function(msg){
				var response = msg;
				cc[callback](response, param, fn, info);
				/* if ( response.Error == null ){
					cc[callback](response, param, fn, info);
				} else {
					if ( callback == 'getOptListHandler' && fn == 'handleOpt.printPackFlag' ) {//coming from pack
						cc[callback](response, param, fn, info);//without packs it would stop here, but let's give him a shove and go on anyway
					}
					//layerError = new Layer();//create a new layer for the error message
					//layerError.init();
					//layerError.loaderWrapper.addClass("error_status");//setting class for style
					//layerError.writeLayer();
				} */
			},
			error: function(XMLHttpRequest, textStatus, errorThrown) {
				var sStatus = XMLHttpRequest.status;
				var sResponse = XMLHttpRequest.responseText;
				var sXml = XMLHttpRequest.responseXml;
				//alert('http status: '+sStatus+', text response entity body: '+sResponse+', document response entity body: '+sXml+', type of error: '+textStatus);
			}
		})
		
	},
	getModel: function(param, fn){
		var data = 'market='+param.market+'&language='+param.language;
		//var data = '{"market": param.market,"language": param.language}'
		cc.ajaxCall('model',data,'getModelHandler', param, fn);
	},
	getModelHandler: function(response, param, fn){
		var allModels=response.Models;
		for (var i=0, len=allModels.length; i<len; i++) {
			if (param.modelId != undefined && response.Models[i].code == param.modelId ) {
				var modelDesc = response.Models[i].name;
				break;
			}
		}
		fn(param, modelDesc, allModels);
	},
	getVersions: function(param, fn){
		var data = 'market='+param.market+'&language='+param.language+'&model='+param.modelId;
		cc.ajaxCall('version', data, 'getVersionsHandler', param, fn);
	},
	getVersionsHandler: function(response, param, fn){
		var allVersions=response.Versions;
		for(var i=0, len=allVersions.length; i<len; i++){
			if (param.versionId != undefined && allVersions[i].code == param.versionId ) {
				var versionDesc = allVersions[i].description;
				break;
			}
		}
		fn(param, versionDesc, allVersions);
	},
	getTrim: function(param, fn){
		var data = 'market='+param.market+'&language='+param.language+'&model='+param.modelId+'&version='+param.versionId;
		cc.ajaxCall('trim', data, 'getTrimHandler', param, fn);
	},
	getTrimHandler: function(response, param, fn){
		var fuelIdList=[];
		var allFuels=[];
		var allTrims=response.Trims;
		for(var i=0, len=response.Trims.length; i<len; i++){
			if (param.carCode != undefined && response.Trims[i].id == param.carCode ) {
				var engineId = response.Trims[i].engineId;
				//var engineDesc = response.Trims[i].engineDescription;
				var engineDesc = response.Trims[i].description;
				var gearId = response.Trims[i].gearId;
				var gearDesc = response.Trims[i].gearDescription;
				var fuelId = response.Trims[i].fuelId;
				var fuelDesc = response.Trims[i].fuelDescription;
				var driveId = response.Trims[i].driveId;
				var driveDesc = response.Trims[i].driveDescription;
				
				var price = response.Trims[i].Price[0].value;
				//currentCar.price = response.Trims[i].Price[0].value;//keep updated the current car obj
				//currentCar.priceUpdated = false;//prevent another ajax call
				var priceNoVat = response.Trims[i].Price[1].value;
				var pricePromo = '0';
				if(response.Trims[i].Price[2]){
					pricePromo = response.Trims[i].Price[2].value;
				}
				price = addDot(price);
				priceNoVat = addDot(priceNoVat);
				pricePromo = addDot(pricePromo);
			}
			
			var fuel = response.Trims[i].fuelId;
			if($.inArray(fuel,fuelIdList) == -1){
				fuelIdList.push(fuel);//collect fuel types (gpl, diesel etc.)
			}
		}
		for (var i=0, len=fuelIdList.length; i<len; i++) {
			allFuels.push( filterGroup(response.Trims, fuelIdList[i], 'fuelId') );//create a new array with fuel sorted by type
		}
		
		fn(param, engineId, engineDesc, gearId, gearDesc, fuelId, fuelDesc, driveId, driveDesc, price, priceNoVat, pricePromo, allFuels, allTrims);
	},
	getOptList: function(param, info, fn){
		var data = 'market='+param.market+'&language='+param.language+'&carCode='+param.carCode+'&categoryFilter='+encodeURIComponent(info.categoryFilter);
		cc.ajaxCall('optionals', data, 'getOptListHandler', param, fn, info);
	},
	getOptListHandler: function(response, param, fn, info){
		fn(param, response, info);
	},
	getOptStandard: function(param, fn){
		var data = 'market='+param.market+'&language='+param.language+'&carCode='+param.carCode;
		cc.ajaxCall('optionals/standard', data, 'getOptStandardHandler', param, fn);
	},
	getOptStandardHandler: function(response, param, fn){
		fn(param, response);
	},
	getOptExt: function(param, info, fn){
		//$.log('getOptExt di mvs: '+param.carCode);
		var data = 'market='+param.market+'&language='+param.language+'&carCode='+param.carCode+'&categoryFilter='+encodeURIComponent(info.categoryFilter);
		cc.ajaxCall('outside', data, 'getOptExtHandler', param, fn);
	},
	getOptExtHandler: function(response, param, fn){
		var colorTypeList = [];//collect color types (pastello, metallizzato, tristato etc.)
		var allColors = [];//collect colors ordered by type
		for (var i=0, len=response.Categories.length; i<len; i++) {
			if ( response.Categories[i].cod == '$' ) {//filter by ext color
				for (var j=0, l=response.Categories[i].OptionalList.length; j<l; j++) {
					//var colorType = response.Categories[i].OptionalList[j].code;//group by color type
					var colorType = response.Categories[i].OptionalList[j].price;//group by color price
					if ( $.inArray(colorType, colorTypeList) == -1 ) {
						colorTypeList.push(colorType);
					}
				}
				for (var j=0, ln=colorTypeList.length; j<ln; j++) {
					//$.log('step '+j+' of '+colorTypeList.length);
					//allColors.push( filterGroup(response.Categories[i].OptionalList, colorTypeList[j], 'code') );//group by color type
					allColors.push( filterGroup(response.Categories[i].OptionalList, colorTypeList[j], 'price') );//group by color price
				}
			}
		}
		fn(param, response, allColors);
	},
	getOptInt: function(param, info, fn){
		var data = 'market='+param.market+'&language='+param.language+'&carCode='+param.carCode+'&categoryFilter='+encodeURIComponent(info.categoryFilter);
		cc.ajaxCall('inside', data, 'getOptIntHandler', param, fn);
	},
	getOptIntHandler: function(response, param, fn){
		var colorTypeList = [];//collect color types (pastello, metallizzato, tristato etc.)
		var allColors = [];//collect colors ordered by type
		for (var i=0, len=response.Categories.length; i<len; i++) {
			if ( response.Categories[i].cod == '#' ) {//filter by int color
				for (var j=0, l=response.Categories[i].OptionalList.length; j<l; j++) {
					//var colorType = response.Categories[i].OptionalList[j].code;//group by color type
					var colorType = response.Categories[i].OptionalList[j].price;//group by color price
					if ( $.inArray(colorType, colorTypeList) == -1 ) {
						colorTypeList.push(colorType);
					}
				}
				for (var j=0, ln=colorTypeList.length; j<ln; j++) {
					//$.log('step '+j+' of '+colorTypeList.length);
					//allColors.push( filterGroup(response.Categories[i].OptionalList, colorTypeList[j], 'code') );//group by color type
					allColors.push( filterGroup(response.Categories[i].OptionalList, colorTypeList[j], 'price') );//group by color price
				}
			}
		}
		fn(param, response, allColors);
	},
	getPackList: function (param, info, fn) {
		var data = 'market='+param.market+'&language='+param.language+'&carCode='+param.carCode+'&pack='+info.packCode;
		cc.ajaxCall('optionals/pack', data, 'getPackListHandler', param, fn);
	},
	getPackListHandler: function(response, param, fn){
		fn(param, response);
	},
	getTechSpec: function(param, info, fn){
		var data = 'market='+param.market+'&language='+param.language+'&carCode='+param.carCode+'&features='+encodeURIComponent(info.feature);
		cc.ajaxCall('technicalData', data, 'getTechSpecHandler', param, fn);
	},
	getTechSpecHandler: function(response, param, fn){
		fn(param, response);
	},
	checkConfigConsist: function(param, info, fn){
		//var data = 'market=it&language=it&carCode=001500330000&operation=ADD&optional=68R&selectedOptionals=000|008|009|011|028|029|030|101|112|150|218|228|428|499|500|502|505|5DE|614|717|823|876|890|269$6MX|337#-&optionalsToAdd=';
		var data = 'market='+param.market+'&language='+param.language+'&carCode='+param.carCode+'&operation='+info.operation+'&optional='+encodeURIComponent(info.optional)+'&selectedOptionals='+encodeURIComponent(param.selectedOpt)+'&optionalsToAdd='+encodeURIComponent(info.optionalsToAdd);
		cc.ajaxCall('configuration/check', data, 'checkConfigConsistHandler', param, fn, info);
	},
	checkConfigConsistHandler: function(response, param, fn, info){
		fn(param, info, response);
		//cc.handleInconsistenciesAddRemove(param, info, response);
	},
	checkColors: function(opt){//controllo per capire se l'opt e' una carrozzeria o una selleria
		if(opt.indexOf('#')!=-1){
			var optColorType = 'SEAT';
		}
		if(opt.indexOf('$')!=-1){
			var optColorType = 'BODY';
		}
		return optColorType;
	},
	handleInconsistenciesAddRemove: function(param, info, response){//da rivedere: rendere autonomo dal mypanel
		//$.log('inconsistencies'+response.Inconsistencies.length);
		//$.log('handleInconsistenciesAddRemove '+fiatCom.removed.length);
		//$('div.layers div.loading').remove();
		
		if(response.Operations.Removed.length>0){//controllo se tra i removed e' presente un colore, per stampare layer di avviso sostituzione carrozzeria o selleria
			var color = '';
			
			for(var i=0, len=response.Operations.Removed.length; i<len; i++){
				var optId = response.Operations.Removed[i].id;
				var optCategory = response.Operations.Removed[i].category;
				
				if((optCategory=='BODY' || optCategory=='SEAT') && (cc.checkColors(optId) != cc.checkColors(info.optional))){//identifico il colore presente tra i removed, che non appartenga alla stessa categoria (seat o body) dell'opt che sto tentando di aggiungere: se sto aggiungendo una selleria non devo essere avvisato della rimozione della selleria precedentemente selezionata, ma solo dell'eventuale rimozione della carrozzeria
					color = optId;
				}
			}
			
			if(color!=''){
				info.color = color;//colore incompatibile segnalato su layer
				info.ckcResponse = response;//response della ckc
				info.categoryFilter = '';//serve alla getOptList
				cc.getOptList(param, info, cc.colorLayer);
			}else{
				cc.handleCkcResponse(param, info, response);
			}
		}else{
			cc.handleCkcResponse(param, info, response);
		}
	
	},
	colorLayer:function(param, response, info){//layer incompatibilita' colore
		var optListResponse = response;
		
		var layer =	'<div class="layer_color_wrap">'+
						'<div class="layer_inconsistencies loader_wrapper conflict">'+
							'<p>' + printMsg("configurator", "inconsistentOpt") + '</p>'+
							'<div class="item_box summary">'+
								'<p>'+cc.findOptNameAndType(info.color, optListResponse)+'</p>'+
							'</div>'+
							'<div class="actions">'+
								'<p>' + printMsg("configurator", "removingColor") + '</p>'+
								'<p class="rgt"><a class="yes" href="#">' + printMsg("configurator", "yes") + '</a></p>'+
							'</div>'+
							'<p class="rgt"><a class="no" href="#">' + printMsg("configurator", "no") + '</a></p>'+
						'</div>'+//chiude layer_inconsistencies
					'</div>';//chiude layer_color_wrap
		
		$('body').append(layer);
		
		$('div.layer_color_wrap a.yes').click(function(){
			$('div.layer_color_wrap').remove();
			cc.handleCkcResponse(param, info, info.ckcResponse);
		});
		
		$('div.layer_color_wrap a.no').click(function(){
			$("div.optional").removeClass("waiting");
			$('div.layers').next('div.loading').remove();
			$('div.layer_color_wrap').remove();
		});
	},
	handleCkcResponse:function(param, info, response){
		if(response.Inconsistencies.length==0){//se non ci sono inconsistenze
			currentCar.selectedOpt = response.optionals;
			
			//aggiornamento del prezzo:
			if(response.Price!=null){
				currentCar.price = response.Price[0].value;
				currentCar.pricePromo = '0';
				if(response.Price[2]){
					currentCar.pricePromo = response.Price[2].value;
				}
				
				currentCar.price = addDot( currentCar.price );
				currentCar.pricePromo = addDot( currentCar.pricePromo );
			}
			myPanel.priceWrap.children('span').eq(1).html( printMsg('currency', currentCar.market) + currentCar.price);
			finitoPage.container.find('div.review').find('span.price.tot').html( printMsg('currency', currentCar.market) +currentCar.price);//keep updated finito page
			
			var mySelectionOpt = $('div.my_panel div.opt_cat');
			
			//$.log(response.Operations.Added);
			//$.log(fiatCom.added);
			//$.log(fiatCom.vincoli);
			//gestione degli added
			if(response.Operations.Added.length>0 && fiatCom.added.length<=0 && fiatCom.vincoli.length<=0){//solo opt nodo added
				//$.log('dentro add 1');
				//$.log('sono stati rimossi '+response.Operations.Removed.length+' opt');
				var info = {
					categoryFilter:'',
					added: response.Operations.Added,
					mySelectionOpt: mySelectionOpt
				};
				cc.getOptList(param, info, cc.handleOptToAdd);
			}
			if(response.Operations.Added.length<=0 && fiatCom.added.length>0 && fiatCom.vincoli.length<=0){//solo opt memorizzati da giro inconsistenze
				//$.log('dentro add 2');
				//$.log(info.removedOpt.length);
				var info = {
					categoryFilter:'',
					added: fiatCom.added,
					mySelectionOpt: mySelectionOpt
				};
				cc.getOptList(param, info, cc.handleOptToAdd);
			}
			if(response.Operations.Added.length<=0 && fiatCom.added.length<=0 && fiatCom.vincoli.length>0){//solo optToAdd
				//$.log('dentro add 3');
				var info={
					categoryFilter:'',
					added: fiatCom.vincoli,
					mySelectionOpt: mySelectionOpt
				};
				cc.getOptList(param, info, cc.handleOptToAdd);
			}
			if(response.Operations.Added.length>0 && fiatCom.added.length>0 && fiatCom.vincoli.length>0){//tutti
				//$.log('dentro add 4');
				//$.log(info.removedOpt.length);
				var info = {
					categoryFilter:'',
					added: response.Operations.Added.concat(fiatCom.added, fiatCom.vincoli),
					mySelectionOpt: mySelectionOpt
				};
				//$.log(fiatCom.added);
				//$.log(response.Operations.Added);
				//$.log(info.added);
				cc.getOptList(param, info, cc.handleOptToAdd);
			}
			
			if(response.Operations.Added.length>0 && fiatCom.added.length>0 &&  fiatCom.vincoli.length<=0){
				//$.log('dentro add 5');
				//$.log(info.removedOpt.length);
				var info = {
					categoryFilter:'',
					added: response.Operations.Added.concat(fiatCom.added),
					mySelectionOpt: mySelectionOpt
				};
				//$.log(fiatCom.added);
				//$.log(response.Operations.Added);
				//$.log(info.added);
				cc.getOptList(param, info, cc.handleOptToAdd);
			}
			
			if(response.Operations.Added.length>0 && fiatCom.added.length<=0 &&  fiatCom.vincoli.length>0){
				//$.log('dentro add 6');
				//$.log(response.Operations.Added);
				//$.log(fiatCom.vincoli);
				var info = {
					categoryFilter:'',
					added: response.Operations.Added.concat(fiatCom.vincoli),
					mySelectionOpt: mySelectionOpt
				};
				//$.log(fiatCom.added);
				//$.log(response.Operations.Added);
				//$.log(info.added);
				cc.getOptList(param, info, cc.handleOptToAdd);
			}
			if(response.Operations.Added.length<=0 && fiatCom.added.length>0 &&  fiatCom.vincoli.length>0){
				//$.log('dentro add 7');
				//$.log(info.removedOpt.length);
				var info = {
					categoryFilter:'',
					added: fiatCom.added.concat(fiatCom.vincoli),
					mySelectionOpt: mySelectionOpt
				};
				//$.log(fiatCom.added);
				//$.log(response.Operations.Added);
				//$.log(info.added);
				cc.getOptList(param, info, cc.handleOptToAdd);
			}
			
			
			
			
			
			//gestione dei removed
			if(response.Operations.Removed.length>0 && fiatCom.removed.length<=0){//solo opt nodo removed
				//$.log('sono stati rimossi '+response.Operations.Removed.length+' opt');
				var info = {
					categoryFilter:'',
					removed: response.Operations.Removed,
					mySelectionOpt: mySelectionOpt
				};
				cc.getOptList(param, info, cc.handleOptToRemove);
				//cc.getOptList(param, info, cc.handleOptToRemove);
				//handleCurrentCar.initRedraw();
				//handleCurrentCar.redraw();
			} 
			if(fiatCom.removed.length>0 && response.Operations.Removed.length<=0){//solo opt memorizzati da giro inconsistenze
				//$.log(info.removedOpt.length);
				var info = {
					categoryFilter:'',
					removed: fiatCom.removed,
					mySelectionOpt: mySelectionOpt
				};
				cc.getOptList(param, info, cc.handleOptToRemove);
				//handleCurrentCar.redraw();
			}
			if(fiatCom.removed.length>0 && response.Operations.Removed.length>0){//entrambi: opt nodo removed e opt memorizzati da giro inconsistenze
				//$.log(info.removedOpt.length);
				var info = {
					categoryFilter:'',
					removed: fiatCom.removed.concat(response.Operations.Removed),
					mySelectionOpt: mySelectionOpt
				};
				//$.log(fiatCom.removed);
				//$.log(response.Operations.Removed);
				//$.log(info.removed);
				cc.getOptList(param, info, cc.handleOptToRemove);
				//handleCurrentCar.redraw();
			}
			
		}else{//se ci sono inconsistenze
			if(fiatCom.removed == []){
				fiatCom.removed = response.Operations.Removed;
			}else{
				for(var i=0, len=response.Operations.Removed.length; i<len; i++){
					fiatCom.removed.push(response.Operations.Removed[i]);
				}
			}
			
			if(fiatCom.added == []){
				fiatCom.added = response.Operations.Added;
			}else{
				for(var i=0, len=response.Operations.Added.length; i<len; i++){
					fiatCom.added.push(response.Operations.Added[i]);
				}
			}
			//$.log('handleInconsistenciesAddRemove if inconsist '+fiatCom.removed.length);
		
			var info = {
				categoryFilter:'',
				checkConsistResponse: response//passo alla callback (handleInconsistencies) la risposta della checkConsistency
			};
			
			//chiamata agli Optionals per recuperare il nome degli opt presenti nel nodo delle Inconsistencies (la checkConsistency restituisce solo i code e non i name)
			cc.getOptList(param, info, cc.handleInconsistencies);
		}
	},
	handleOptToRemove: function(param, response, info){
		//$.log('handleOptToRemove');
		var time = 2000;
		var optListResponse = response; //per evitare confusione assegno un nome significativo alla response della getOptList
		//$.log(response);
		var removed=info.removed;
		
		var layer =	'<div class="layer_removed_wrap">'+
						'<div class="layer_removed loader_wrapper conflict">'+
							'<p class="layer_title">' + printMsg("configurator", "removedOpt") + '</p>'+
							'<ul>';
		
		for(var i=0, len=removed.length; i<len; i++){
			//var info.remOpt=response.Operations.Removed[i].id;
			time+=500;
			var remOpt = removed[i].id;
			
			layer += '<li>' +cc.findOptNameAndType(remOpt,optListResponse)+ '</li>';
			
			//$.log('removed: '+remOpt);
			var optional = $('div.opt_panel').find('[rel="'+remOpt+'"]');
			var panel = optional.closest('div.opt_panel');
			var step = panel.parent().attr('class');
			switch (step) {//packs, as for now, are not handled
				case 'model_outside':
					step = 'outside';
				break;
				case 'inside':
					step = 'inside';
				break;
			}
			var category = panel.attr('rel');
			var finitoList;
			if ( category=='5' ) {//packs are in the first column
				finitoList = $('div.version ul.summary');
			} else {//other opts are either outside or inside
				finitoList = $('div.finito_'+step+' ul.summary');
			}
			var finitoCategoryOn = finitoList.find('[rel="'+remOpt+'"]').parent();
			//$.log(finitoCategoryOn);
			if(optional.length>0){//se esiste l'opt (quindi es. non e' tra i ghost)
				//$.log(optional);
				//$.log('rimuovi');
				
				$("div.optional").removeClass("waiting");
				optional.removeClass("on");//pannello opt: spengo l'opt
				info.mySelectionOpt.find('[rel="'+remOpt+'"]').remove();//My Panel: rimuovo l'opt
				
				finitoList.find('[rel="'+remOpt+'"]').remove();//Finito Page: rimuovo l'opt
				if ( finitoCategoryOn.find('div.optional').length == 0 ){//Finito Page: rimuovo la categoria nel caso sia vuota
					//$.log(finitoCategoryOn);
					if ( category!='5' ) {//pack category should never be removed
						finitoCategoryOn.hide();
					}
				}
				//if(finitoCategoryOn.parent('ul.summary').find('li').find('div.optional').length == 0){//obsolete: Finito Page: mostro il testo di default nel caso non ci siano categorie e opt
					//finitoCategoryOn.parent('ul.summary').find('li.default_txt').show();
				//}
			}
			
		}
		
		layer +=	'</ul>'+
				'</div>'+//close div layer_removed
			'</div>';//close div layer_removed_wrap
		//$.log(time);
		if(statusHandler.current != 3){//non stampo il layer nella finito page
			$('body').append(layer);
			setTimeout("$('div.layer_removed_wrap').fadeOut('slow',function(){$('div.layer_removed_wrap').remove()})", time);
			
			var notStd = $('div.layer_removed_wrap').find('span[data-standard="no"]').length;
			if(notStd > 0 ){
				$('div.layer_removed_wrap').fadeIn('slow');//mostro il layer solo se contiene opt non standard
			}
		}
		
		handleCurrentCar.redraw();
	},
	handleOptToAdd: function(param, response, info){
		//$.log('dentro handleOptToAdd');
		var optListResponse = response; //per evitare confusione assegno un nome significativo alla response della getOptList
		//$.log(response);
		var added=info.added;
		
		for(var i=0, len=added.length; i<len; i++){
			//var info.addOpt=response.Operations.Added[i].id;
			var addOpt = added[i].id;
			//$.log('added: '+addOpt);
			var optional = $('div.opt_panel').find('[rel="'+addOpt+'"]');
			var panel = optional.closest('div.opt_panel');
			var step = panel.parent().attr('class');
			
			var elCategory = added[i].category;
			switch(elCategory){
				case 'BODY':
				case 'SEAT':
					var optional = $('div.opt_panel').find('li[rel="'+addOpt+'"]');
				break;
				default:
					var optional = $('div.opt_panel').find('div[rel="'+addOpt+'"]');
			}
			
			switch (step) {//packs, as for now, are not handled
				case 'model_outside':
					step = 'outside';
				break;
				case 'inside':
					step = 'inside';
				break;
			}
			var category = panel.attr('rel');
			var finitoList;
			
			if ( category=='5' ) {//packs are in the first column
				finitoList = $('div.version ul.summary');
			} else {//other opts are either outside or inside
				finitoList = $('div.finito_'+step+' ul.summary');
			}
			var finitoCategoryOn = finitoList.find('[rel="'+addOpt+'"]').parent();
			//$.log(finitoCategoryOn);
			
			var finitoCategory = finitoList.find('li[rel="'+category+'"]');
			
			if(optional.length>0 && !optional.hasClass('on')){//se esiste l'opt (quindi es. non e' tra i ghost)
				//$.log('dentro if');
				optional.addClass('on');//pannello opt: accendo l'opt
				$("div.optional").removeClass("waiting");
				
				switch(elCategory){
					case 'BODY':
						currentCar.colorExt = addOpt;//aggiorna currentCar
						handleOpt.colorPanelExt.handleClick(optional);//aggiorna la gestione dell'hover nel pannello
						handleOpt.updateMyColors(optional, 0);//aggiorna il Mypanel e la finito page
						
						changeViewExt.updateImg('outside');//update more views images (and finito page too)
					break;
					case 'SEAT':
						currentCar.colorInt = addOpt;//aggiorna currentCar
						handleOpt.colorPanelInt.handleClick(optional);//ingrandisce il colore nel pannello
						handleOpt.updateMyColors(optional, 1);//aggiorna il Mypanel e la finito page
						changeViewExt.updateImg('inside');//update more views images (and finito page too)
					break;
					case 'WHEL':
						myPanel.myWheels.empty();
						var newElMyPanel = optional.filter('div').clone();
						if (addOpt == currentCar.stdWheels) {//if standard wheels, you cannot remove 'em
							newElMyPanel.find('a.add_rem').remove();
							newElMyPanel.find('span.price').remove();//std wheels have no price
							newElMyPanel.find('div.img_wrap').remove();//std wheels have no img
						}
						newElMyPanel.appendTo(myPanel.myWheels);//keep updated myPanel
						var newElFinito = newElMyPanel.clone();
						newElFinito.find('div.img_wrap').remove();
						$('div.finito_outside ul.summary').find('li[rel="-"] > div').html(newElFinito);
						
					break;
					case 'PACK':
						var titles = optional.prev('div.accordion_title').html();
						var newElMyPanel = optional.clone().removeClass('accordion_content');//myPanel
						newElMyPanel.find('div.details').remove();
						newElMyPanel.children('div.img_wrap').after(titles);
						
						newElMyPanel.prependTo(info.mySelectionOpt);
						
						
						var newElFinito = optional.clone().removeClass('accordion_content');//finito page
						newElFinito.find('div.details').remove();
						newElFinito.find('div.img_wrap').remove();
						newElFinito.wrap('<div></div>').prepend(titles);
						$('li.finito_pack').append(newElFinito);
						info.mySelectionOpt.show();
					break;
					default:
						optional.clone().appendTo(info.mySelectionOpt);//My Panel: aggiungo l'opt
						info.mySelectionOpt.show();
						
						var newEl = optional.clone();//Finito Page: aggiungo l'opt
						newEl.find('div.img_wrap').remove();
						newEl.appendTo(finitoCategory);
						
						finitoList.find('li.default_txt').hide();
						finitoCategory.show();
				}
			}
		}
		
		handleCurrentCar.redraw();
	},
	handleInconsistencies: function(param, response, info){
		//$.log('handleInconsistencies');
		var optListResponse = response; //per evitare confusione assegno un nome significativo alla response della getOptList
		var checkConstResponse = info.checkConsistResponse; //response della checkconsistency
		
		var solution='';
		var boundOptAll='';
		var price='';
		var operation='';
		var num='';
		var opt='';
		
		var layer =	'<div class="layer_inconsistencies_wrap">'+
						'<div class="layer_inconsistencies loader_wrapper conflict">';
		
		for(var i=0, len=checkConstResponse.Inconsistencies.length; i<len; i++){
			var opt = checkConstResponse.Inconsistencies[i].sourceOptional;
			//alert(cc.findOptNameAndType(opt,optListResponse));
			
			layer +=	'<h3>'+cc.findOptNameAndType(opt,optListResponse)+'</h3>'+
						/* '<p class="header">'+
							'<img src="img/placeholder/configurator/ph20.jpg" alt=""/>'+
						'</p>'+ */
						//'<p>To add <span rel="'+opt+'" class="opt">'+cc.findOptNameAndType(opt,optListResponse)+'</span> you must</p>';
						'<p>' + printMsg("configurator", "toAdd") + ' <span rel="'+opt+'" class="opt">'+cc.findOptNameAndType(opt,optListResponse)+'</span> ' + printMsg("configurator", "youMust") + '</p>';
			
			for(var j=0, l=checkConstResponse.Inconsistencies[i].Solutions.length; j<l; j++){
				layer+='<div class="solution">';
				
				solution = checkConstResponse.Inconsistencies[i].Solutions[j];
				boundOptAll = solution.optionals;
				price = solution.Price[0].value;
				price = addDot(price);
				var boundOptList = boundOptAll.split('|');
				
				num++;
				if(num>1){
					layer += '<p class="or">' + printMsg("configurator", "or") + '</p>';
				}
				
				operation = 'ADD';
				
				for(var k=0, ln=boundOptList.length; k<ln; k++){
					layer +=	'<div class="item_box summary">';
									//'<img alt="[100x70]" src="'+fiat_respath+'img/placeholder/100x70.png">'+
					var optThumb = cc.getOptThumb(boundOptList[k]);//get the right thumb from CMS
					if ( optThumb!='' ) {
						layer +='<img alt="" src="'+optThumb+'">';
					}
					layer +='<p class="operation">' + printMsg("configurator", operation) + '</p>'+
									'<p class="bound_opt">' +cc.findOptNameAndType(boundOptList[k],optListResponse) + '</p>'+
									//'<p rel="'+boundOptList[k]+'">'+cc.findOptNameAndType(boundOptList[k],optListResponse)+'</p>'+
								'</div>';
				}
				
				layer +=	'<p class="price"><span>'+ printMsg('currency', fiat_market) +price+'</span></p>'+
							'<div class="actions">'+
								//'<p>Would you like to proceed?</p>'+
								'<p>' + printMsg("configurator", "proceed") + '</p>'+
								'<p class="rgt"><a href="#" class="yes" data-operation="'+operation+'" data-boundOpt="'+boundOptAll+'">' + printMsg("configurator", "yes") + '</a></p>'+
							'</div>'+
						'</div>';
			}
		}
		layer +=	'<p class="rgt"><a href="#" class="no">' + printMsg("configurator", "no") + '</a></p>';+
					'</div>'+//close div layer_inconsistencies
				'</div>';//close div layer_inconsistencies_wrap
		$('body').append(layer);
		
		
		
		$('div.layer_inconsistencies a.yes').click(function(){
			var _this = $(this);
			
			//fiatCom.vincoli = [];
			//var newBoundOpt=[];
			_this.closest('div.actions').parent().find('p.bound_opt span').each(function(){
				var optInfo = {
					category: $(this).attr('data-type'),
					id : $(this).attr('data-opt')
				};
				//newBoundOpt += optInfo.id+'|';//riscrivo la lista degli opt da passare come optionalsToAdd, perche' devo sostituire i code con i doublecode nel caso di carrozzerie o tessuti (la check consistency mi restituisce solo i code, ricavo i double code dalla chiamata alla getOptionals)
				fiatCom.vincoli.push(optInfo);
			});
			//$.log('newBoundOpt'+newBoundOpt);
			
			
			var info = {
				operation: _this.attr('data-operation'),
				//optional: _this.attr('data-boundOpt'),
				optional: opt,
				optionalsToAdd: _this.attr('data-boundOpt') //passo alla check consistency gli opt proposti nella solution scelta dall'utente
				//optionalsToAdd: newBoundOpt,
				//boundInfo: fiatCom.vincoli
				//removedOpt: fiatCom.removed
			};
			//cc.checkConfigConsist(param, info, cc.closeLayer);
			//param.selectedOpt += _this.attr('data-boundOpt');
			//$.log(param.selectedOpt);
			var newCar={//auto temporanea per passare alla nuova checkconsistency i selected opt aggiornati, lasciando intatta currentCar perche' l'utente potrebbe non completare la scelta
				market: fiat_market,
				language: fiat_lang,
				carCode: param.carCode,
				selectedOpt: checkConstResponse.optionals
			};
			//$.log(newCar.selectedOpt);
			cc.checkConfigConsist(newCar, info, handleOpt.printAddRemove);
			$('div.layer_inconsistencies_wrap').remove();
		});
		
		
		$('div.layer_inconsistencies a.no').click(function(){
			$("div.optional").removeClass("waiting");
			$('div.layers').next('div.loading').remove();
			$('div.layer_inconsistencies_wrap').remove();
		});
	},
	findOptNameAndType: function(opt, optList){//ciclo su tutti gli opt restituiti dalla getOptList, per recuperare il nome di un opt a partire dal codice
		for(var i=0, len=optList.Categories.length; i<len; i++){
			for(var j=0, l=optList.Categories[i].OptionalList.length; j<l; j++){
				var el = optList.Categories[i].OptionalList[j];
				var elCode = el.code;
				var elDoubleCode = el.doubleCode;
				var elName = el.name;
				var elType = optList.Categories[i].type;//la tipologia (serve per identificare cerchioni, colori e tessuti)
				var elStandard = el.standard == true ? 'yes' : 'no';
				
/* 				if(opt == elCode || opt == elDoubleCode){
					var elNameAndType = '<span data-opt="'+opt+'" data-type="'+elType+'" data-standard="'+elStandard+'">'+elName+'</span>';
					return elNameAndType;
					break;
				}  */
				
				if(opt == elCode || opt == elDoubleCode){
					if(elDoubleCode!=''){//se si tratta di un colore carrozzeria o di un colore tessuti interni allora prendo il doubleCode
						opt = elDoubleCode;
					}
					var elNameAndType = '<span data-opt="'+opt+'" data-type="'+elType+'" data-standard="'+elStandard+'">'+elName+'</span>';
					return elNameAndType;
					break;
				}
			}
		}
	},
	getOptThumb: function(optIncons){//get opt thumb for inconsistencies overlay
		var Thumbnail = '';
		$(cms.cmsData).find('item').each(function(){
			var optId = $('VehicleOptionalId',this).text();
			//$.log('optId '+optId+' optIncons '+optIncons);
			if (optId == optIncons) {
				Thumbnail = $('Thumbnail',this).text();
				return false;
			}
		});
		return Thumbnail;
	},
	closeLayer: function(param, info, response){//obsolete
		$('div.layer_inconsistencies_wrap').remove();
		switch (param) {
			case currentCar:
				//$.log('current car');
				myPanel.printPrice(param, info, response);
			break;
			case modelCar:
				//$.log('model car');
				modelPanel.printPrice(param, info, response);
			break;
			default:
				//$.log('default');
		}
		//to do: update price for other trim inconsistencies and change mvs overlay inconsistencies (even if it should never occur)
	}
};

var coa = {
	otherTrim: [],
	trimCount: 0,
	loadFB: null,
	span: $("<span></span>"),
	init: function(el){
		coa.otherTrim=[];
		coa.trimCount=0;
		
		var coaHtml = '<div class="coa_content">'+
						'<div class="model_version">'+
							'<div class="carousel_wrapper">'+
								'<a class="btn_prev" href="#"></a>'+
								'<div class="carousel">'+
									'<ul>'+
										'<li><div class="loading"><img src="'+fiat_respath+'img/ajax.gif" /></div></li>'+
									'</ul>'+
								'</div>'+
								'<a class="btn_next" href="#"></a>'+
							'</div>'+
							'<div class="data_wrapper">'+
								'<div class="colors_wrap"></div>'+
								'<div class="model_data">'+
									'<div class="model_attr">'+
										'<h2>'+
											'<span></span> <span></span>'+
										'</h2>'+
										'<p></p>'+
									'</div>'+
									'<p class="price"></p>'+
								'</div>'+
							'</div>'+
						'</div>'+
						'<div class="actions">'+
							'<a class="build" href="#">'+printMsg("configurator", "build")+'</a>'+
							'<a class="discover" href="#">'+printMsg("configurator", "discover")+'</a>'+
							'<a class="brochure" href="#">'+printMsg("configurator", "brochure")+'</a>'+
							'<a class="tdrive_ca" rel="tdrive_ca" href="#">Test drive</a>'+//msg.js?
							'<div class="fb_wrap">'+
								'<div data-layout="button_count" data-show-faces="false" data-width="50" data-send="false" class="fb-like"></div>'+
							'</div>'+
							'<div id="fb-root"></div>'+
						'</div>'+
					'</div>';
		
		layerCOA = new Layer();
		layerCOA.init();
		layerCOA.loaderWrapper.addClass('coa');
		layerCOA.loader.append(coaHtml);
		layerCOA.openLayer(el);
		coa.loadFB = new LoadSocialNetworks();
		coa.loadFB.loadFB();
		
		openObj($(".tdrive_ca"));
		
		var info = {
			categoryFilter : '$'
		};
		
		var trimToLoad = el.parent().find('div.related_trim');
		
		trimToLoad.each(function(){
			var _this = $(this);
			
			var trimValue = _this.find('input.trim').val();
			var trimValueSplit = trimValue.split('|');
			var trim_model = trimValueSplit[0];
			var trim_version = trimValueSplit[1];
			var trim_carCode = trimValueSplit[2];
			var trim_colorExt = trimValueSplit[3];
			var trim_colorInt = trimValueSplit[4];
			
			var trimRel = _this.find('input.trim').attr('rel');
			var trimRelSplit = trimRel.split('_');
			var trim_modelDesc = trimRelSplit[0];
			var trim_versionDesc = trimRelSplit[1];
			
			var ebrochure = _this.find('input.ebrochure').val();
			var modelPage = _this.find('input.modelPage').val();
			
			var colors = _this.find('input.colors').val();
			/* var data = 'market='+param.market+'&language='+param.language+'&carCode='+param.carCode+'&operation='+info.operation+'&optional='+encodeURIComponent(info.optional)+'&selectedOptionals='+encodeURIComponent(param.selectedOpt)+'&optionalsToAdd='+encodeURIComponent(info.optionalsToAdd); */
			var newTrim = {
				market: fiat_market,
				language: fiat_lang,
				modelId: trim_model,
				modelDesc: trim_modelDesc,
				versionId: trim_version,
				versionDesc: trim_versionDesc,
				carCode: trim_carCode,
				colorExt: trim_colorExt,
				colorInt: trim_colorInt,
				linkEbrochure: ebrochure, 
				linkModelPage: modelPage,
				colorsInfo: colors,
				//selectedOpt: trim_colorExt+'|'+trim_colorInt,
				//selectedOpt: trim_colorExt,
				selectedOpt: trim_colorInt,
				trimValue: trimValue
			};
			coa.otherTrim.push(newTrim);
		});
		
		$('div.coa_content div.carousel ul').html('');
		
		for(var i=0, len=coa.otherTrim.length; i<len; i++){
			coa.trimCount++;
			var tempTrimParam = coa.otherTrim[i];
			
			//var el =	'<li rel="'+tempTrimParam.carCode+'_'+tempTrimParam.colorExt+'_'+tempTrimParam.colorInt+'">'+
			var el =	'<li rel="'+tempTrimParam.carCode+'">'+
							//'<img alt="" src="'+fiat_respath+'img/placeholder/ph03.png" />'+
							'<img alt="" src="'+fiat_respath+'img/placeholder/logo_bw.gif" />'+
							'<input type="hidden" class="rt_modelDesc" rel="'+tempTrimParam.modelId+'" value="'+tempTrimParam.modelDesc+'" />'+
							'<input type="hidden" class="rt_versionDesc" rel="'+tempTrimParam.versionId+'" value="'+tempTrimParam.versionDesc+'" />'+
							'<input type="hidden" class="rt_engineDesc" value="" rel="'+tempTrimParam.carCode+'" />'+
							'<input type="hidden" class="rt_colorExt" value="'+tempTrimParam.colorExt+'" />'+
							'<input type="hidden" class="rt_colorInt" value="'+tempTrimParam.colorInt+'" />'+
							'<input type="hidden" class="rt_price" value="" />'+
							'<input type="hidden" class="rt_ebrochure" value="'+tempTrimParam.linkEbrochure+'" />'+
							'<input type="hidden" class="rt_discover" value="'+tempTrimParam.linkModelPage+'" />'+
							'<input type="hidden" class="rt_colorsSize" value="'+tempTrimParam.colorsInfo+'" />'+
							'<input type="hidden" class="rt_stdOpt" value="" />'+
							//'<input type="hidden" class="rt_build" value="2.1.0_model_page_upper.html?status=1" />'+
							//'<input type="hidden" class="rt_testdrive" value="" />'+
							'<div class="data_hidden">'+
								'<dl class="colors" rel="'+tempTrimParam.carCode+'"><dt></dt></dl>'+
							'</div>'+
						'</li>';
			
			$('div.coa_content div.carousel ul').append(el);
			//$.log(coa.trimCount);
			if(coa.trimCount == 1){
				coa.printFirstModel();
				coa.printFirstVersion();
				coa.printFirstLink(tempTrimParam.trimValue);
				coa.printFirstDataTracking();
				//cc.getTrim(tempTrimParam, coa.printFirstEngineAndPrice);
				cc.getOptExt(tempTrimParam, info, coa.printFirstColors);
				cc.getTrim(tempTrimParam, coa.printFirstEngine);
				cc.getOptStandard(tempTrimParam, coa.printFirstStandard);
			} else {
				cc.getOptExt(tempTrimParam, info, coa.printColors);
				cc.getTrim(tempTrimParam, coa.printEngine);
				cc.getOptStandard(tempTrimParam, coa.printStandard);
			}
			if (coa.trimCount == coa.otherTrim.length) {
				coa.trigCarousel();
				coa.changeColor();
			};
		}
		
		//var trackClicks = new TrackClicks();// sophus tracking
		//trackClicks.tracking($('div.coa_content'));
	},
	cmsFirstImage: function(response, param){//printing car image for carousel
		//$.log('cmsFirstImage '+param.colorExt);
		$(response).find('item').each(function(){
			var optId = $('VehicleColorId',this).text();
			var currentLi = $('div.coa_content').find('li[rel="'+param.carCode+'"]');
			if (optId == param.colorExt) {
				var imageCOA = $('imageCOA',this).text();
				//var currentLi = $('div.coa_content').find('li[rel="'+param.carCode+'_'+param.colorExt+'_'+param.colorInt+'"]');
				//var currentLi = $('div.coa_content').find('li[rel="'+param.carCode+'"]');
				currentLi.children('img').attr({'src':cmsPath+imageCOA});//update img
				//currentLi.children('input.rt_colorExt').val(param.colorExt);//update hidden too
				//return false;
			}
			var COAImage = $('COAImage',this).text();
			$('div.coa_content div.data_wrapper dl.colors').children('dt[rel="'+optId+'"]').find('img').attr({'src':cmsPath+COAImage});//update little tongue :P
			$('div.coa_content').find('li[rel="'+param.carCode+'"]').find('div.data_hidden dl.colors').children('dt[rel="'+optId+'"]').find('img').attr({'src':cmsPath+COAImage});//update hidden too
		});
	},
	cmsImage: function(response, param){//printing car image for carousel
		//$.log('cmsImage '+param.colorExt);
		$(response).find('item').each(function(){
			var optId = $('VehicleColorId',this).text();
			var currentLi = $('div.coa_content').find('li[rel="'+param.carCode+'"]');
			if (optId == param.colorExt) {
				var imageCOA = $('imageCOA',this).text();
				//var currentLi = $('div.coa_content').find('li[rel="'+param.carCode+'_'+param.colorExt+'_'+param.colorInt+'"]');
				//var currentLi = $('div.coa_content').find('li[rel="'+param.carCode+'"]');
				currentLi.children('img').attr({'src':cmsPath+imageCOA});//update img
				//currentLi.children('input.rt_colorExt').val(param.colorExt);//update hidden too
				//return false;
			}
			var COAImage = $('COAImage',this).text();
			//$('div.coa_content div.data_wrapper dl.colors').children('dt[rel="'+optId+'"]').find('img').attr({'src':cmsPath+COAImage});//update little tongue :P
			$('div.coa_content').find('li[rel="'+param.carCode+'"]').find('div.data_hidden dl.colors').children('dt[rel="'+optId+'"]').find('img').attr({'src':cmsPath+COAImage});//update hidden too
		});
	},
	cmsImageCar: function(response, param){//printing car image for carousel
		//$.log('cmsImageCar '+param.colorExt);
		$(response).find('item').each(function(){
			var optId = $('VehicleColorId',this).text();
			var currentLi = $('div.coa_content').find('li[rel="'+param.carCode+'"]');
			if (optId == param.colorExt) {
				var imageCOA = $('imageCOA',this).text();
				//var currentLi = $('div.coa_content').find('li[rel="'+param.carCode+'_'+param.colorExt+'_'+param.colorInt+'"]');
				//var currentLi = $('div.coa_content').find('li[rel="'+param.carCode+'"]');
				//$.log(currentLi)
				currentLi.children('img').attr({'src':cmsPath+imageCOA});//update img
				//currentLi.children('input.rt_colorExt').val(param.colorExt);//update hidden too
				return false;//update just image car, so when I find the current color break the cycle
			}
		});
	},
	cmsFirstTiles: function(param){//obsolete; printing color tiles
		//$.log(param.colorExt);
		$(cms.cmsData).find('item[type="1"]').each(function(){//cycle cms.cmsData to gain little coloured tongues :P
			//var VehicleTrimId = $('VehicleTrimId',this).text();
			var optId = $('VehicleOptionalId',this).text();
			//$.log(optId + ' c ' + optId.indexOf("$"));
			if ( optId.indexOf("$") >= 0 ) {//if opt is an ext color
				var COAImage = $('COAImage',this).text();
				//$.log(COAImage);
				$('div.coa_content div.data_wrapper dl.colors').children('dt[rel="'+optId+'"]').find('img').attr({'src':cmsPath+COAImage});//update little tongue :P
				$('div.coa_content').find('li[rel="'+param.carCode+'"]').find('div.data_hidden dl.colors').children('dt[rel="'+optId+'"]').find('img').attr({'src':cmsPath+COAImage});//update hidden too
				//return false;
			}
		});
	},
	cmsTiles: function(param){//obsolete; printing color tiles
		//$.log('cmsTiles '+param.carCode);
		$(cms.cmsData).find('item[type="1"]').each(function(){//cycle cms.cmsData (type 1 filters external opt) to gain little coloured tongues :P
			//var VehicleTrimId = $('VehicleTrimId',this).text();
			var optId = $('VehicleOptionalId',this).text();
			//$.log(optId + ' c ' + optId.indexOf("$"));
			if ( optId.indexOf("$") >= 0 ) {//if opt is an ext color
				var COAImage = $('COAImage',this).text();
				//$.log(COAImage);
				$('div.coa_content').find('li[rel="'+param.carCode+'"]').find('div.data_hidden dl.colors').children('dt[rel="'+optId+'"]').find('img').attr({'src':cmsPath+COAImage});//update hidden too
				//return false;
			}
		});
	},
	printFirstStandard: function(param, response){
		for (var i=0, len=response.Categories.length; i<len; i++){
			for (var j=0, l=response.Categories[i].OptionalList.length; j<l; j++){
				param.selectedOpt += '|'+response.Categories[i].OptionalList[j].code;
			}
		}
		
		$('div.coa_content').find('li[rel="'+param.carCode+'"]').children('input.rt_stdOpt').val(param.selectedOpt);
		
		var info = {
			operation: 'ADD',//fake add
			//optional: '',//no optional to add, just a check to update price when landing
			//optional: param.colorInt,
			optional: param.colorExt,
			optionalsToAdd: ''
		};
		cc.checkConfigConsist(param, info, coa.printFirstPrice);
	},
	printStandard: function(param, response){
		for (var i=0, len=response.Categories.length; i<len; i++){
			for (var j=0, l=response.Categories[i].OptionalList.length; j<l; j++){
				param.selectedOpt += '|'+response.Categories[i].OptionalList[j].code;
			}
		}
		$('div.coa_content').find('li[rel="'+param.carCode+'"]').children('input.rt_stdOpt').val(param.selectedOpt);
		var info = {
			operation: 'ADD',//fake add
			//optional: '',//no optional to add, just a check to update price when landing
			//optional: param.colorInt,
			optional: param.colorExt,
			optionalsToAdd: ''
		};
		cc.checkConfigConsist(param, info, coa.printPrice);
	},
	printFirstPrice: function(param, info, response){
		param.selectedOpt = response.optionals;
		param.price = response.Price[0].value;//list price
		param.price = addDot(param.price);
		//$.log('printFirstPrice '+param.colorExt);
		//$('div.coa_content div.carousel ul').find('li[rel="'+param.carCode+'_'+param.colorExt+'_'+param.colorInt+'"]').children('input.rt_price').val(param.price);
		$('div.coa_content div.carousel ul').find('li[rel="'+param.carCode+'"]').children('input.rt_colorExt').val(param.colorExt);
		param.pricePromo = '0';
		if(response.Price[2]){
			param.pricePromo = response.Price[2].value;
		}
		
		if ( parseFloat( param.pricePromo.replace(",",".") ) > 0) {//convert comma to dot on the fly (to keep original value)
			param.pricePromo = addDot(param.pricePromo);
			$('div.coa_content div.carousel ul').find('li[rel="'+param.carCode+'"]').children('input.rt_price').val(param.pricePromo);
			$('div.coa_content').find('div.data_wrapper').find('p.price').html( printMsg('currency', param.market) +param.pricePromo);
			//$('div.mvs').filter('[rel="'+param.carCode+'"]').find('div.price').text(pricePromo).prepend( printMsg("currency", param.market) );
		} else {//no promo
			$('div.coa_content div.carousel ul').find('li[rel="'+param.carCode+'"]').children('input.rt_price').val(param.price);
			$('div.coa_content').find('div.data_wrapper').find('p.price').html( printMsg('currency', param.market) +param.price);
			//$('div.mvs').filter('[rel="'+param.carCode+'"]').find('div.price').text(price).prepend( printMsg("currency", param.market) );
		}
	},
	printPrice: function(param, info, response){
		param.selectedOpt = response.optionals;
		param.price = response.Price[0].value;//list price
		//param.price = addDot(param.price);
		//$('div.coa_content div.carousel ul').find('li[rel="'+param.carCode+'_'+param.colorExt+'_'+param.colorInt+'"]').children('input.rt_price').val(param.price);
		$('div.coa_content div.carousel ul').find('li[rel="'+param.carCode+'"]').children('input.rt_colorExt').val(param.colorExt);
		
		param.pricePromo = '0';
		if(response.Price[2]){
			param.pricePromo = response.Price[2].value;
		}
		
		if ( parseFloat( param.pricePromo.replace(",",".") ) > 0) {//convert comma to dot on the fly (to keep original value)
			//pricePromo = addDot(pricePromo);
			$('div.coa_content div.carousel ul').find('li[rel="'+param.carCode+'"]').children('input.rt_price').val(param.pricePromo);
			//$('div.coa_content').find('div.data_wrapper').find('p.price').html( printMsg('currency', param.market) +param.pricePromo);
			//$('div.mvs').filter('[rel="'+param.carCode+'"]').find('div.price').text(pricePromo).prepend( printMsg("currency", param.market) );
		} else {//no promo
			$('div.coa_content div.carousel ul').find('li[rel="'+param.carCode+'"]').children('input.rt_price').val(param.price);
			//$('div.mvs').filter('[rel="'+param.carCode+'"]').find('div.price').text(price).prepend( printMsg("currency", param.market) );
		}
		
		
		
	},
	printFirstModel: function(){
		var firstModelDesc = $('div.coa_content div.carousel ul li').eq(0).find('input.rt_modelDesc').val();
		$('div.coa_content').find('div.data_wrapper').find('div.model_attr h2').children('span').eq(0).html(firstModelDesc);
		
		var firstModelId = $('div.coa_content div.carousel ul li').eq(0).find('input.rt_modelDesc').attr('rel');
		$('div.coa_content').find('a.tdrive_ca').attr({'data-model':firstModelId});
	},
	printFirstVersion: function(param, versionDesc, allVersions){
		var firstVersionDesc = $('div.coa_content div.carousel ul li').eq(0).find('input.rt_versionDesc').val();
		$('div.coa_content').find('div.data_wrapper').find('div.model_attr h2').children('span').eq(1).html(firstVersionDesc); 
	},
	printFirstLink: function(trimValue){
		var firstModelPage = $('div.coa_content div.carousel ul li').eq(0).find('input.rt_discover').val();
		var firstEbrochure = $('div.coa_content div.carousel ul li').eq(0).find('input.rt_ebrochure').val();
		var firstModelDesc = $('div.coa_content div.carousel ul li').eq(0).find('input.rt_modelDesc').val().toLowerCase();
		var firstVersionDesc = $('div.coa_content div.carousel ul li').eq(0).find('input.rt_versionDesc').val().toLowerCase();
		
		trimValue = trimValue.replace('#','@');
		
		$('div.coa_content').find('div.actions').find('a.build').attr({'href':firstModelPage+'?status=1&car='+trimValue});
		$('div.coa_content').find('div.actions').find('a.discover').attr({'href':firstModelPage+'?status=0'});
		$('div.coa_content').find('div.actions').find('a.brochure').attr({'href':firstEbrochure});
		//$('div.coa_content').find('div.actions').find('div.fb_wrap div.fb-like').attr({'data-href':firstModelPage + '?mvs=' + firstModelDesc + "_" + firstVersionDesc});
		$('div.coa_content').find('div.actions').find('div.fb_wrap div.fb-like').attr({'data-href':location.protocol+'//'+location.hostname+firstModelPage});//fb needs absolute url
	},
	printEngine: function(param, engineId, engineDesc, gearId, gearDesc, fuelId, fuelDesc, driveId, driveDesc, price, priceNoVat, pricePromo, allFuels, allTrims){
		//$('div.coa_content div.carousel ul').find('li[rel="'+param.carCode+'_'+param.colorExt+'_'+param.colorInt+'"]').children('input.rt_engineDesc').val(engineDesc);
		$('div.coa_content div.carousel ul').find('li[rel="'+param.carCode+'"]').children('input.rt_engineDesc').val(engineDesc);
		//$('div.coa_content div.carousel ul').find('li[rel="'+param.carCode+'_'+param.colorExt+'"]').children('input.rt_price').val(price);
	},
	printFirstEngine: function(param, engineId, engineDesc, gearId, gearDesc, fuelId, fuelDesc, driveId, driveDesc, price, priceNoVat, pricePromo, allFuels, allTrims){
		//$('div.coa_content div.carousel ul').find('li[rel="'+param.carCode+'_'+param.colorExt+'_'+param.colorInt+'"]').children('input.rt_engineDesc').val(engineDesc);
		$('div.coa_content div.carousel ul').find('li[rel="'+param.carCode+'"]').children('input.rt_engineDesc').val(engineDesc);
		//$('div.coa_content div.carousel ul').find('li[rel="'+param.carCode+'_'+param.colorExt+'"]').children('input.rt_price').val(price);
		$('div.coa_content').find('div.data_wrapper').find('div.model_attr p').html(engineDesc);
		//$('div.coa_content').find('div.data_wrapper').find('p.price').html(price).prepend( printMsg("currency", fiat_market) );
	},
	printFirstDataTracking: function(){
		var firstModelDesc = $('div.coa_content div.carousel ul li').eq(0).find('input.rt_modelDesc').val().toLowerCase();
		var firstVersionDesc = $('div.coa_content div.carousel ul li').eq(0).find('input.rt_versionDesc').val().toLowerCase();
		var coaContent = $('div.coa_content');
		var actions = coaContent.find('div.actions');
		
		//coaContent.find('a.btn_prev').attr({'data-tracking': '/our-cars/' +firstModelDesc+ '/' +firstVersionDesc+ '/circle-of-action/change-version'});
		//coaContent.find('a.btn_next').attr({'data-tracking': '/our-cars/' +firstModelDesc+ '/' +firstVersionDesc+ '/circle-of-action/change-version'});
		actions.find('a.build').attr({'data-tracking': '/our-cars/' +firstModelDesc+ '/' +firstVersionDesc+ '/circle-of-action/build'});
		actions.find('a.discover').attr({'data-tracking': '/our-cars/' +firstModelDesc+ '/' +firstVersionDesc+ '/circle-of-action/discover'});
		actions.find('a.brochure').attr({'data-tracking': '/our-cars/' +firstModelDesc+ '/' +firstVersionDesc+ '/circle-of-action/ebrochure'});
		//actions.find('a.tdrive_ca').attr({'data-tracking': '/our-cars/' +firstModelDesc+ '/' +firstVersionDesc+ '/circle-of-action/test-drive'});
		//actions.find('div.fb_wrap div').attr({'data-tracking': '/our-cars/' +firstModelDesc+ '/' +firstVersionDesc+ '/circle-of-action/facebook-like'});
	},
	trigCarousel: function(){
		var coaContent = $('div.coa_content');
		var carousel = coaContent.find('div.carousel');
		var lis = carousel.find('li');
		var btn_prev = coaContent.find('div.carousel_wrapper a.btn_prev');
		var btn_next = coaContent.find('div.carousel_wrapper a.btn_next');
		var dataWrapper = coaContent.find('div.data_wrapper');
		var actions = coaContent.find('div.actions');
		
		btn_prev.addClass("disabled");//hide prev arrow when opening coa (first element)
		if (coa.otherTrim.length == 1) {
			btn_next.addClass("disabled");//hide next arrow too: there's only one element
		}
		
		carousel.jCarouselLite({
			btnNext: 'a.btn_next',
			btnPrev: 'a.btn_prev',
			visible: 1,
			circular: false,
			speed: 800,
			beforeStart: function(a){
				var on = a.eq(0);
				dataWrapper.find('.colors, .model_attr, .price').animate({'opacity':0});
				//destroy fb like button to update it with the new model data (done in coa.writeTrimData)
				actions.find("div.fb-like").remove();
			},
			afterEnd: function(a){
				var on = a.eq(0);
				coa.writeTrimData(on);
				dataWrapper.find('.colors, .model_attr, .price').animate({'opacity':1});
			}
		});
	},
	writeTrimData: function(on){
		var onModelId = on.find('input.rt_modelDesc').attr('rel');
		var onModelDesc = on.find('input.rt_modelDesc').val().toLowerCase();//lowercase for sophus
		var onVersionId = on.find('input.rt_versionDesc').attr('rel');
		var onVersionDesc = on.find('input.rt_versionDesc').val().toLowerCase();//lowercase for sophus
		var onCarCode = on.find('input.rt_engineDesc').attr('rel');
		var onEngineDesc = on.find('input.rt_engineDesc').val();
		var onColorExt = on.find('input.rt_colorExt').val();
		var onColorInt = on.find('input.rt_colorInt').val().replace('#','@');
		var onPrice = on.find('input.rt_price').val();
		onPrice = addDot(onPrice);
		onPrice = onPrice.replace("..", ".");//removing double dot when getting back to the first item of the carousel, because the first dot is printed in printFirstPrice
		var onColors = on.find('div.data_hidden dl.colors').clone();
		//$.log(onColors);
		var onModelPage = on.find('input.rt_discover').val();
		var onEbrochure = on.find('input.rt_ebrochure').val();
		//var onBuild = on.find('input.rt_build').val();
		//var onTestdrive = on.find('input.rt_testdrive').val();
		var coaContent = $('div.coa_content');
		var dataWrapper = coaContent.find('div.data_wrapper');
		var actions = coaContent.find('div.actions');
		var fb = '<div data-layout="button_count" data-show-faces="false" data-width="50" data-send="false" class="fb-like"></div>';
		
		dataWrapper.find('div.colors_wrap').html(onColors);
		$('div.data_wrapper dl.colors dt').find('span').remove();
		$('div.data_wrapper dl.colors dt').removeClass('selected').filter('[rel="'+onColorExt+'"]').addClass('selected').append(coa.span);
		$('div.data_wrapper dl.colors dt[rel="'+onColorExt+'"]').addClass('selected').append(coa.span);
		dataWrapper.find('div.model_attr h2').children('span').eq(0).html(onModelDesc);
		dataWrapper.find('div.model_attr h2').children('span').eq(1).html(onVersionDesc);
		dataWrapper.find('div.model_attr p').html(onEngineDesc);
		dataWrapper.find('p.price').html(onPrice).prepend( printMsg("currency", fiat_market) );
		
		var trimValue = onModelId+'|'+onVersionId+'|'+onCarCode+'|'+onColorExt+'|'+onColorInt;
		
		actions.find("div.fb_wrap").html(fb);// re-building fb like button
		
		actions.find('a.build').attr(
			{
				//'href':onModelPage+'?status=1&car='+trimValue,
				'href':onModelPage+'?status=1&car='+trimValue,
				'data-tracking': '/our-cars/' +onModelDesc+ '/' +onVersionDesc+ '/circle-of-action/build'
			}
		);
		actions.find('a.discover').attr(
			{
				'href':onModelPage+'?status=0',
				'data-tracking': '/our-cars/' +onModelDesc+ '/' +onVersionDesc+ '/circle-of-action/discover'
			}
		);
		actions.find('a.brochure').attr(
			{
				'href':onEbrochure,
				'data-tracking': '/our-cars/' +onModelDesc+ '/' +onVersionDesc+ '/circle-of-action/ebrochure'
			}
		);
		actions.find('a.tdrive_ca').attr(
			{
				//'href':"",//da valorizzare
				'data-model': onModelId,
				//'data-tracking': '/our-cars/' +onModelDesc+ '/' +onVersionDesc+ '/circle-of-action/test-drive'
			}
		);
		actions.find('div.fb_wrap div.fb-like').attr(
			{
				//'data-href': onModelPage + '?mvs=' + onModelDesc + "_" + onVersionDesc//,
				'data-href': location.protocol+'//'+location.hostname+onModelPage//,//fb needs absolute url
				//'data-tracking': '/our-cars/' +onModelDesc+ '/' +onVersionDesc+ '/circle-of-action/facebook-like'
			}
		);
		
		FB.XFBML.parse();// re-parsing and rendering fb like button
		
		if(on.find('input.rt_colorsSize').val() != ''){
			var onColorsSize = eval("(" + on.find('input.rt_colorsSize').val() + ")");
			coa.handleColorsSize(onColorsSize);
		}
		//coa.changeColor();
	},
	printFirstColors: function(param, response, allColors){
		var code = '';
		
		//$('div.coa div.data_wrapper dl.colors').children("dt").removeClass("selected");
		for (var j=0, l=response.Categories[0].OptionalList.length; j<l; j++) {
			if ( response.Categories[0].OptionalList[j].doubleCode == param.colorExt ) {
				code += '<dt rel="'+response.Categories[0].OptionalList[j].doubleCode+'" class="selected">'+
						'<a href="#" title="'+response.Categories[0].OptionalList[j].name+'"><img src="'+fiat_respath+'img/placeholder/colors/default_coa.png" alt="" /></a>'+
						//'<a href="#" title="'+response.Categories[0].OptionalList[j].name+'"><img src="" alt="" /></a>'+
						'<span></span>'+
					'</dt>';
			} else {
				code += '<dt rel="'+response.Categories[0].OptionalList[j].doubleCode+'">'+
						'<a href="#" title="'+response.Categories[0].OptionalList[j].name+'"><img src="'+fiat_respath+'img/placeholder/colors/default_coa.png" alt="" /></a>'+
						//'<a href="#" title="'+response.Categories[0].OptionalList[j].name+'"><img src="" alt="" /></a>'+
					'</dt>';
			}
		}
		
		//var liOn = param.carCode+'_'+param.colorExt+'_'+param.colorInt;
		var liOn = param.carCode;
		$('div.coa_content div.carousel ul').find('li[rel="'+liOn+'"]').find('dl.colors').html(code);//keep updated hidden info
		$('div.coa_content').find('div.data_wrapper').find('div.colors_wrap').html('<dl class="colors" rel="'+param.carCode+'">'+code+'</dl>');//update visible info
		
		if(param.colorsInfo != ''){
			var colors = eval("(" + param.colorsInfo + ")");
			coa.handleColorsSize(colors);
		}
		//cms.getTrim(coa.cmsImage, param);//needs to be here 'cause we have to wait VL call
		
		//cms.getOpt(param, coa.cmsFirstTiles);//cms call for first element
		//cms.getTrim(coa.cmsImage, '&Expression=VehicleTrim,'+param.carCode, param);//needs to be here 'cause we have to wait VL call
		cms.getTrim(coa.cmsFirstImage, '&Expression=VehicleTrim,'+param.carCode, param);//needs to be here 'cause we have to wait VL call
		//coa.changeColor();
	},
	printColors: function(param, response, allColors){
		var code = '';
		
		for (var j=0, l=response.Categories[0].OptionalList.length; j<l; j++) {
			if ( response.Categories[0].OptionalList[j].doubleCode == param.colorExt ) {
				code += '<dt rel="'+response.Categories[0].OptionalList[j].doubleCode+'" class="selected">'+
						'<a href="#" title="'+response.Categories[0].OptionalList[j].name+'"><img src="'+fiat_respath+'img/placeholder/colors/default_coa.png" alt="" /></a>'+
						//'<a href="#" title="'+response.Categories[0].OptionalList[j].name+'"><img src="" alt="" /></a>'+
						'<span></span>'+
					'</dt>';
			} else {
				code += '<dt rel="'+response.Categories[0].OptionalList[j].doubleCode+'">'+
						'<a href="#" title="'+response.Categories[0].OptionalList[j].name+'"><img src="'+fiat_respath+'img/placeholder/colors/default_coa.png" alt="" /></a>'+
						//'<a href="#" title="'+response.Categories[0].OptionalList[j].name+'"><img src="" alt="" /></a>'+
					'</dt>';
			}
		}
		
		//var liOn = param.carCode+'_'+param.colorExt+'_'+param.colorInt;
		var liOn = param.carCode;
		$('div.coa_content div.carousel ul').find('li[rel="'+liOn+'"]').find('div.data_hidden').find('dl.colors').html(code);
		
		if(param.colorsInfo != ''){
			var colors = eval("(" + param.colorsInfo + ")");
		}
		
		//cms.getOpt(param, coa.cmsTiles);//cms call for other elements
		//cms.getTrim(coa.cmsImage, param);//needs to be here 'cause we have to wait VL call
		cms.getTrim(coa.cmsImage, '&Expression=VehicleTrim,'+param.carCode, param);//needs to be here 'cause we have to wait VL call
		
		//coa.changeColor(param);
	},
	handleColorsSize: function(colors){
		if (colors.full) {
			for(var i=0, l=colors.full.length; i<l; i++){
				$('div.coa_content').find('div.data_wrapper').find('dl.colors').find('dt[rel="'+colors.full[i]+'"]').addClass('full');
			}
		}
		if (colors.half) {
			for(var i=0, l=colors.half.length; i<l; i++){
				$('div.coa_content').find('div.data_wrapper').find('dl.colors').find('dt[rel="'+colors.half[i]+'"]').addClass('half');
			}
		}
	},
	changeColor: function(){
		var tempParam = {
			market: fiat_market,
			language: fiat_lang,
			carCode: '',
			selectedOpt: '',
			colorExt: ''
		};
		$('div.coa dl.colors a').live('click',function(){
			var _this = $(this);
			//$.log('dentro click');
			tempParam.carCode = _this.closest('dl.colors').attr('rel');
			tempParam.selectedOpt = $('div.coa_content').find('li[rel="'+tempParam.carCode+'"]').children('input.rt_stdOpt').val();
			$('div.coa_content').find('li[rel="'+tempParam.carCode+'"]').children('input.rt_colorExt').val( _this.parent().attr('rel') );
			
			var info = {
				operation: 'ADD',
				optional: _this.parent().attr('rel'),
				optionalsToAdd: ''
			};
			tempParam.colorExt = $(this).parent().attr('rel');
			cc.checkConfigConsist(tempParam, info, coa.printFirstPrice);
			
			
			var modelId = $('div.coa_content').find('li[rel="'+tempParam.carCode+'"]').children('input.rt_modelDesc').attr('rel');
			var versionId = $('div.coa_content').find('li[rel="'+tempParam.carCode+'"]').children('input.rt_versionDesc').attr('rel');
			var colorInt = $('div.coa_content').find('li[rel="'+tempParam.carCode+'"]').children('input.rt_colorInt').val().replace('#','@');
			var urlDiscover = $('div.coa_content').find('li[rel="'+tempParam.carCode+'"]').children('input.rt_discover').val();
			var url = urlDiscover+'?status=1&car='+modelId+'|'+versionId+'|'+tempParam.carCode+'|'+tempParam.colorExt+'|'+colorInt;
			$('div.coa_content').find('div.actions').find('a.build').attr({'href':url});
			
			$('div.coa div.data_wrapper dl.colors').children("dt").removeClass("selected");
			_this.parent("dt").addClass("selected").append(coa.span);//used only to add a visual hint to the selection
			
			
			//cms.getTrim(coa.cmsImage, tempParam);
			//cms.getTrim(coa.cmsImage, '&Expression=VehicleTrim,'+tempParam.carCode, tempParam);
			cms.getTrim(coa.cmsImageCar, '&Expression=VehicleTrim,'+tempParam.carCode, tempParam);
		})
	}
};

var myPanel = {
	panel: null,
	title: null,
	priceWrap: null,
	modelBtn: null,
	savedBuilds: null,
	save: null,
	tdrive: null,
	remove: null,
	myWheels: null,
	init: function(){
		myPanel.panel = $('div.my_panel');
		myPanel.title = myPanel.panel.find('h1');
		myPanel.priceWrap = myPanel.panel.find('div.price_wrap');
		myPanel.modelBtn = myPanel.panel.find('a.back_MP');
		myPanel.savedBuilds = myPanel.panel.find('a.saved_builds');
		myPanel.save = myPanel.panel.find('a.save');
		myPanel.tdrive = myPanel.panel.find('a.tdrive');
		
		myPanelOuterTabs = new Tabs( myPanel.panel.find('div.tab_wrap').eq(0), true, true);
		myPanelOuterTabs.init();
		myPanelInnerTabs = new Tabs( myPanel.panel.find('div.tab_wrap').eq(1), true, /* false, */ false);
		myPanelInnerTabs.init();
		myPanelOuterTabs.tabControls.click(function(e){
			handleOpt.close();
			e.preventDefault();
		});
		myPanel.myWheels = myPanelInnerTabs.tabContent.eq(0).find('div.optional').eq(2);
		myPanel.remove = myPanel.panel.find("a.remove");
		myPanel.removeItem();
	},
	initDynamic: function(){
		if (!fiatCom.filledMyPanel) {
			fiatCom.filledMyPanel=true;
			//cc.getModel(currentCar, myPanel.printModel);
			//$.log('handleCurrentCar.modelUpdated: '+handleCurrentCar.modelUpdated);
			if (handleCurrentCar.modelUpdated) {//make an ajax call only if needed
				cc.getModel(currentCar, myPanel.printModel);
			} else {//get model name from the current car obj
				//myPanel.printModel(currentCar.modelId, currentCar.modelDesc);
				myPanel.title.find('span').eq(0).html(currentCar.modelDesc);
				
				$('li.finito_model span').html(currentCar.modelDesc);//updating finito page
				$('div.finito h1 span').eq(0).html(currentCar.modelDesc);//updating finito page
			}
			
			//cc.getVersions(currentCar, myPanel.printVersion);
			/* if (handleCurrentCar.versionUpdated) {//obsolete
				cc.getVersions(currentCar, myPanel.printVersion);
			} else {
				//myPanel.printVersion(currentCar, null, '');
				myPanel.title.find('span').eq(1).html(' '+currentCar.versionDesc);
				
				$('li.finito_version span').html(currentCar.versionDesc);//updating finito page
				$('div.finito h1 span').eq(1).html(currentCar.versionDesc);//updating finito page
			} */
			
			//$.log('prima di gettrim '+currentCar.price+currentCar.colorExt+'\n'+currentCar.selectedOpt);
			//cc.getTrim(currentCar, myPanel.printEngineAndPrice);
			cc.getTrim(currentCar, myPanel.printEngine);
			//cms.getTrim(myPanel.printCmsTrim, currentCar);
			cms.getTrim(myPanel.printCmsTrim, '&Expression=VehicleTrim,'+currentCar.carCode, currentCar);
			//$.log('prima di getstandard '+currentCar.price+currentCar.colorExt+'\n'+currentCar.selectedOpt);
			myPanel.getMyExt();
			myPanel.getMyInt();
			cc.getOptStandard(currentCar, myPanel.printStandard);
			
		}
	},
	printModel: function(param, modelDesc, allModels){
		//alert('nome modello: '+modelDesc);
		//if (handleCurrentCar.modelUpdated) {
		currentCar.modelDesc = modelDesc;//keep updated the current car obj
		handleCurrentCar.modelUpdated = false;//prevent another ajax call
		//}
		myPanel.title.find('span').eq(0).text(modelDesc);
		
		$('li.finito_model span').html(currentCar.modelDesc);//updating finito page
		$('div.finito span').eq(0).html(currentCar.modelDesc);//updating finito page
	},
	printVersion: function(param, versionDesc, allVersions){
		//if (handleCurrentCar.versionUpdated) {
			currentCar.versionDesc = versionDesc;//keep updated the current car obj
			handleCurrentCar.versionUpdated = false;//prevent another ajax call
		//}
		myPanel.title.find('span').eq(1).text(' '+versionDesc);
		
		$('li.finito_version span').html(currentCar.versionDesc);//updating finito page
		$('div.finito span').eq(1).html(currentCar.versionDesc);//updating finito page
	},
	//printEngineAndPrice: function(param, engineId, engineDesc, gearId, gearDesc, fuelId, fuelDesc, driveId, driveDesc, price, priceNoVat, pricePromo, allFuels, allTrims){
	printEngine: function(param, engineId, engineDesc, gearId, gearDesc, fuelId, fuelDesc, driveId, driveDesc, price, priceNoVat, pricePromo, allFuels, allTrims){
		$('div.trim_details span').html(fuelDesc+' '+engineDesc);
		//$('div.trim_details span').html(gearDesc+' '+engineDesc);
		
		$('li.finito_engine span').html(engineDesc);//updating finito page
		
		//price now updated after checkconsistency (to consider all selected and standard optionals)
		/* if ( parseFloat( pricePromo.replace(",",".") ) > 0) {//convert comma to dot on the fly (to keep original value)
			myPanel.priceWrap.children('span').eq(0).html( printMsg('currency', currentCar.market) +price);
			myPanel.priceWrap.children('span').eq(1).html( printMsg('currency', currentCar.market) +pricePromo);
		} else {//no promo
			myPanel.priceWrap.children('span').hide().eq(1).show().html( printMsg('currency', currentCar.market) +price);
		}//need to discriminate between regular price and promo price
		currentCar.price = price; */
	},
	printCmsTrim: function(response){
		//$.log( response );
		cms.cmsCurrentTrim = $(response).find("folder");
		var ebrochure = cms.cmsCurrentTrim.children('E-BrochureUrl').text();
		finitoPage.container.find('div.review a.brochure').attr({'href':cmsPath+ebrochure});
		changeViewExt.init();
		changeViewInt.init();
		changeViewExt.updateImg('outside');//update more views images (and finito page too)
		changeViewExt.updateImg('inside');//update more views images (and finito page too)
	},
	getMyExt: function(){//print my ext color to my selection
		var info = {
			categoryFilter : '$'
		};
		//$.log('prima di getOptExt '+currentCar.price+currentCar.colorExt+'\n'+currentCar.selectedOpt);
		cc.getOptExt(currentCar, info, myPanel.printMyExtColor);
	},
	getMyInt: function(){//print my int color to my selection
		var info = {
			categoryFilter : '#'
		};
		//$.log('prima di getOptInt '+currentCar.price+currentCar.colorExt+'\n'+currentCar.selectedOpt);
		cc.getOptInt(currentCar, info, myPanel.printMyIntColor);
	},
	printStandard: function(param, response){
		var code = '';
		for (var i=0, len=response.Categories.length; i<len; i++){
			if (response.Categories[i].cod != '*') {//exclude ghost category
				code += '<strong>'+response.Categories[i].name+'</strong>'+
								'<ul>';
			}
			for (var j=0, l=response.Categories[i].OptionalList.length; j<l; j++){
				if (response.Categories[i].cod != '*') {//exclude ghost category
					code +=		'<li>'+response.Categories[i].OptionalList[j].name+'</li>';
				}
				//if(response.Categories[i].cod=='$' || response.Categories[i].cod=='#'){//in standard optionals there are no colors
					//currentCar.selectedOpt += '|'+response.Categories[i].OptionalList[j].doubleCode;
				//}else{
					//currentCar.selectedOpt += response.Categories[i].OptionalList[j].code+'|';
				//$.log('prima '+currentCar.selectedOpt);
				currentCar.selectedOpt += '|'+response.Categories[i].OptionalList[j].code;
				//$.log('dopo '+currentCar.selectedOpt);
					//param.selectedOpt += '|'+response.Categories[i].OptionalList[j].code;//using 'param' instead of 'currentCar' in order to gain access to this function also to modelCar
				//}
				
				if ( response.Categories[i].cod == '-' ) {
					var wheelName = response.Categories[i].OptionalList[0].name;
					currentCar.stdWheels = response.Categories[i].OptionalList[0].code;//saving default rims to be able to discern 'em
					//var wheelPrice = response.Categories[i].OptionalList[0].price;
					//var myWheel = myPanelInnerTabs.tabContent.eq(0).find('div.optional').eq(2);
					myPanel.myWheels.find('div.img_wrap img').hide();//standard wheels have no img
					/* myPanel.myWheels.find('div.img_wrap img').attr({//copy standard wheels to mySelection
						//'src': wheelImg,//to be leeched from CMS
						'alt': wheelName
					}); */
					myPanel.myWheels.find('div.txt_wrap div.description').html( wheelName );
					//if ( parseFloat( wheelPrice.replace(",",".") ) > 0 ) {
					myPanel.myWheels.find('div.txt_wrap div.pricex_wrap span').text('');//standard wheels have no price
					//}
					$('div.finito_outside ul.summary').find('li[rel="-"] > div').html(wheelName+' <span class="price"><span></span></span>');//copy standard wheels to finito page
				}
				
			}
			if (response.Categories[i].cod != '*') {//exclude ghost category
				code +=		'</ul>';
			}
			
		}
		
		var info = {
			operation: 'ADD',//fake add
			//optional: '',//no optional to add, just a check to update price when landing
			//optional: currentCar.colorInt,
			optional: currentCar.colorExt,
			//selectedOptionals: currentCar.selectedOpt,
			optionalsToAdd: ''
		};
		//$.log('prima di checkConfigConsist '+currentCar.price+currentCar.colorExt+'\n'+currentCar.selectedOpt);
		cc.checkConfigConsist(currentCar, info, myPanel.printPrice);//update price when landing at the page
		myPanelInnerTabs.tabContent.eq(1).html(code);//my panel
		finitoTabs.tabContent.eq(0).html(code);//finito page
	},
	printMyExtColor: function(param, response, allColors) {
		var colorName = '';
		var colorPrice = '';
		for (var i in response.Categories[0].OptionalList) {
			if (response.Categories[0].OptionalList[i].doubleCode == currentCar.colorExt) {
				colorName = response.Categories[0].OptionalList[i].name;
				colorPrice = response.Categories[0].OptionalList[i].price;
				break;
			}
		}
		var myColor = myPanelInnerTabs.tabContent.eq(0).find('div.optional').eq(0);
		myColor.find('div.img_wrap img').attr({
			//'src':colorImg,//to be leeched from CMS
			'alt':colorName
		});
		//$.log('colore esterno '+param.colorExt);
		
		myColor.find('div.txt_wrap div.description').html( colorName );
		//myPanel.cmsMyImages(1);
		if ( parseFloat( colorPrice.replace(",",".") ) > 0 ) {
			myColor.find('div.txt_wrap div.pricex_wrap span').text( colorPrice ).prepend( printMsg('currency', currentCar.market) );
			$('div.finito_outside ul.summary').find('li[rel="$"] span').html(colorName+' <span class="price"><span>'+printMsg('currency', currentCar.market)+colorPrice+'</span></span>');//finito page
		} else {//price equal to 0, then print just color name
			$('div.finito_outside ul.summary').find('li[rel="$"] span').html(colorName);//finito page
		}
	},
	printMyIntColor: function(param, response, allColors) {
		//$.log('colore interno '+param.colorInt);
		var colorName = '';
		var colorPrice = '';
		for (var i in response.Categories[0].OptionalList) {
			//$.log(response.Categories[0].OptionalList[i].doubleCode);
			if (response.Categories[0].OptionalList[i].doubleCode == currentCar.colorInt) {
				colorName = response.Categories[0].OptionalList[i].name;
				colorPrice = response.Categories[0].OptionalList[i].price;
				break;
			}
		}
		var myColor = myPanelInnerTabs.tabContent.eq(0).find('div.optional').eq(1);
		myColor.find('div.img_wrap img').attr({
			//'src':colorImg,//to be leeched from CMS
			'alt':colorName
		});
		myColor.find('div.txt_wrap div.description').html( colorName );
		//myPanel.cmsMyImages(2);
		if ( parseFloat( colorPrice.replace(",",".") ) > 0 ) {
			myColor.find('div.txt_wrap div.pricex_wrap span').text( colorPrice ).prepend( printMsg('currency', currentCar.market) );
			$('div.finito_inside ul.summary').find('li[rel="#"] span').html(colorName+' <span class="price"><span>'+printMsg('currency', currentCar.market)+colorPrice+'</span></span>');//finito page
		} else {//price equal to 0, then print just color name
			$('div.finito_inside ul.summary').find('li[rel="#"] span').html(colorName);//finito page
		}
		
	},
	
	cmsMyImages: function(where){//where: 1 for external, 2 for internal
		$(cms.cmsData).find('item[type="'+where+'"]').each(function(){
			var optId = $('VehicleOptionalId',this).text();
			//$.log(where);
			var colorType = '';
			switch (where) {
				case 1:
					colorType ='colorExt';
				break;
				case 2:
					colorType ='colorInt';
				break;
				default:
			}
			//$.log('optid '+optId+' colorcode '+currentCar[colorType]);
			optId = optId.replace('@','#');
			if ( optId == currentCar[colorType] ) {
				var ColorImage = $('ColorImage',this).text();
				myPanelInnerTabs.tabContent.eq(0).find('div.optional').eq(where-1).find('div.img_wrap img').attr({'src':cmsPath+ColorImage});
				return false;
			}
		});
	},
	
	
	printPrice: function(param, info, response) {
		currentCar.selectedOpt = response.optionals;
		//var price = response.Price[0].value;
		//var pricePromo = response.Price[2].value;
		//$.log('printPrice '+price+'\n'+currentCar.selectedOpt);
		if(response.Price != null){
			currentCar.price = response.Price[0].value;
			currentCar.pricePromo = '0';
			if(response.Price[2]){
				currentCar.pricePromo = response.Price[2].value;
			}
			
			currentCar.price = addDot(currentCar.price);
			currentCar.pricePromo = addDot(currentCar.pricePromo);
		}
		
		if ( parseFloat( currentCar.pricePromo.replace(",",".") ) > 0) {//convert comma to dot on the fly (to keep original value)
			myPanel.priceWrap.children('span').eq(0).html( printMsg('currency', currentCar.market) +currentCar.price);
			myPanel.priceWrap.children('span').eq(1).html( printMsg('currency', currentCar.market) +currentCar.pricePromo);
			//finito page
		} else {//no promo
			myPanel.priceWrap.children('span').hide().eq(1).show().html( printMsg('currency', currentCar.market) +currentCar.price);
		}//need to discriminate between regular price and promo price
		finitoPage.container.find('div.review').find('span.price.tot').html( printMsg('currency', currentCar.market) +currentCar.price);//keep updated finito page
		//myPanel.priceWrap.children('span').eq(1).html( printMsg('currency', currentCar.market) + currentCar.price);
		
		//alert('printprice');
		//handleCurrentCar.clear('current');
		
		//if ( statusHandler.whereLanded != 0 ) {//initredraw only if landing directly on configurator
			handleCurrentCar.initRedraw();
			//} else {//there's no need to redraw car (current car is the same as model car, as for layers)
		//}
		
	},
	removeItem: function(){
		myPanel.remove.click(function(e){
			/* var $this = $(this),
				li = $this.closest("li");
		
			//removing the whole LI if the X is under div.version or removing the whole LI if only one items remained or removing only the span	and showing the default item
			if($this.parents("div.version").hasClass("version")){
				li.remove();
			}else if (li.children("span").length == 1 && !li.hasClass('colors') && !li.hasClass('wheels')){
				$this.parent(".price").closest("li").remove();
			}else{
				$this.parent(".price").parent("span").remove();
				if(li.children("span.price").length == 0 && li.hasClass('colors') || li.hasClass('wheels')){
					li.find(".default").css('display', 'block');
				}
			} */
			e.preventDefault();
		});
	}
};

var modelPanel = {
	SPEED: 400,
	panel: null,
	colorA: null,
	selected: null,
	selectedColor: $('<span></span>'),
	mvs: null,
	detailsAll: null,
	details: null,
	changeBtn: null,
	configureBtn: null,
	findDealer: null,
	eBrochure: null,
	tDrive: null,
	changeVersion: null,
	colorWrapper: null,
	init: function(){
		modelPanel.panel = $('div.model_panel');
		modelPanel.colorLi = modelPanel.panel.find('ul.colors').find('li');
		modelPanel.colorA = modelPanel.colorLi.find('a');
		modelTabs = new Tabs( modelPanel.panel.find('div.tab_wrap'), true, false );
		modelTabs.init();
		modelPanel.selectedName = $('div.model_panel ul.tab_controls').children('li').eq(0);
		modelPanel.selected = $('div.model_panel div.tab_contents').children('div.tab_content').eq(0);
		modelPanel.mvs = $('div.model_panel div.others div.mvs a');
		modelPanel.detailsAll = modelPanel.mvs.children('div.details');
		modelPanel.changeBtn = modelPanel.mvs.find('button');
		modelPanel.configureBtn = modelPanel.panel.find('a.configure');
		modelPanel.findDealer = modelPanel.panel.find('a.dealer');
		modelPanel.eBrochure = modelPanel.panel.find('div.actions').find('a').eq(2);//chiedere ad acn aggiunta classe nell'html per questa <a>
		modelPanel.tDrive = modelPanel.panel.find('a.tdrive');
		modelPanel.changeVersion = modelPanel.panel.find('a.change');
		modelPanel.colorWrapper = $('#above').find('input.colors').val();
		modelPanel.viewMvs();
		//modelPanel.colorLi.filter('.selected').append( modelPanel.selectedColor );//moved to configurator.js
		//modelPanel.colorClick();
		//modelPanel.changeMvs();
		
		//var trackClicks = new TrackClicks(); // sophus tracking
		//trackClicks.tracking( modelPanel.panel );
	},
	initDynamic: function(){
		//$.log(modelCar.modelDesc + modelCar.versionDesc);
		updateDataTracking( modelCar.modelDesc, modelCar.versionDesc, false );//write data-tracking on first items
		if (!fiatCom.filledModelPanel) {
			//$.log('initdynamic if');
			modelTabs.tabControls.eq(0).find('span').eq(0).text(modelCar.modelDesc+' ');
			//modelTabs.tabControls.eq(0).find('span').eq(1).text(modelCar.versionDesc);//obsolete
			
			cc.getTrim(modelCar, modelPanel.printEngine);
			cc.getOptStandard(modelCar, modelPanel.printStandard);
			
			var info = {
				categoryFilter: '$'//filter by body color
			};
			cc.getOptExt(modelCar, info, modelPanel.printColors);
			fiatCom.filledModelPanel = true;
		}else{//model panel has been already initialized, but when you come back from CC to MP you need a redraw (in order to update img layers)
			//$.log('initdynamic else');
			handleCurrentCar.clear('current');
			handleCurrentCar.copy();//update img layers
			handleCurrentCar.initRedraw();
		}
		
		
		if (!fiatCom.filledOthers) {//populate only once
			modelTabs.tabControls.eq(1).click(function(e){
				if (!fiatCom.filledOthers) {//enable only the first click
					modelPanel.handleOther();
				}
				fiatCom.filledOthers = true;
				
/* 				var data = $(this).attr("data-tracking");
				s3_log(data);//sending data to sophus
				$.log($(this).attr("data-tracking")); */
				
				
				e.preventDefault();
			});
		}
		
		modelPanel.findDealer.click(function(){
			var data = $(this).attr("data-tracking");
			s3_log(data);//sending data to sophus
			$.log(data);
		})
	},
	viewMvs: function(){
		modelPanel.mvs.live('click',function(e){//click version
			modelPanel.mvs = $('div.model_panel div.others div.mvs a');
			modelPanel.details = $(this).children('div.details');
			if ( modelPanel.details.is(':visible') ) {
				modelPanel.details.slideUp(modelPanel.SPEED,'linear').closest('div.mvs').removeClass('open');
			} else {
				//modelPanel.detailsAll.slideUp(modelPanel.SPEED,'linear');//hide all
				modelPanel.mvs.children('div.details').slideUp(modelPanel.SPEED,'linear');//hide all
				modelPanel.mvs.parent().removeClass('open');
				modelPanel.details.slideDown(modelPanel.SPEED,'linear').closest('div.mvs').addClass('open');//show only the selected
			}
			e.preventDefault();
		});
	},
	printEngine: function(param, engineId, engineDesc, gearId, gearDesc, fuelId, fuelDesc, driveId, driveDesc, price, priceNoVat, pricePromo, allFuels, allTrims){
		modelTabs.tabContent.eq(0).find('div.engine').text(engineDesc);
	},
	printStandard: function(param, response){
		for (var i=0, len=response.Categories.length; i<len; i++){
			for (var j=0, l=response.Categories[i].OptionalList.length; j<l; j++){
				modelCar.selectedOpt += '|'+response.Categories[i].OptionalList[j].code;
			}
		}
		//$.log('modelCar.colorInt'+modelCar.colorInt)
		var info = {
			operation: 'ADD',//fake add
			//optional: '',//no optional to add, just a check to update price when landing
			//optional: modelCar.colorInt,//aggiungiamo il colore interni per verificare la compatibilita' con gli esterni (forzati)
			optional: modelCar.colorExt,//aggiungiamo il colore interni per verificare la compatibilita' con gli esterni (forzati)
			fromClick: false,
			optionalsToAdd: ''
		};
		cc.checkConfigConsist(modelCar, info, modelPanel.printPrice);
	},
	//printPrice: function(param, engineId, engineDesc, gearId, gearDesc, fuelId, fuelDesc, driveId, driveDesc, price, priceNoVat, pricePromo, allFuels, allTrims){
	printPrice: function(param, info, response){
		//modelTabs.tabContent.eq(0).find('span.price').html( printMsg('currency', currentCar.market) +price);//need to discriminate between regular price and promo price
		modelCar.selectedOpt = response.optionals;
		modelCar.price = response.Price[0].value;
		modelCar.pricePromo = '0';
		if(response.Price[2]){
			modelCar.pricePromo = response.Price[2].value;
		}
		
		modelCar.price = addDot(modelCar.price);
		modelCar.pricePromo = addDot(modelCar.pricePromo);
		//modelCar.selectedOpt = response.Price[2].value;
		if ( parseFloat( modelCar.pricePromo.replace(",",".") ) > 0) {//convert comma to dot on the fly (to keep original value)
			modelTabs.tabContent.eq(0).find('span.price').eq(0).html( printMsg('currency', modelCar.market) +modelCar.price);
			modelTabs.tabContent.eq(0).find('span.price').eq(1).html( printMsg('currency', modelCar.market) +modelCar.pricePromo);
		} else {//no promo
			modelTabs.tabContent.eq(0).find('span.price').hide().eq(1).show().html( printMsg('currency', modelCar.market) + modelCar.price);
		}//need to discriminate between regular price and promo price
		if (info.fromClick) {//update price when changing color
			modelPanel.changeColor(info.clicked);
		} else {//update price when landing at the page
			handleCurrentCar.copy();//update img layers
			//$.log('prima volta');
			handleCurrentCar.initRedraw();
		}
		
	},
	printColors: function(param, response){
		//$.log('printColors');
		var code = '';
		/* $(cms.cmsData).find('item').each(function(i){
			//$.log(i);
		} */
		for (var j=0, l=response.Categories[0].OptionalList.length; j<l; j++) {
			if ( response.Categories[0].OptionalList[j].doubleCode == modelCar.colorExt ) {
				//code += '<li class="selected" rel="'+response.Categories[0].OptionalList[j].doubleCode+'"><a href="#" title="'+response.Categories[0].OptionalList[j].name+'"><img src="'+fiat_respath+'img/placeholder/colors/black.png" alt="" /></a></li>';
				code += '<li class="selected" rel="'+response.Categories[0].OptionalList[j].doubleCode+'"><a href="#" title="'+response.Categories[0].OptionalList[j].name+'"><img src="" alt="" /></a></li>';
			} else {
				//code += '<li rel="'+response.Categories[0].OptionalList[j].doubleCode+'"><a href="#" title="'+response.Categories[0].OptionalList[j].name+'"><img src="'+fiat_respath+'img/placeholder/colors/white.png" alt="" /></a></li>';
				code += '<li rel="'+response.Categories[0].OptionalList[j].doubleCode+'"><a href="#" title="'+response.Categories[0].OptionalList[j].name+'"><img src="" alt="" /></a></li>';
			}
		}
		modelTabs.tabContent.eq(0).find('ul.colors').html(code);
		modelPanel.colorLi = modelPanel.panel.find('ul.colors').find('li');//reassigned due to updated DOM
		modelPanel.colorLi.filter('.selected').append( modelPanel.selectedColor );
		
		//modelPanel.colorWrapper = $('#above').children('input.colors').val();
		var colors = eval("(" + modelPanel.colorWrapper + ")");
		modelPanel.handleColorsSize(colors);
		//modelPanel.cmsImages();//obtain images from cms
		
		modelPanel.colorA.live('click',function(e){
			$('div.layers').after(fiatCom.loadingCC);
			var info = {
				operation: 'ADD',//fake add
				clicked: $(this).parent('li'),
				optional: $(this).parent('li').attr('rel'),
				//selectedOptionals: currentCar.selectedOpt,
				fromClick: true,
				optionalsToAdd: ''
			};
			modelCar.colorExt = info.clicked.attr('rel');
			//$.log('printColors fromclick');
			//$.log(modelCar.selectedOpt);
			cc.checkConfigConsist(modelCar, info, modelPanel.printPrice);//update price when landing at the page
			e.preventDefault();
		});
	},
	cmsImages: function(){
		//$.log('cmsImages');
		$(cms.cmsData).find('item[type="1"]').each(function(i){
			var optId = $('VehicleOptionalId',this).text();
			//$.log(optId + ' c ' + optId.indexOf("$"));
			if ( optId.indexOf("$") >= 0 ) {//if opt is an ext color
				var ColorImage = $('ColorImage',this).text();
				//$.log('ColorImage: '+ColorImage);
				//$.log( i+ ' height: '+modelTabs.tabContent.eq(0).find('ul.colors').children('li[rel="'+optId+'"]').find('img').height() );
				var _imgHolder = modelTabs.tabContent.eq(0).find('ul.colors').children('li[rel="'+optId+'"]');
				var img = new Image();
				img.src = cmsPath+ColorImage;
				img.onload = function() {
					//$.log(this.width + 'x' + this.height);
					if ( img.width>1 && img.height>1 ) {//checking if image exists (1x1 is a placeholder for missing images)
						_imgHolder.find('img').attr({'src':cmsPath+ColorImage});
					} else {
						_imgHolder.hide();//CMS take precedence over VL/PC
					}
				}
				//return false;
			}
		});
	},
	handleColorsSize: function(colors){
		if (typeof(colors.full) != "undefined") {//if 'full' node exists
			for (var i=0, l=colors.full.length; i<l; i++) {
				modelTabs.tabContent.eq(0).find('ul.colors').children('li[rel="'+colors.full[i]+'"]').addClass('full');
			}
		}
		if (typeof(colors.half) != "undefined") {//if 'half' node exists
			for (var i=0, l=colors.half.length; i<l; i++) {
				modelTabs.tabContent.eq(0).find('ul.colors').children('li[rel="'+colors.half[i]+'"]').addClass('half');
			}
		}
	},
	/* colorClick: function(){
		modelPanel.colorA.live('click',function(e){
			modelPanel.colorLi.removeClass('selected');
			$(this).parent('li').addClass('selected').append( modelPanel.selectedColor );
			e.preventDefault();
		});
	}, */
	changeColor: function(clicked){
		//modelPanel.colorA.live('click',function(e){
			modelPanel.colorLi.removeClass('selected');
			clicked.addClass('selected').append( modelPanel.selectedColor );
			
			handleCurrentCar.copy();//update img layers
			handleCurrentCar.redraw();
			
			//e.preventDefault();
		//});
	},
	handleOther: function(){
		modelTabs.tabContent.eq(1).find('div.mvs').each(function(){
			//var code = '';
			_this = $(this);
			var codes = _this.children('input.trim').val().split('|');
			var descs = _this.children('input.trim').attr('rel').split('_');
			var otherCar = {
				market : fiat_market,
				language : fiat_lang,
				modelId : codes[0],
				versionId : codes[1],
				carCode: codes[2], //1.3 Multijet 95cv Stop & Start | meccanico | gasolio | anteriore | 14170,00
				colorExt: codes[3],
				colorInt: codes[4],
				selectedOpt: '|'+codes[3]+'|'+codes[4]+'|'
			};
			if ( handleModelCar.landingTrim.val() == _this.children('input.trim').val() ) {
				_this.addClass('on');
			}
			_this.attr('rel',codes[2]);
			/* code +=		'<a href="#" >'+
									'<div class="wrapper">'+
										'<div class="img_wrap">'+
											'<img src="'+fiat_respath+'img/placeholder/60x30.png" alt="[60x30]" title="60x30" />'+//cms
										'</div>'+
										'<dl>'+
											//'<dt rel="'+codes[1]+'"></dt>'+//version
											'<dt>'+descs[0]+' '+descs[1]+'</dt>'+//model and version
											'<dd>The most dummy</dd>'+//cms
										'</dl>'+
										'<div class="price" rel="'+codes[2]+'"></div>'+//price
									'</div>'+
									'<div class="details">'+
										'<button type="buthandlecarton">select</button>'+
										'<div class="engine" rel="'+codes[2]+'"></div>'+//engine
										'<div class="payoff">A lot of fun</div>'+//cms
										'<div class="optionals">Quam dolore, cruciatus in rei, finibus veteres, hoc puella, coram regis, iam, custodio</div>'+//cms
									'</div>'+
								'</a>';
							//'</div>';
			_this.append(code); */
			
			cc.getTrim(otherCar, modelPanel.printOtherEngine);
			//cc.getTrim(otherCar, modelPanel.printOtherCheatingPrice);
			cc.getOptStandard(otherCar, modelPanel.printOtherStandard);
			
		});
		//modelTabs.tabContent.eq(1).find('div.others').html(code);//overwrite existing code
		modelPanel.selectOther();
	},
	/* printOtherVersion: function(param, versionDesc, allVersions){
		//$.log(versionDesc+' versionid '+versionId);
		$('div.mvs').find('dt').filter('[rel="'+param.versionId+'"]').text(versionDesc);
	}, */
	/* printOtherEnginePrice: function(param, engineId, engineDesc, gearId, gearDesc, fuelId, fuelDesc, driveId, driveDesc, price, priceNoVat, pricePromo, allFuels){
		//$.log(engineDesc+' carCode '+carCode +' price '+price);
		$('div.mvs').find('div.engine').filter('[rel="'+param.carCode+'"]').text(engineDesc);
		$('div.mvs').find('div.price').filter('[rel="'+param.carCode+'"]').text(price).prepend( printMsg("currency", currentCar.market) );
	}, */
	printOtherEngine: function(param, engineId, engineDesc, gearId, gearDesc, fuelId, fuelDesc, driveId, driveDesc, price, priceNoVat, pricePromo, allFuels, allTrims){
		$('div.mvs').find('div.engine').filter('[rel="'+param.carCode+'"]').text(engineDesc);
		//$('div.mvs').find('div.price').filter('[rel="'+param.carCode+'"]').text(price).prepend( printMsg("currency", currentCar.market) );
	},
	/* printOtherCheatingPrice: function(param, engineId, engineDesc, gearId, gearDesc, fuelId, fuelDesc, driveId, driveDesc, price, priceNoVat, pricePromo, allFuels, allTrims){
		$('div.mvs').filter('[rel="'+param.carCode+'"]').find('div.price').text(price).prepend( printMsg("currency", fiat_market) );
	}, */
	printOtherStandard: function(param, response){
		for (var i=0, len=response.Categories.length; i<len; i++){
			for (var j=0, l=response.Categories[i].OptionalList.length; j<l; j++){
				param.selectedOpt += '|'+response.Categories[i].OptionalList[j].code;
			}
		}
		var info = {
			operation: 'ADD',//fake add
			//optional: '',//no optional to add, just a check to update price when landing
			//optional: param.colorInt,//no optional to add, just a check to update price when landing
			optional: param.colorExt,//no optional to add, just a check to update price when landing
			optionalsToAdd: ''
		};
		cc.checkConfigConsist(param, info, modelPanel.printOtherPrice);
	},
	printOtherPrice: function(param, info, response){
		var price = response.Price[0].value;
		price = addDot(price);
		//$('div.mvs').filter('[rel="'+param.carCode+'"]').find('div.price').text(price).prepend( printMsg("currency", param.market) );
		
		var pricePromo = '0';
		if(response.Price[2]){
			pricePromo = response.Price[2].value;
		}
		
		if ( parseFloat( pricePromo.replace(",",".") ) > 0) {//convert comma to dot on the fly (to keep original value)
			pricePromo = addDot(pricePromo);
			$('div.mvs').filter('[rel="'+param.carCode+'"]').find('div.price').text(pricePromo).prepend( printMsg("currency", param.market) );
		} else {//no promo
			$('div.mvs').filter('[rel="'+param.carCode+'"]').find('div.price').text(price).prepend( printMsg("currency", param.market) );
		}
		
	},
	selectOther: function(){
		modelPanel.changeBtn.live('click',function(e){
			var _mvs = $(this).parents('div.mvs');
			var trimData = _mvs.children('input.trim');
			var mvsDescs = trimData.attr('rel').split('_');
			var mvsCodes = trimData.val().split('|');
			//var supermodel = trimData.attr('data-supermodel');
			modelPanel.colorWrapper = _mvs.children('input.colors').val();
			handleModelCar.clear('model');
			handleModelCar.init( mvsDescs, mvsCodes, '' );
			//fiatCom.filledModelPanel = false;
			modelPanel.initDynamic();
			var clicked = modelPanel.mvs.parent().index( _mvs );
			modelPanel.mvs.parent().removeClass('on').eq(clicked).addClass('on');
			
			//modelPanel.selectedName.children('span').text( _mvs.find('dt').text() );//update trim name
			//configurator.updatePrice( _mvs.find('div.price').text() );//update trim price
			/* modelPanel.configureBtn.attr("data-tracking", "/modelpage/" + mvsDescs[0] + "/" + mvsDescs[1] + "/configure");//build
			modelPanel.findDealer.attr("data-tracking", "/modelpage/" + mvsDescs[0] + "/" + mvsDescs[1] + "/dealer-locator");//dealer
			modelPanel.tDrive.attr("data-tracking", "/modelpage/" + mvsDescs[0] + "/" + mvsDescs[1] + "/test-drive");//tdrive */
			updateDataTracking( modelCar.modelDesc, modelCar.versionDesc, false );
			
			//handleCurrentCar.copy();//moved to modelpanel initdynamic > print price
			//handleCurrentCar.initRedraw();
			
			/* $('#above div.model_outside').append(fiatCom.loading);
			configurator.outLayers.fadeOut('slow',function(){
				var layersCode =	'<img class="layer_0" src="'+fiat_respath+'img/configurator/cars/bravo/myLife/ext/base/bravo_myLife_base_e01.png" alt="" />'+
													'<img class="layer_1" src="'+fiat_respath+'img/configurator/cars/bravo/myLife/ext/rims/bravo_myLife_r00_e01.png" alt="" />'+
													'<img class="layer_2" src="'+fiat_respath+'img/configurator/cars/bravo/myLife/ext/body/bravo_myLife_b01_e01.png" alt="" />';
				
				configurator.outLayers.html(layersCode)//change images
			}).fadeIn('slow',function(){
				fiatCom.loading.remove();
			}); */
			e.preventDefault();
		});
	}
};

function updateDataTracking( mvsDesc1, mvsDesc2, isConfigurator ){
	if( !isConfigurator ){
		modelPanel.configureBtn.attr("data-tracking", "/modelpage/" + mvsDesc1 + "/" + mvsDesc2 + "/configure");//build
		modelPanel.findDealer.attr("data-tracking", "/modelpage/" + mvsDesc1 + "/" + mvsDesc2 + "/dealer-locator");//dealer
		//modelPanel.tDrive.attr("data-tracking", "/modelpage/" + mvsDesc1 + "/" + mvsDesc2 + "/test-drive");//tdrive
		modelPanel.changeVersion.attr("data-tracking", "/modelpage/" + mvsDesc1 + "/" + mvsDesc2 + "/change-version ");//change-version
		modelPanel.eBrochure.attr("data-tracking", "/modelpage/" + mvsDesc1 + "/" + mvsDesc2 + "/e-brochure");//e-brochure
	}else{
		myPanel.savedBuilds.attr("data-tracking", "/modelpage/" + mvsDesc1 + "/" + mvsDesc2 + "/configurator/follow-up/saved-builds");//saved builds
		myPanel.save.attr("data-tracking", "/modelpage/" + mvsDesc1 + "/" + mvsDesc2 + "/configurator/follow-up/save");//save 
		//myPanel.tdrive.attr("data-tracking", "/modelpage/" + mvsDesc1 + "/" + mvsDesc2 + "/configurator/follow-up/test-drive");//tdrive
		
		//$('div.finito a.tdrive').attr("data-tracking", "/modelpage/" + mvsDesc1 + "/" + mvsDesc2 + "/configurator/follow-up/test-drive");//tdrive finito
		$('div.finito a[title*=dealer]').attr("data-tracking", "/modelpage/" + mvsDesc1 + "/" + mvsDesc2 + "/configurator/dealer-locator");//dealer finito
		$('div.finito a.brochure').attr("data-tracking", "/modelpage/" + mvsDesc1 + "/" + mvsDesc2 + "/e-brochure");//e-brochure finito
		
		statusHandler.viewsExt.find("a").eq(0).attr("data-tracking", "/modelpage/" + mvsDesc1 + "/" + mvsDesc2 + "/more-views");//ext views
		statusHandler.viewsInt.find("a").eq(0).attr("data-tracking", "/modelpage/" + mvsDesc1 + "/" + mvsDesc2 + "/more-views");//int views
		$("a.mvs_selection.change_mvs").attr("data-tracking", "/modelpage/" + mvsDesc1 + "/" + mvsDesc2 + "/change_mvs");
		$("a.view_outside").attr("data-tracking", "/modelpage/" + mvsDesc1 + "/" + mvsDesc2 + "/view_outside");
		$("a.view_inside").attr("data-tracking", "/modelpage/" + mvsDesc1 + "/" + mvsDesc2 + "/view_inside");
	}	
};

var handleOpt = {//flags e pannelli
	configFlags: null,
	configFlagsPack: null,
	panel: null,
	colorPanelExt: null,
	colorPanelInt: null,
	init: function(){
		handleOpt.configFlags = $('#above ul.flags.cc');
		//handleOpt.configFlagsPack = handleOpt.configFlags.children('li.packages');//moved after package flag creation
		handleOpt.panel = $('div.opt_panel');
		handleOpt.panel.find('a.close').live('click',function(e){
			//$.log('sto chiudendo');
			handleOpt.close();
			e.preventDefault();
		});
		handleOpt.handleAddRemove();
	},
	initLanding: function(){
		//$.log('dentro initlanding');
		handleOpt.initExt();
		handleOpt.initInt();
		modelPanel.cmsImages();//obtain images from cms (temp)
		handleCurrentCar.redraw();
	},
	initExt: function(){
		//$.log('initExt - fiatCom.filledExt '+fiatCom.filledExt);
		if (!fiatCom.filledExt) {//activate only when needed
			fiatCom.filledExt = true;
			var info = {
				categoryFilter: ''
			};
			//cc.getOptList(currentCar, info, handleOpt.printCategories);
			cc.getOptExt(currentCar, info, handleOpt.printCategoriesExt);
		}
	},
	initInt: function(){
		//$.log('initInt - fiatCom.filledInt '+fiatCom.filledInt);
		if (!fiatCom.filledInt) {//activate only when needed
			fiatCom.filledInt = true;
			var info = {
				categoryFilter: ''
			};
			cc.getOptInt(currentCar, info, handleOpt.printCategoriesInt);
		}
	},
	printOptImages: function(){
		//$.log('here i am');//please do not remove this log (for future debugging)
		$(cms.cmsData).find('item').each(function(){
			var optId = $('VehicleOptionalId',this).text();
			//$.log(optId);
			var optName = $('VehicleOptionalName',this).text();
			var thumb = $('Thumbnail',this).text();
			
			/* if(thumb!=''){
				$('div.opt_panel').find('div.optional[rel="'+optId+'"]').find('div.img_wrap img').attr({
					'src' : cmsPath+thumb,
					'alt':'['+optName+']'
				});
			} */
			
			if(thumb!=''){
				$('div.opt_panel').find('div.optional[rel="'+optId+'"]').find('div.img_wrap').html('<img src="'+cmsPath+thumb+'" alt="['+optName+']" />');
			}
			
		});
		
		//$.log('ed');
		$('div.layers div.loading').remove();
	},
	printPackFlag: function (param, response) {
		/* //filtering pack here (instead of via ajax call) to prevent an error if there are no packs
			if(response.Categories != null){
								
				for(var i=0, len=response.Categories.length; i<len; i++){
					if (response.Categories[i].cod == '5') {
						var categoriesList = '';
						var panel = '';
						//var top = 180;
						var where = '';
						switch (statusHandler.current) {
							case 1:
								where = 'model_outside';
							break;
							case 2:
								where = 'inside';
							break;
							default:
								where = 'model_outside';
						}
						var categoryName = response.Categories[0].name;//pack's a single category as for FE but a double category (outside and inside) as for BE
						handleOpt.setCatIcon(response.Categories[0].cod);
						
						// categoriesList +=	'<li class="'+fiatCom.catIcon.flag+'" style="left:160px;top:'+top+'px;" id="item_pack" rel="'+response.Categories[0].cod+'">'+
						categoriesList +=	'<li class="'+fiatCom.catIcon.flag+'" id="item_pack" rel="'+response.Categories[0].cod+'">'+
												'<a href="#" rel="">'+categoryName+'</a>'+
											'</li>';
											
						panel +=	'<div class="opt_panel '+fiatCom.catIcon.panel+' item_pack" rel="'+response.Categories[0].cod+'">'+
										'<a href="#" class="close">x</a>'+
										'<h2>'+categoryName+'</h2>'+
										'<div class="panel_content">';
					
					
					
						for (var j=0, l=response.Categories[i].OptionalList.length; j<l; j++){
							panel +=	'<div class="accordion_title">'+
													'<h3>'+response.Categories[i].OptionalList[j].name+'</h3>'+
													'<span class="price">'+printMsg('currency', currentCar.market)+response.Categories[i].OptionalList[j].price+'</span>'+
												'</div>'+
												'<div class="accordion_content optional" rel="'+response.Categories[i].OptionalList[j].code+'">'+
													//'<div class="caption">'+
														//'<img src="'+fiat_respath+'img/placeholder/100x70.png" alt="100x70" />'+
													//'</div>'+
													'<div class="img_wrap">'+
														//'<img src="" alt="" />'+
													'</div>'+
													'<div class="details">'+
														'<ul></ul>'+
													'</div>'+
													'<a href="#" class="add_rem add">add <span>+</span></a>'+
													'<a href="#" class="add_rem rem">remove <span>-</span></a>'+
												'</div>';
							var info = {
								packCode: response.Categories[i].OptionalList[j].code
							};
							cc.getPackList(currentCar, info, handleOpt.printPackList);
						}
					}
				}
				
				fiatCom.readyPack = true;
				panel += '</div>';//close div class="panel_content"
				panel += '</div>';//close div class="opt_panel"
				
				$('div.'+where).append(panel);//switch between outside/inside
				$('div.'+where+' ul.flags.cc').prepend(categoriesList);
				
				var obj = $('div.'+where+' ul.flags.cc').find("li");
				handleOpt.printDataTracking(obj, modelCar.modelDesc, modelCar.versionDesc);//sophus data-tracking	
				
				packagePanel.init();
				
				handleOpt.openPanel(response, where, null);
				handleOpt.configFlagsPack = handleOpt.configFlags.children('li.packages');
			} */
		if(response.Categories != null){
			var categoriesList = '';
			var panel = '';
			//var top = 180;
			var where = '';
			switch (statusHandler.current) {
				case 1:
					where = 'model_outside';
				break;
				case 2:
					where = 'inside';
				break;
				default:
					where = 'model_outside';
			}
			var categoryName = response.Categories[0].name;//pack's a single category as for FE but a double category (outside and inside) as for BE
			handleOpt.setCatIcon(response.Categories[0].cod);
			
			// categoriesList +=	'<li class="'+fiatCom.catIcon.flag+'" style="left:160px;top:'+top+'px;" id="item_pack" rel="'+response.Categories[0].cod+'">'+
			categoriesList +=	'<li class="'+fiatCom.catIcon.flag+'" id="item_pack" rel="'+response.Categories[0].cod+'">'+
									'<a href="#" rel="">'+categoryName+'</a>'+
								'</li>';
								
			panel +=	'<div class="opt_panel '+fiatCom.catIcon.panel+' item_pack" rel="'+response.Categories[0].cod+'">'+
							'<a href="#" class="close">x</a>'+
							'<h2>'+categoryName+'</h2>'+
							'<div class="panel_content">';
			for(var i=0, len=response.Categories.length; i<len; i++){
			
				for (var j=0, l=response.Categories[i].OptionalList.length; j<l; j++){
					if ( response.Categories[i].OptionalList[j].standard == true ) {
						panel +=	'<div class="accordion_title standard">';
					} else {
						panel +=	'<div class="accordion_title">';
					}
						panel +='<h3>'+response.Categories[i].OptionalList[j].name+'</h3>'+
											'<span class="price">'+printMsg('currency', currentCar.market)+response.Categories[i].OptionalList[j].price+'</span>'+
										'</div>'+
										'<div class="accordion_content optional" rel="'+response.Categories[i].OptionalList[j].code+'">'+
											//'<div class="caption">'+
												//'<img src="'+fiat_respath+'img/placeholder/100x70.png" alt="100x70" />'+
											//'</div>'+
											'<div class="img_wrap">'+
												//'<img src="" alt="" />'+
											'</div>'+
											'<div class="details">'+
												'<ul></ul>'+
											'</div>'+
											'<a href="#" class="add_rem add">'+printMsg("configurator", "add")+' <span>+</span></a>'+
											'<a href="#" class="add_rem rem">'+printMsg("configurator", "remove")+' <span>-</span></a>'+
										'</div>';
					var info = {
						packCode: response.Categories[i].OptionalList[j].code
					};
					cc.getPackList(currentCar, info, handleOpt.printPackList);
				}
			}
			
			fiatCom.readyPack = true;
			panel += '</div>';//close div class="panel_content"
			panel += '</div>';//close div class="opt_panel"
			
			$('div.'+where).append(panel);//switch between outside/inside
			$('div.'+where+' ul.flags.cc').prepend(categoriesList);
			
			var obj = $('div.'+where+' ul.flags.cc').find("li");
			handleOpt.printDataTracking(obj, modelCar.modelDesc, modelCar.versionDesc);//sophus data-tracking
			
			
			var notStd = $('div.above_inner').find('div.package_panel').find('div.accordion_title').not('.standard').length;
			//$.log('notStd: '+notStd);
			if ( notStd <= 0 ) {
				$('#item_pack').remove();
			}
			
			packagePanel.init();
			
			handleOpt.openPanel(response, where, null);
			handleOpt.configFlagsPack = handleOpt.configFlags.children('li.packages');
		}
		
		handleOpt.printOptImages();
	},
	printCategoriesExt: function (param, response, allColors) {//flags, panels and empty list item in finito page
		var categoriesList = '';
		var panel = '';
		var finitoCategories = '';
		//var top = 180;
		
		for(var i=0, len=response.Categories.length; i<len; i++){
			var categoryCode=response.Categories[i].cod;
			
			if (categoryCode != '5') {//exclude packages, have their own call
				var categoryName = response.Categories[i].name;
				//top = top+30;
				handleOpt.setCatIcon(categoryCode);
				/* categoriesList +=	'<li class="rt '+fiatCom.catIcon.flag+'" style="left:460px;top:'+top+'px;" id="outsideItem_'+i+'" rel="'+categoryCode+'">'+ */
				categoriesList +=	'<li class="'+fiatCom.catIcon.flag+'" id="outsideItem_'+i+'" rel="'+categoryCode+'">'+
										'<a href="#" rel="">'+categoryName+'</a>'+
									'</li>';
				
				panel +=	'<div class="opt_panel '+fiatCom.catIcon.panel+' item_model_outside'+i+'" rel="'+categoryCode+'">'+
								'<a href="#" class="close">x</a>'+
								'<h2>'+categoryName+'</h2>';
				if ( categoryCode != '$' && categoryCode != '-' ) {//in the finito page ext color, wheels and int color are already printed in the html
					//$.log(categoryCode);
					finitoCategories +=	'<li rel="'+categoryCode+'"><strong>'+categoryName+'</strong></li>';
				}
				switch (categoryCode) {
					case '$'://ext color panel
						panel += '<div class="preview">'+
								'<img src="'+fiat_respath+'img/placeholder/310x76blank.png" alt="" />'+
								//'<a href="#" rel="inspiration" class="inspiration">&nbsp;</a>'+//temp comment
							'</div>'+
							'<div class="panel_content">';
							//$.log('allColors.length ext '+allColors.length);
						for (var j=0, l=allColors.length; j<l; j++) {
							panel +='<div class="color_type">'+
												'<div class="color_desc">'+
													'<p>';
														//'Colors';
														var first;
														for(var k in allColors[j]){//get the first element of array (array[0] doesn't work 'cause the array doesn't necessarily start from index 0)
															first = k;
															break;
														}
														if ( parseFloat( allColors[j][first].price.replace(",",".") ) > 0) {//convert comma to dot on the fly (to keep original value)
															panel += printMsg('configurator', 'specialColors');
																//'<span class="price">'+printMsg('currency', currentCar.market)+allColors[j][first].price+'</span>';
														} else {
															//panel += printMsg('configurator', 'colors');//obsolete, don't print price if equal to 0
															panel += printMsg('configurator', 'colors');
														}
							panel += '<span class="price">'+printMsg('currency', currentCar.market)+allColors[j][first].price+'</span>';
							panel += '<span class="color_name"></span>'+
													'</p>'+
												'</div>'+
												'<ul class="colors">';
							for (var k in allColors[j]) {
								if (k != 'inArray'){
									/* if ( allColors[j][k].doubleCode == currentCar.colorExt ) {
										panel += '<li class="optional on" rel="'+allColors[j][k].doubleCode+'"><a class="add_rem add" href="http://placehold.it/310x76/654321/png"><img src="'+fiat_respath+'img/placeholder/colors/brown.png" alt="'+allColors[j][k].name+'" /></a></li>';
									} else {
										panel += '<li class="optional" rel="'+allColors[j][k].doubleCode+'"><a class="add_rem add" href="http://placehold.it/310x76/2FDCD6/png"><img src="'+fiat_respath+'img/placeholder/colors/cyan.png" alt="'+allColors[j][k].name+'" /></a></li>';
									} */
									//$.log(cms.cmsData);
									$(cms.cmsData).find('item[type="1"]').each(function(){
										var optId = $('VehicleOptionalId',this).text();
										
										if(optId == allColors[j][k].doubleCode){
											var panelPallozzo = $('ColorImage',this).text();
											var panelPreview = $('PreviewColorImage',this).text();
											if ( allColors[j][k].doubleCode == currentCar.colorExt ) {
												panel += '<li class="optional on" rel="'+allColors[j][k].doubleCode+'"><a class="add_rem add" href="'+cmsPath+panelPreview+'"><img src="'+cmsPath+panelPallozzo+'" alt="'+allColors[j][k].name+'" /></a></li>';
											} else {
												panel += '<li class="optional" rel="'+allColors[j][k].doubleCode+'"><a class="add_rem add" href="'+cmsPath+panelPreview+'"><img src="'+cmsPath+panelPallozzo+'" alt="'+allColors[j][k].name+'" /></a></li>';
											}
											
											
											
											
											
											
											return false;
										}
									});
									
								}
							}
							panel += '</ul>'+
										'</div>';//close div class color type
						}
						panel += '</div>';//close div class="panel_content"
						fiatCom.readyColorExt = true;//il pannello dei colori esterni e' pronto
					break;
					default://default opt panel
						panel += '<div class="panel_content">';
						for (var j=0, l=response.Categories[i].OptionalList.length; j<l; j++){
							if (response.Categories[i].OptionalList[j].standard == true) {
								panel += '<div class="optional standard on" rel="'+response.Categories[i].OptionalList[j].code+'">';
								//panel += '<div class="optional on" rel="'+response.Categories[i].OptionalList[j].doubleCode+'">';
							} else {
								panel += '<div class="optional" rel="'+response.Categories[i].OptionalList[j].code+'">';
								//panel += '<div class="optional" rel="'+response.Categories[i].OptionalList[j].doubleCode+'">';
							}
							
							panel += '<div class="img_wrap">'+
											//'<img src="'+cmsPath+thumb+'" alt="['+optName+']" />'+
											//'<img src="" alt="" />'+
										'</div>'+
										'<div class="txt_wrap">'+
											'<h3>'+response.Categories[i].OptionalList[j].name+'</h3>'+
											'<span class="price">'+printMsg('currency', currentCar.market)+response.Categories[i].OptionalList[j].price+'</span>'+
											// '<div class="description">Deodominum oculos ne velocitate mare deambulavit latere potentiae amore meam.</div>'+
											//'<a href="#" class="add_rem add" rel="save_money">add <span>+</span></a>'+
											'<a href="#" class="add_rem add">'+printMsg("configurator", "add")+' <span>+</span></a>'+
											'<a href="#" class="add_rem rem">'+printMsg("configurator", "remove")+' <span>-</span></a>'+
										'</div>'+
									'</div>';//close div class="optional"
						}
						panel +='</div>';//close div class="panel_content"
				}
				
				panel+='</div>';//close div class="opt_panel"
				
			}
		}
		
		$('div.model_outside ul.flags.cc').append(categoriesList);//'append' needed to avoid pack flag to be overwritten
		$('div.model_outside').append(panel);
		/* if ( categoryCode=="$" || categoryCode=="#" ) {
			//hide empty colors and categories
			$('div.color_panel').filter('[rel="'+categoryCode+'"]').find('div.panel_content').find('img').each(function(){
				var img = new Image();
				img.src = $(this).attr('src');
				img.onload = function() {
					$.log(this.width + 'x' + this.height);
					if ( !(img.width==1 && img.height==1) ) {
						$(this).closest('li').hide();
						$.log('si');
					}
				}
			});
		} */
		
		$('div.finito_outside ul.summary').append(finitoCategories);//updating finito page: stampo le categorie degli esterni
		
		$('div.model_outside').find('div.opt_panel').not('.color_panel').each(function(){
			var _this = $(this);
			var notStd = _this.find('div.optional').not('.standard').length;
			//$.log('cat code: '+ _this.attr('rel') +' notStd: '+notStd);
			if ( notStd <= 0 ) {
				var catToHide = _this.attr('rel');
				//$('div.model_outside ul.flags.cc').children('li').filter('[rel="'+catToHide+'"]').hide();//hide flag
				$('div.model_outside ul.flags.cc').children('li').filter('[rel="'+catToHide+'"]').remove();//remove flag cause hiding isn't enough
				$('div.finito_outside ul.summary').children('li').filter('[rel="'+catToHide+'"]').hide();//hide category in the finito page
			}
		});
		
		myPanel.cmsMyImages(1);//when landing, print cms image for mypanel (1 stand for external)
		
		if (!fiatCom.filledPack) {//activate only when needed
			//$.log('if ext');
			fiatCom.filledPack = true;
			var info = {
				//categoryFilter: ''
				categoryFilter: '5'
			};
			//cc.getOptList(currentCar, info, handleOpt.printCategories);
			cc.getOptList(currentCar, info, handleOpt.printPackFlag);
		}
		
		handleOpt.openPanel(response, 'model_outside', allColors);
		
/* 		$(cms.cmsData).find('item').each(function(){
			var optId = $('VehicleOptionalId',this).text();
			var optName = $('VehicleOptionalName',this).text();
			var thumb = $('Thumbnail',this).text();
			
			$('div.opt_panel').find('div.optional[rel="'+optId+'"]').find('div.img_wrap img').attr({
				'src' : cmsPath+thumb, 
				'alt':'['+optName+']'
			});
		}); */
		
		//cms.getCcFlagsExt('view1');
		//cms.getCcFlagsExt('1');
		cms.getCcFlagsExt('2');//2 is the default view
	},
	printCategoriesInt: function (param, response, allColors) {//flags, panels and empty list item in finito page
		var categoriesList = '';
		var panel = '';
		var finitoCategories = '';
		//var top = 180;
		
		for(var i=0, len=response.Categories.length; i<len; i++){
			var categoryCode=response.Categories[i].cod;
			
			if (response.Categories[i].cod != '5') {//exclude packages, have their own call
				var categoryName = response.Categories[i].name;
				//top = top+30;
				
				handleOpt.setCatIcon(categoryCode);
				
				//categoriesList +=	'<li class="lt '+fiatCom.catIcon.flag+'" style="left:460px;top:'+top+'px;" id="insideItem_'+i+'" rel="'+categoryCode+'">'+
				categoriesList +=	'<li class="'+fiatCom.catIcon.flag+'" id="insideItem_'+i+'" rel="'+categoryCode+'">'+
										'<a href="#" rel="">'+categoryName+'</a>'+
									'</li>';
				
				panel +=	'<div class="opt_panel '+fiatCom.catIcon.panel+' item_inside'+i+'" rel="'+categoryCode+'">'+
								'<a href="#" class="close">x</a>'+
								'<h2>'+categoryName+'</h2>';
				if (categoryCode != '#') {//in the finito page ext color, wheels and int color are already printed in the html
					finitoCategories +=	'<li rel="'+categoryCode+'"><strong>'+categoryName+'</strong></li>';
				}
				
				switch (categoryCode) {
					case '#'://int color panel
						panel += '<div class="preview">'+
								'<img src="'+fiat_respath+'img/placeholder/310x76.png" alt="" />'+
								//'<a href="#" rel="inspiration" class="inspiration">&nbsp;</a>'+//temp comment
							'</div>'+
							'<div class="panel_content">';
								//$.log('allColors.length int '+allColors.length);
								for (var j=0, l=allColors.length; j<l; j++) {
									panel +='<div class="color_type">'+
														'<div class="color_desc">'+
															'<p>';
																//'Colors';
																var first;
																for (var k in allColors[j]){//get the first element of array (array[0] doesn't work 'cause the array doesn't necessarily start from index 0)
																	first = k;
																	break;
																}
																if ( parseFloat( allColors[j][first].price.replace(",",".") ) > 0) {//convert comma to dot on the fly (to keep original value)//obsolete: now we print price even if equal to 0
																	panel += printMsg('configurator', 'specialBody');
																} else {
																	panel += printMsg('configurator', 'body');
																}
									panel += '<span class="price">'+printMsg('currency', currentCar.market)+allColors[j][first].price+'</span>';
									panel += '<span class="color_name"></span>'+
															'</p>'+
														'</div>'+
														'<ul class="colors">';
									for (var k in allColors[j]) {
										
										if (k != 'inArray'){
/* 											if ( allColors[j][k].doubleCode == currentCar.colorInt ) {
												panel += '<li class="optional on" rel="'+allColors[j][k].doubleCode+'"><a class="add_rem add" href="http://placehold.it/310x76/DA51C6/png"><img src="'+fiat_respath+'img/placeholder/colors/pink.png" alt="'+allColors[j][k].name+'" /></a></li>';
											} else {
												panel += '<li class="optional" rel="'+allColors[j][k].doubleCode+'"><a class="add_rem add" href="http://placehold.it/310x76/21FF00/png"><img src="'+fiat_respath+'img/placeholder/colors/green.png" alt="'+allColors[j][k].name+'" /></a></li>';
											} */
											
											//$.log(cms.cmsData);
											
											//var colorInt = currentCar.colorInt.replace('#','@');
											$(cms.cmsData).find('item[type="2"]').each(function(){
												var optId = $('VehicleOptionalId',this).text();
												
												//$.log('optid '+ optId +' -o- allColors doubleCode '+allColors[j][k].doubleCode);
												optId = optId.replace('@','#');//need to align xml (@) and json (#)
												if(optId == allColors[j][k].doubleCode){
													//$.log('doublecode');
													var panelPallozzo = $('ColorImage',this).text();
													var panelPreview = $('PreviewColorImage',this).text();
													
													if ( allColors[j][k].doubleCode == currentCar.colorInt ) {
														panel += '<li class="optional on" rel="'+allColors[j][k].doubleCode+'"><a class="add_rem add" href="'+cmsPath+panelPreview+'"><img src="'+cmsPath+panelPallozzo+'" alt="'+allColors[j][k].name+'" /></a></li>';
													} else {
														panel += '<li class="optional" rel="'+allColors[j][k].doubleCode+'"><a class="add_rem add" href="'+cmsPath+panelPreview+'"><img src="'+cmsPath+panelPallozzo+'" alt="'+allColors[j][k].name+'" /></a></li>';
													}
													return false;
												}
											});
										}
									}
									panel += '</ul>'+
												'</div>';//close div class color type
								}
							panel += '</div>';//close div class="panel_content"
						fiatCom.readyColorInt = true;
					break;
					default://default opt panel
						panel += '<div class="panel_content">';
						for (var j=0, l=response.Categories[i].OptionalList.length; j<l; j++){
							if (response.Categories[i].OptionalList[j].standard == true) {
								panel += '<div class="optional standard on" rel="'+response.Categories[i].OptionalList[j].code+'">';
								//panel += '<div class="optional on" rel="'+response.Categories[i].OptionalList[j].doubleCode+'">';
							} else {
								panel += '<div class="optional" rel="'+response.Categories[i].OptionalList[j].code+'">';
								//panel += '<div class="optional" rel="'+response.Categories[i].OptionalList[j].doubleCode+'">';
							}
							panel += '<div class="img_wrap">'+
											//'<img src="" alt="" />'+
										'</div>'+
										'<div class="txt_wrap">'+
											'<h3>'+response.Categories[i].OptionalList[j].name+'</h3>'+
											'<span class="price">'+printMsg('currency', currentCar.market)+response.Categories[i].OptionalList[j].price+'</span>'+
											// '<div class="description">Deodominum oculos ne velocitate mare deambulavit latere potentiae amore meam.</div>'+
											//'<a href="#" class="add_rem add" rel="save_money">'+printMsg("configurator", "add")+' <span>+</span></a>'+
											'<a href="#" class="add_rem add">'+printMsg("configurator", "add")+' <span>+</span></a>'+
											'<a href="#" class="add_rem rem">'+printMsg("configurator", "remove")+' <span>-</span></a>'+
										'</div>'+
									'</div>';//close div class="optional"
									
						}
						panel +='</div>';//close div class="panel_content"
				}
				
				panel+='</div>';//close div class="opt_panel"
				
			}
		}
		
		$('div.inside ul.flags.cc').append(categoriesList);//'append' needed to avoid pack flag to be overwritten
		$('div.inside').append(panel);
		$('div.finito_inside ul.summary').append(finitoCategories);//updating finito page: stampo le categorie degli interni
		
		$('div.inside').find('div.opt_panel').not('.color_panel').each(function(){
			var _this = $(this);
			var notStd = _this.find('div.optional').not('.standard').length;
			if ( notStd <= 0 ) {
				//$.log('de, un ce ne '+ _this.attr('rel') );
				var catToHide = _this.attr('rel');
				//$('div.inside ul.flags.cc').children('li').filter('[rel="'+catToHide+'"]').hide();//hide flag
				$('div.inside ul.flags.cc').children('li').filter('[rel="'+catToHide+'"]').remove();//remove flag cause hiding isn't enough
				$('div.finito_inside ul.summary').children('li').filter('[rel="'+catToHide+'"]').hide();//hide category in the finito page
			}
		});
		
		myPanel.cmsMyImages(2);//when landing, print cms image for mypanel (2 stand for internal)
		var obj = $('div.inside ul.flags.cc').find("li");
		handleOpt.printDataTracking(obj, modelCar.modelDesc, modelCar.versionDesc);//sophus data-tracking
		
		if (!fiatCom.filledPack) {//activate only when needed
			//$.log('if int');
			fiatCom.filledPack = true;
			var info = {
				//categoryFilter: ''
				categoryFilter: '5'
			};
			cc.getOptList(currentCar, info, handleOpt.printPackFlag);
		}
		
/* 		var info = {
			categoryFilter : '#'
		};
		cc.getOptInt(currentCar, info, handleOpt.printMyIntColor); */
		
		handleOpt.openPanel(response, 'inside', allColors);
		
		cms.getCcFlagsInt('1');
	},
	setCatIcon: function(catCode){
		switch (catCode) {
			case '$':
				fiatCom.catIcon.flag = 'colors body';
				fiatCom.catIcon.panel = 'color_panel colorExt_panel';
			break;
			case '#':
				//fiatCom.catIcon.flag = 'colors';
				fiatCom.catIcon.flag = 'colors seat';
				fiatCom.catIcon.panel = 'color_panel colorInt_panel';
			break;
			case 'S':
				fiatCom.catIcon.flag = 'safety';
				fiatCom.catIcon.panel = 'safety_panel';
			break;
			case '-':
				fiatCom.catIcon.flag = 'wheels';
				fiatCom.catIcon.panel = 'wheel_panel';
			break;
			case 'C':
				fiatCom.catIcon.flag = 'comfort';
				fiatCom.catIcon.panel = 'comfort_panel';
			break;
			case 'T':
				fiatCom.catIcon.flag = 'audio';
				fiatCom.catIcon.panel = 'audio_panel';
			break;
			case 'L':
				fiatCom.catIcon.flag = 'styling';
				fiatCom.catIcon.panel = 'style_panel';
			break;
			case '5':
				fiatCom.catIcon.flag = 'packages';
				fiatCom.catIcon.panel = 'package_panel';
			break;
			case 'J':
				fiatCom.catIcon.flag = 'graphics';
				fiatCom.catIcon.panel = 'graphic_panel';
			break;
			default://default opt panel: the luggage
				fiatCom.catIcon.flag = '';
				fiatCom.catIcon.panel = '';
		}
	},
	openPanel: function (response, where, allColors) {
		handleOpt.panel = $('div.opt_panel');
		$('ul.flags.cc li a').click(function(){
		//$('div.'+where+' ul.flags.cc li a').click(function(){
			//alert('a');
			//$.log(allColors);
			var _this = $(this);
			var onCategory = (_this.parent().attr('id')).split('_')[1];
			var onPanel;
			switch (onCategory) {
				case 'pack':
					onPanel = $('div.item_'+onCategory);
				break;
				default:
					onPanel = $('div.'+where+' div.item_'+where+onCategory);
			}

			if ( !_this.parent('li').hasClass('on') ){//adjust to consider both inside and outside
				handleOpt.close();
				handleOpt.panel.filter(onPanel).fadeIn();
				//$('div.opt_panel').fadeOut().filter(onPanel).fadeIn();
				//handleOpt.configFlags.find('li').removeClass('on');
				_this.parent('li').addClass('on');
				
				if ( myPanelOuterTabs.tabControls.hasClass('on') ) {
					myPanelOuterTabs.tabContent.parent().stop(true,true).slideUp(function(){//close myPanel
						myPanelOuterTabs.tabContent.removeClass('on');
					});
					myPanelOuterTabs.tabControls.removeClass('on');
				}
			}
			//optPanels.init();
			
			if ( fiatCom.readyColorExt && !fiatCom.filledColorExt ) {
				//handleOpt.colorPanelExt = null;
				handleOpt.colorPanelExt = new ColorPanel( $('#above div.colorExt_panel') );
				handleOpt.colorPanelExt.init();
				fiatCom.filledColorExt = true;
			}
			if ( fiatCom.readyColorInt && !fiatCom.filledColorInt ) {
				handleOpt.colorPanelInt = new ColorPanel( $('#above div.colorInt_panel') );
				handleOpt.colorPanelInt.init();
				fiatCom.filledColorInt = true;
			}
			if ( fiatCom.readyPack && !fiatCom.filledPackPanel ) {
				fiatCom.filledPackPanel = true;
				switch (statusHandler.current){//if the pack flag has been activated, but the pack panel hasn't, the latter, when activated, should follow the former
					case "1":
						packagePanel.panel.appendTo( statusHandler.status1 );
					break;
					case "2":
						packagePanel.panel.appendTo( statusHandler.status2 );
					break;
				}
			}
			return false;
		});
		
		
	},
	printPackList: function(param, response){
		var code = '';
		for (var i=0, len=response.Optionals.length; i<len; i++) {
			code += '<li rel="'+response.Optionals[i].code+'">'+response.Optionals[i].name+'</li>';
		}
		$('div.package_panel').find('div.accordion_content[rel="'+response.code+'"]').find('ul').html(code);
	},
	handleAddRemove: function(/* response */){
		$('a.add_rem').live('click', function(e){
			//handleCurrentCar.redraw();
			fiatCom.removed=[];
			fiatCom.added=[];
			fiatCom.vincoli = [];
			$(this).closest(".panel_content").find(".optional").addClass("waiting");
			
			//$('div.layers').append('<div class="loading"><img src="'+fiat_respath+'img/ajax.gif" /></div>');
			//$('div.layers').append(fiatCom.loadingCC);
			$('div.layers').after(fiatCom.loadingCC);
			
			//var opt = $(this).closest('div.optional').attr('rel');
			var opt = $(this).closest('.optional').attr('rel');
			
			if($(this).hasClass('add')){
				var operation = 'ADD';
			}else{
				var operation = 'REMOVE';
			}
			var info = {
				operation: operation,
				optional: opt,
				optionalsToAdd: ''
			};
			cc.checkConfigConsist(currentCar, info, handleOpt.printAddRemove);
			e.preventDefault();
		});
	},
	printAddRemove:function(param, info, response){
		cc.handleInconsistenciesAddRemove(param, info, response);
	},
	updateMyColors:function(el, eq){//eq 0 stands for outside, 1 for inside
		var colorImg = el.find('img').attr('src');
		var colorName = el.find('img').attr('alt');
		var colorPrice = el.closest('div.color_type').find('span.price').text();
		
		/* $('div.my_panel div.my_selections div.optional').eq(eq).find('div.img_wrap img').attr({'src':colorImg, 'alt':colorName});
		$('div.my_panel div.my_selections div.optional').eq(eq).find('div.txt_wrap div.description').html( colorName );
		$('div.my_panel div.my_selections div.optional').eq(eq).find('div.txt_wrap div.pricex_wrap span').text( colorPrice ); */
		
		var myOptionalsList = myPanelInnerTabs.tabContent.eq(0).find('div.optional');//my panel
		myOptionalsList.eq(eq).find('div.img_wrap img').attr({'src':colorImg, 'alt':colorName});
		myOptionalsList.eq(eq).find('div.txt_wrap div.description').html( colorName );
		myOptionalsList.eq(eq).find('div.txt_wrap div.pricex_wrap span').text( colorPrice );
		switch (eq) {//finito page
			case 0://outside
				$('div.finito_outside ul.summary').find('li[rel="$"] span').html(colorName+' <span class="price"><span>'+colorPrice+'</span></span>');
			break;
			case 1://inside
				$('div.finito_inside ul.summary').find('li[rel="#"] span').html(colorName+' <span class="price"><span>'+colorPrice+'</span></span>');
			break;
			default:
		}
	},
	/* updateMyWheels:function(el){//finito page
		//$.log(el);
		//var colorImg = el.find('img').attr('src');
		var wheelName = el.find('h3').text();
		var wheelPrice = el.find('span.price').text();
		$('div.finito_outside ul.summary').find('li[rel="-"] > div').html(wheelName+' <span class="price"><span>'+wheelPrice+'</span></span>');
	}, */
	updateMyPacks:function(el){//finito page
		/* $.log(el);
		//var colorImg = el.find('img').attr('src');
		var packName = el.find('h3').text();
		var packPrice = el.find('span.price').text();
		$('div.finito_pack ul.summary').find('li[rel="-"] > div').html(wheelName+' <span class="price"><span>'+wheelPrice+'</span></span>'); */
	},
	close: function(){
		handleOpt.panel.fadeOut();
		handleOpt.configFlags.find('li').removeClass('on');
	},
	printDataTracking: function(obj, mvsDesc1, mvsDesc2){
		obj.each(function(){
			var detailName = $(this).attr("class");
			//$.log(detailName);
			$(this).find("a").attr("data-tracking", "/modelpage/" + mvsDesc1 + "/" + mvsDesc2 + "/image-details/" + detailName + "");
		});
	}
};

function ColorPanel(wrapper){
	var _self = this;
	//this.colorType: null,
	this.preview = {
		container: null,
		src: null,
		srcSelected: null
	};
	this.timer = null;
	this.backSelected = true;
	this.colorName = null;
	this.inspiration = null;
	this.colorNameSelected = null;
	this.color = null;
	this.colorLi = null;
	this.init = function(){
		//this.colorType = $('div.color_panel').find('div.color_type');
		this.colorLi = wrapper.find('ul.colors').find('li');
		this.color = this.colorLi.find('img');
		this.preview.container = wrapper.find('div.preview').children('img');
		this.inspiration = wrapper.find('a.inspiration');
		
		this.preview.srcSelected = this.colorLi.filter('.on').children('a').attr('href');//remember selected color image preview
		this.colorNameSelected = this.colorLi.filter('.on').find('img').attr('alt');//remember selected color name
		
		this.setSelected();//landing at the page
		this.handleHover();
		openObj( this.inspiration );
		//this.handleClick();
	};
	this.setSelected = function(){
		//$.log(this.colorNameSelected);
		if (this.backSelected) {
			this.preview.container.attr({
				'src': this.preview.srcSelected
			});
			this.inspiration.fadeIn();
			this.colorLi.filter('.on').closest('div.color_type').find('span.color_name').text( this.colorNameSelected );//reset to selected
		}
	};
	this.handleHover = function(){
		//this.color.hoverIntent(
		this.color.hover(
			function () {//mouse in
				_self.backSelected = false;
				_self.inspiration.hide();
				var _this = $(this);
				_self.colorName = _this.attr('alt');
				_self.preview.src = _this.parent('a').attr('href');
				_this.parents('div.color_type').find('span.color_name').text( _self.colorName );
				_self.preview.container.attr({
					'src': _self.preview.src
				});
			},
			function () {//mouse out
				_self.backSelected = true;
				_self.color.closest('div.color_type').find('span.color_name').html('&nbsp;');//reset
				setTimeout( ( function(obj){ return function(){ obj.setSelected(); } } )(_self), 500 );//back to selected
				//_self.timer = window.setTimeout( "_self.setSelected();" ,500);//back to selected
				//_self.setSelected();
			}
		);
	};
	this.handleClick = function(el){
		//this.colorLi.children('a').click(function(e){
			//var _this = $(this);
			//_self.colorLi.removeClass('big');
			//_this.parent('li').addClass('big');
			//_self.preview.srcSelected = _this.attr('href');
			//_self.colorNameSelected = _this.children('img').attr('alt');
			_self.preview.srcSelected = el.children('a').attr('href');
			_self.colorNameSelected = el.find('img').attr('alt');
			_self.setSelected();
			//e.preventDefault();
		//});
	}
};

var packagePanel = {
	panel: null,
	accordionTitle: null,
	accordionContent: null,
	init: function(){
		packagePanel.panel = $('div.package_panel');
		packagePanel.accordionTitle = packagePanel.panel.find('div.accordion_title');
		packagePanel.accordionContent = packagePanel.accordionTitle.next('div.accordion_content');
		packagePanel.handleAccordion();
		//packagePanel.accordionTitle.eq(0).addClass('on').next('div.accordion_content').show();//landing at the page, first element is open
	},
	handleAccordion: function() {
		packagePanel.accordionTitle.click(function(e){
			var _this = $(this);
			if ( _this.hasClass('on') ) {
				_this.removeClass('on').next('div.accordion_content').stop(true,true).slideUp();
			} else {
				packagePanel.accordionTitle.removeClass('on');
				packagePanel.accordionContent.stop(true,true).slideUp(400, 'linear');
				_this.addClass('on').next('div.accordion_content').stop(true,true).slideDown(400, 'linear');
			}
			e.preventDefault;
		});
	}
};

var changeViewExt = {
	panel: null,
	box: null,
	init: function(){
		changeViewExt.panel = $('div.model_outside div.mv_panel');
		changeViewExt.box = changeViewExt.panel.find('div.view a');
		changeViewExt.box.removeClass('on').eq(1).addClass('on');//default view is 2, so light up the right box when landing
		changeViewExt.box.click(function(e){
			var _this = $(this);
			
			changeViewExt.box.removeClass('on');
			_this.addClass('on');
			
			statusHandler.carViewExt = changeViewExt.panel.find('div.view').index(_this.parent())+1;
			//var view = changeViewExt.panel.find('div.view').index(_this.parent())+1;
			//alert('1');
			//$('div.layers').append(fiatCom.loadingCC);
			$('div.layers').hide();
			$('div.layers').after(fiatCom.loadingCC);
			//handleCurrentCar.initRedraw();
			handleCurrentCar.redraw();
			//cms.getCcFlagsExt('view'+statusHandler.carViewExt);
			cms.getCcFlagsExt(statusHandler.carViewExt);
			
			e.preventDefault();
		});
	},
	updateImg: function(where){
		var nodeType = '';
		var currentColorType = '';
		var colorWrap = '';
		var imgClass;
		switch (where) {
			case "outside":
				nodeType = 'external';
				currentColorType = "colorExt";
				viewerWrap = 'model_outside';
				imgClass = 'ext';
			break;
			case "inside":
				nodeType = 'internal';
				currentColorType = "colorInt";
				viewerWrap = 'inside';
				imgClass = 'int';
			break;
			default:
		}
		//$('div.'+viewerWrap+' ul.views div.view').find('img').attr({'src':fiat_respath+'/img/placeholder/115x69.png'});//temporaneo
		cms.cmsCurrentTrim.find(nodeType+' item').each(function(){//print more views images
			var i_opt_code = $('VehicleColorId',this).text();
			if ( i_opt_code == currentCar[currentColorType] ) {
				//var counter = 0;
				$(this).find('view').each(function(i){
					var _this = $(this);
					//var viewCode = _this.attr('cod');
					var viewImg = _this.text();
					
					/* $.log(viewImg + ' --- ' + i);
					if (viewImg != '') {//doesn't work: a 1x1 image is always uploaded
						counter++;
					}
					//$.log('contatore: '+where+' _______ '+counter); */
					
					$('div.'+viewerWrap+' ul.views div.view').eq(i).find('img').attr({'src':cmsPath+viewImg});//more views
					if ( where=='outside' && i == 1){
						finitoPage.container.find('div.review_img.'+imgClass).children('img').attr({'src':cmsPath+viewImg});//finito page
					}
					if ( where=='inside' ){
						if (i === 0) {
							finitoPage.container.find('div.review_img.'+imgClass).children('img').attr({'src':cmsPath+viewImg});//finito page
						}
						//$.log(where+' '+viewImg);
						if (viewImg!='') {
							//$.log('if '+viewImg);
							var img = new Image();
							img.src = cmsPath+viewImg;
							img.onload = function() {
								//$.log(this.width + 'x' + this.height);
								if ( img.width==1 && img.height==1 ) {//some cars have only an internal view
									$('div.inside ul.views li.mv').hide();//so hide the panel to switch view
								}
							}
						}
					}
				});
				/* if ( counter<=1 ) {//less than 2 views, more view panel has no sense
					$('div.'+viewerWrap+' ul.views li.mv').hide();
				} else {
					$('div.'+viewerWrap+' ul.views li.mv').show();
				} */
				return false;
			}
		});
		
		/* xml.find('internal item').each(function(){//print more views internal images
			var i_opt_code = $('VehicleColorId',this).text();
			if ( i_opt_code == currentCar.colorInt ) {
				$(this).find('view').each(function(i){
					var _this = $(this);
					//var viewCode = _this.attr('cod');
					var viewImg = _this.text();
					$('div.inside ul.views div.view').eq(i).find('img').attr({'src':cmsPath+viewImg});
				});
				return false;
			}
		}); */
	}
};

var changeViewInt = {
	panel:null,
	box:null,
	init:function(){
		changeViewInt.panel = $('div.inside div.mv_panel');
		changeViewInt.box = changeViewInt.panel.find('div.view a');
		changeViewInt.box.removeClass('on').eq(0).addClass('on');//default view is 1, so light up the right box when landing
		changeViewInt.box.click(function(e){
			var _this = $(this);
			
			changeViewInt.box.removeClass('on');
			_this.addClass('on');
			
			statusHandler.carViewInt = changeViewInt.panel.find('div.view').index(_this.parent())+1;
			//var view = changeViewInt.panel.find('div.view').index(_this.parent())+1;
			//$('div.layers').append(fiatCom.loadingCC);
			$('div.layers').hide();
			$('div.layers').after(fiatCom.loadingCC);
			//handleCurrentCar.initRedraw();
			handleCurrentCar.redraw();
			cms.getCcFlagsInt(statusHandler.carViewInt);
			
			e.preventDefault();
		})
	}
};


var handleMpFlags = {
	modelFlags: null,
	init: function(){
		handleMpFlags.modelFlags = $('#above ul.flags.mp');
		handleMpFlags.populateFlags();
	},
	populateFlags: function(){
		if (!fiatCom.filledMpFlags) {//populate once only
			//$.log('populateFlags '+modelCar.carCode);
			fiatCom.filledMpFlags = true;
			cms.getMpFlags(modelCar.carCode);
		}
	},
	initDynamic: function(){
		//$.log(statusHandler.current);
		switch (statusHandler.current) {
			case 1:
			case 2:
				handleMpFlags.modelFlags.children('li.rt, li.up').css({
					opacity: 0,
					//right: '-='+statusHandler.OFFSET
					left: '+='+statusHandler.OFFSET
				});
				handleMpFlags.modelFlags.children('li.lt, li.dn').css({
					opacity: 0,
					left: '-='+statusHandler.OFFSET
				});
			break;
			default:
		}
	},
	hideModelFlags: function(activate){
		if (activate) {
			var stop_timeout = false;
			//$.log('activated!')
			//$(document).mousemove(function() {
			$('#above div.layers').mousemove(function() {
				//$.log('moving, just keep moviiiiiiing')
				handleMpFlags.modelFlags.fadeIn();
				clearTimeout(stop_timeout);
				stop_timeout = setTimeout(function() {//alert("The mouse has stopped.");
					handleMpFlags.modelFlags.fadeOut();
				}, 5000);
			});
			// document.addEventListener('touchstart', function(event) {//touchscreen (IE7 needs a fix)
				//$(this).trigger('mousemove');
			//}, false);
		} else {
			//$.log('deactivated!')
			$('#above div.layers').unbind('mousemove');
		}
	}
};

var statusHandler = {//handle landing and animation between status 0, 1 etc.
	SPEED: 500,
	OFFSET: 400,
	canAnim: true,
	current: null,//lo stato della pag: 0(=model page), 1(=outside), 2(=inside), 3(=finito)
	carViewExt: 2,//la view da 1 a 4 outside, default 2
	carViewInt: 1,//la view 1 o 2 inside
	status01: null,//model page, outside
	status2: null,//inside
	status3: null,//finito
	bgImgExt: null,
	bgImgInt: null,
	toolbarEl: null,
	actions: null,
	whereLanded: 0,
	//configFlags: null,
	//configFlagsPack: null,
	toolbar: null,
	views: null,
	init: function(){
		statusHandler.bgImgExt = $('#above div.above_wider').children('img.ext');
		statusHandler.bgImgInt = $('#above div.above_wider').children('img.int');
		statusHandler.status01 = $('#above div.model_outside');
		statusHandler.status2 = $('#above div.inside');
		statusHandler.status3 = $('#above div.finito');
		statusHandler.viewsExt = statusHandler.status01.children('ul.views');
		statusHandler.viewsInt = statusHandler.status2.children('ul.views');
		//statusHandler.modelFlags = $('#above ul.flags.mp');
		//statusHandler.configFlags = $('#above ul.flags.cc');//moved to configurator.js
		//statusHandler.configFlagsPack = statusHandler.configFlags.children('li.packages');
		statusHandler.toolbar = $('#above div.toolbar');
		statusHandler.toolbarEl = statusHandler.toolbar.children('ul.config_steps').children('li');
		statusHandler.actions = statusHandler.status01.find("div.actions");
		
		statusHandler.trimData = $('input.landing_trim');
		statusHandler.landingDescs = statusHandler.trimData.attr('rel').split('_');
		statusHandler.landingCodes = statusHandler.trimData.val().split('|');
		statusHandler.supermodel = statusHandler.trimData.attr('data-supermodel');
		
		statusHandler.handleLanding();
		//statusHandler.openPanels();
		
		modelPanel.configureBtn.click(function(e){
			//$('div.test_mvs').hide();//solo per test: mostra nuovamente il blocco con le select per la selezione degli mvs
			if ( statusHandler.canAnim ) {
				statusHandler.canAnim = false;//disable psycothic clicks
				statusHandler.status0_1Animated();
				updateDataTracking( modelCar.modelDesc, modelCar.versionDesc, true );
				var data = $(this).attr("data-tracking");//sophus tracking
				s3_log(data);
				$.log(data);
			}
			//return false;
			e.preventDefault();
		});
		myPanel.modelBtn.click(function(e){
			//$('div.test_mvs').fadeIn();//solo per test: mostra nuovamente il blocco con le select per la selezione degli mvs
			if ( statusHandler.canAnim ) {
				statusHandler.canAnim = false;//disable psycothic clicks
				switch (statusHandler.current) {
					case 1:
						statusHandler.status1_0();
					break;
					case 2:
						statusHandler.status2_0();
					break;
					default:
				}
				handleOpt.close();
			}
			e.preventDefault();
		});
		statusHandler.toolbarEl.eq(0).find('a').click(function(e){
			if ( !$(this).parent('li').hasClass('on') ) {
				//$.log('sono spento 1');
				$(":animated").stop(true,true);
				statusHandler.status_1();
				handleOpt.close();
			}// else {
				//$.log('sono acceso 1');
			//}
			//e.preventDefault();
			var data = $(this).attr("data-tracking");
			s3_log(data);//sending data to sophus
			$.log(data);
			return false;
		});
		statusHandler.toolbarEl.eq(1).find('a').click(function(e){
			if ( !$(this).parent('li').hasClass('on') ) {
				//$.log('sono spento 2');
				$(":animated").stop(true,true);
				statusHandler.status_2();
				handleOpt.close();
			}
			/* var data = $(this).attr("data-tracking");
			s3_log(data);//sending data to sophus
			$.log(data); */
			e.preventDefault();
		});
		statusHandler.toolbarEl.eq(2).find('a').click(function(e){
			if ( !$(this).parent('li').hasClass('on') ) {
				//$.log('sono spento 3');
				$(":animated").stop(true,true);
				statusHandler.status_3();
				handleOpt.close();
				//building sophus tags with FINITO page param
				var desc = encodeURI(currentCar.modelDesc);
				var vers = encodeURI(currentCar.versionDesc);
				var color = encodeURI(myPanelInnerTabs.tabContent.eq(0).find('div.optional').eq(0).find('div.txt_wrap div.description').text());
				var wheels = encodeURI(myPanelInnerTabs.tabContent.eq(0).find('div.optional').eq(2).find('div.txt_wrap div.description').text());
				var interior = encodeURI(myPanelInnerTabs.tabContent.eq(0).find('div.optional').eq(1).find('div.txt_wrap div.description').text());
				$(this).attr("data-tracking", "/car_configurator_8/summary?model="+desc+"&version="+vers+"&colour="+color+"&wheels="+wheels+"&interior="+interior);
				
				//var data = $(this).attr("data-tracking");
				//s3_log(data);//sending data to sophus
				//$.log(data);
			}
			/* var data = $(this).attr("data-tracking");
			s3_log(data);//sending data to sophus
			$.log(data); */
			e.preventDefault();
		});
	},
	handleLanding: function(){
		//modelPanel.initDynamic();
		var status = GetUrlParam('status');//$.log(status);
		var COAcar = GetUrlParam('car');
		//$.log(COAcar);
		COAcar = COAcar.replace('@','#');
		//$.log(COAcar);
		handleModelCar = new HandleCar(modelCar);
		handleCurrentCar = new HandleCar(currentCar);
		
		handleModelCar.init( statusHandler.landingDescs, statusHandler.landingCodes, '' );//it needs to be always initialized, to permit mpflag population

		switch(status){
			case '1':
				//handleCurrentCar = new HandleCar(currentCar);
				if ( COAcar != '' ) {//coming from COA
					var COAcodes = COAcar.split('|');
					handleCurrentCar.modelUpdated = true;//get modelDesc from VL
					handleCurrentCar.versionUpdated = true;//get versionDesc from VL
					handleCurrentCar.init( '', COAcodes, 'COA' );
				} else {
					handleCurrentCar.init( statusHandler.landingDescs, statusHandler.landingCodes, '' );
				}
				statusHandler.current = 1;
				statusHandler.toolbarEl.removeClass('on').eq(0).addClass('on');
				statusHandler.bgImgExt.show();
				statusHandler.bgImgInt.hide();
				statusHandler.status0_1Landing();
				statusHandler.status01.show();
				//modelTabs.gradeControls();
				//handleCurrentCar.initRedraw();//moved to mypanel.initdynamic > printPrice
				statusHandler.trackingSophus(statusHandler.landingDescs);
				var trackClicks01 = new TrackClicks(); // sophus tracking
				trackClicks01.tracking($('div.above_inner'));
			break;
			case '2':
				if ( COAcar != '' ) {//coming from COA
					var COAcodes = COAcar.split('|');
					handleCurrentCar.modelUpdated = true;//gain modelDesc from VL
					handleCurrentCar.versionUpdated = true;//gain versionDesc from VL
					handleCurrentCar.init( '', COAcodes, 'COA' );
				} else {
					handleCurrentCar.init( statusHandler.landingDescs, statusHandler.landingCodes, '' );
				}
				//handleCurrentCar.init( statusHandler.landingDescs, statusHandler.landingCodes, '' );
				statusHandler.current = 2;
				statusHandler.toolbarEl.removeClass('on').eq(1).addClass('on');
				//hide model page panel etc
				statusHandler.bgImgExt.hide();
				statusHandler.bgImgInt.show();
				statusHandler.status2Landing();
				statusHandler.status2.show();
				statusHandler.trackingSophus(statusHandler.landingDescs);
				var trackClicks02 = new TrackClicks(); // sophus tracking
				trackClicks02.tracking($('div.above_inner'));
				//handleCurrentCar.initRedraw();//moved to mypanel.initdynamic > printPrice
			break;
			default://model page
				statusHandler.carViewExt = 2;//MP default view is 2
				currentCar.selectedOpt = '';
				
				//handleModelCar.init( statusHandler.landingDescs, statusHandler.landingCodes, '' );//moved out of switch
				statusHandler.current = 0;
				statusHandler.viewsExt.hide();//temp
				myPanel.panel.hide().css({
					right: '-='+statusHandler.OFFSET,
					opacity: 0
				});
				statusHandler.status01.show();
				statusHandler.bgImgExt.show();
				statusHandler.bgImgInt.hide();
				handleMpFlags.hideModelFlags(true);
				//modelTabs.gradeControls();
				modelPanel.initDynamic();
				//var trackConfig = new TrackClicks(); // sophus tracking
				//trackConfig.tracking( modelPanel.panel );
				//handleCurrentCar.copy();//moved to modelpanel initdynamic > print price
				//handleCurrentCar.initRedraw();
				//handleModelCar.initRedraw();
		};
		statusHandler.whereLanded = statusHandler.current;
	},
	status0_1Landing: function(){//atterraggio su status 1. without animation
		//statusHandler.current = 1;
		//handleOpt.init();

		handleMpFlags.hideModelFlags(false);
		statusHandler.bgImgExt.show();
		statusHandler.bgImgInt.hide();
		modelPanel.colorLi.hide();//ie8
		/* handleMpFlags.modelFlags.children('li.rt').css({
			opacity: 0,
			right: '-='+statusHandler.OFFSET
		});
		handleMpFlags.modelFlags.children('li.lt').css({
			opacity: 0,
			left: '-='+statusHandler.OFFSET
		}); */
		modelPanel.panel.hide().css({
			opacity: 0,
			right: '-='+statusHandler.OFFSET
		});
		myPanel.panel.show().css({
			//right: '+='+statusHandler.OFFSET,
			right: 0,
			opacity: 1
		});
		//statusHandler.toolbar.slideDown(statusHandler.SPEED);
		//statusHandler.configFlags.fadeIn(statusHandler.SPEED);
		statusHandler.toolbar.show();
		handleOpt.configFlags.show();
		
		//modelPanel.initDynamic();
		myPanel.initDynamic();
	},
	status2Landing: function(){//atterraggio su status 2. without animation
		//statusHandler.current = 2;
		//handleOpt.initExt();
		//handleOpt.initInt();
		handleMpFlags.hideModelFlags(false);
		modelPanel.colorLi.hide();//ie8
		/* handleMpFlags.modelFlags.children('li.rt').css({
			opacity: 0,
			right: '-='+statusHandler.OFFSET
		});
		handleMpFlags.modelFlags.children('li.lt').css({
			opacity: 0,
			left: '-='+statusHandler.OFFSET
		}); */
		modelPanel.panel.hide().css({
			opacity: 0,
			right: '-='+statusHandler.OFFSET
		});
		myPanel.panel.appendTo(statusHandler.status2).show().css({
			//right: '+='+statusHandler.OFFSET,
			right: 0,
			opacity: 1
		});
		statusHandler.toolbar.show();
		handleOpt.configFlags.show();
		statusHandler.bgImgExt.hide();
		statusHandler.bgImgInt.show();
		
		myPanel.initDynamic();
	},
	status0_1Animated: function(){//passaggio da status 0 (model page) a status 1 (outside). animated without runloop plugin
		statusHandler.current = 1;
		handleCurrentCar.clear('current');//reset current car
		var trimData = $('input.landing_trim');
		var mvsDescs = trimData.attr('rel').split('_');
		var mvsCodes = trimData.val().split('|');
		//var supermodel = trimData.attr('data-supermodel');
		//fiatCom.filledMyPanel = false;
		handleCurrentCar.init( mvsDescs, mvsCodes, 'model' );
		
		//handleOpt.init();
		
		handleOpt.initExt();//useless?
		handleOpt.initInt();//useless?
		
		
		handleMpFlags.hideModelFlags(false);
		//$.log("1: let's start");
		handleMpFlags.modelFlags.children('li.rt, li.up').animate({//step 1
			opacity: 0,
			//right: '-='+statusHandler.OFFSET
			left: '+='+statusHandler.OFFSET
		}, statusHandler.SPEED);
		handleMpFlags.modelFlags.children('li.lt, li.dn').animate({
			opacity: 0,
			left: '-='+statusHandler.OFFSET
		}, statusHandler.SPEED);
		modelPanel.colorLi.fadeOut();//ie8
		modelPanel.panel.animate({
			opacity: 0,
			right: '-='+statusHandler.OFFSET
		}, statusHandler.SPEED, function() {//callback for step 2
			//$.log("2: ");
			modelPanel.panel.hide();//hide model panel after animation, to prevent clicks when opacity = 0
			statusHandler.toolbarEl.removeClass('on').eq(0).addClass('on');
			statusHandler.toolbar.slideDown(statusHandler.SPEED, function() {//callback for step 3
				//$.log("3: ");
				myPanelOuterTabs.tabContent.filter('.on').fadeIn();//ie8
				myPanel.panel.show().animate({
					right: '+='+statusHandler.OFFSET,
					opacity: 1
				}, statusHandler.SPEED);
				statusHandler.canAnim = true;//re-enable click to animate panels
				handleOpt.configFlags.fadeIn(statusHandler.SPEED);
				statusHandler.viewsExt.fadeIn(statusHandler.SPEED);//temp
			});
		});
		
		myPanel.initDynamic();
	},
	status1_0: function(){//passaggio da status 1 (outside) a status 0 (model page). animated
		statusHandler.carViewExt = 2;//MP default view is 2
		currentCar.selectedOpt = '';
		//handleCurrentCar.copy();//moved to modelpanel.initdynamic > print price
		//handleCurrentCar.initRedraw();
		
		//$.log("1: let's come back");
		statusHandler.current = 0;
		if (!handleModelCar.initialized) {
			handleModelCar.init( statusHandler.landingDescs, statusHandler.landingCodes, '' );
		}
		handleMpFlags.hideModelFlags(true);
		handleOpt.configFlags.fadeOut(statusHandler.SPEED);
		statusHandler.viewsExt.fadeOut(statusHandler.SPEED);//temp
		myPanelOuterTabs.tabContent.filter('.on').fadeOut();//ie8
		//myPanelOuterTabs.tabContent.find('li').fadeOut();//ie8
		myPanel.panel.stop(true,true).animate({
			right: '-='+statusHandler.OFFSET,
			opacity: 0
		}, statusHandler.SPEED, function() {//callback for step 2
			//$.log("2: ");
			myPanel.panel.hide();//hide my panel after animation, to prevent clicks when opacity = 0
			//statusHandler.status01.add(statusHandler.bgImg).fadeIn();
			statusHandler.toolbar.slideUp(statusHandler.SPEED, function() {//callback for step 3
				//$.log("3: ");
				handleMpFlags.modelFlags.children('li.rt, li.up').animate({
					opacity: 1,
					//right: '+='+statusHandler.OFFSET
					left: '-='+statusHandler.OFFSET
				}, statusHandler.SPEED);
				handleMpFlags.modelFlags.children('li.lt, li.dn').animate({
					opacity: 1,
					left: '+='+statusHandler.OFFSET
				}, statusHandler.SPEED);
				modelPanel.panel.show().animate({
					opacity: 1,
					right: '+='+statusHandler.OFFSET
				}, statusHandler.SPEED);
				statusHandler.canAnim = true;//re-enable click to animate panels
				modelPanel.colorLi.fadeIn();//ie8
			});
		});
		modelPanel.initDynamic();
	},
	status2_0: function(){//passaggio da status 2 (inside) a status 0 (model page)
		statusHandler.carViewExt = 2;//MP default view is 2
		currentCar.selectedOpt = '';
		//handleCurrentCar.copy();//moved to modelpanel.initdynamic > print price
		//handleCurrentCar.initRedraw();
	
		//$.log("1: let's come back");
		statusHandler.current = 0;
		if (!handleModelCar.initialized) {
			handleModelCar.init( statusHandler.landingDescs, statusHandler.landingCodes, '' );
		}
		handleMpFlags.hideModelFlags(true);
		myPanelOuterTabs.tabContent.filter('.on').fadeOut();//ie8
		myPanel.panel.stop(true,true).animate({
			right: '-='+statusHandler.OFFSET,
			opacity: 0
		}, statusHandler.SPEED, function() {//callback for step 2
			//$.log("2: ");
			myPanel.panel.hide().appendTo(statusHandler.status01);//hide my panel after animation, to prevent clicks when opacity = 0, and move back to external
			statusHandler.bgImgInt.fadeOut(statusHandler.SPEED);
			statusHandler.status01.add(statusHandler.bgImgExt).fadeIn();
			statusHandler.status2.add( statusHandler.bgImgInt ).fadeOut();//hide to prevent visibility when coming back to external
			handleOpt.configFlags.hide();
			statusHandler.viewsExt.hide();//temp
			statusHandler.viewsInt.fadeOut(statusHandler.SPEED);//temp
			statusHandler.toolbar.slideUp(statusHandler.SPEED, function() {//callback for step 3
				//$.log("3: ");
				handleMpFlags.modelFlags.children('li.rt, li.up').animate({
					opacity: 1,
					//right: '+='+statusHandler.OFFSET
					left: '-='+statusHandler.OFFSET
				}, statusHandler.SPEED);
				handleMpFlags.modelFlags.children('li.lt, li.dn').animate({
					opacity: 1,
					left: '+='+statusHandler.OFFSET
				}, statusHandler.SPEED);
				modelPanel.panel.show().animate({
					opacity: 1,
					right: '+='+statusHandler.OFFSET
				}, statusHandler.SPEED);
				statusHandler.canAnim = true;//re-enable click to animate panels
				modelPanel.colorLi.fadeIn();//ie8
			});
		});
		modelPanel.initDynamic();
	},
	status_1: function(){//passaggio a status 1 (outside)
		statusHandler.current = 1;
		//handleOpt.initExt();//inutile, viene gia' invocata da initLanding
		//$.log('status_1');
		//handleOpt.initInt();//inutile, viene gia' invocata da initLanding
		handleMpFlags.hideModelFlags(false);
		if(handleOpt.configFlagsPack != null){
			handleOpt.configFlagsPack.fadeOut(function(){
				var currentView = 'view'+ statusHandler.carViewExt;
				//handleOpt.configFlagsPack.appendTo( $('.model_outside ul.flags.cc') ).removeAttr('style').css({'left':cms.packCoord.extFlags.view1.x, 'top':cms.packCoord.extFlags.view1.y}).fadeIn();//flag
				handleOpt.configFlagsPack.appendTo( $('.model_outside ul.flags.cc') ).removeAttr('style').css({'left':cms.packCoord.extFlags[currentView].x, 'top':cms.packCoord.extFlags[currentView].y}).fadeIn();//flag
				if ( fiatCom.readyPack /* && !fiatCom.filledPackPanel */ ) {//move package panel only if exists (otherwise fires an error)
					packagePanel.panel.appendTo( statusHandler.status01 );
				}
				//$('#above div.package_panel').appendTo( $('#above div.model_outside') );//pannello
			});
		}
		myPanel.panel.stop(true,true).fadeOut(function(){
			myPanel.panel.appendTo(statusHandler.status01).fadeIn();
		});
		//statusHandler.status01.append(myPanel.panel);
		statusHandler.status2.add( statusHandler.status3 ).add( statusHandler.bgImgInt ).fadeOut(function(){
			statusHandler.toolbarEl.removeClass('on').eq(0).addClass('on');
			statusHandler.status01.add( statusHandler.bgImgExt ).fadeIn();
		});
		
		myPanel.initDynamic();
		//handleOpt.init();
		handleCurrentCar.redraw();
	},
	status_2: function(){//passaggio a status 2 (inside)
		statusHandler.current = 2;
		//handleOpt.initExt();//inutile, viene gia' invocata da initLanding
		//$.log('status_2');
		//handleOpt.initInt();//inutile, viene gia' invocata da initLanding
		handleMpFlags.hideModelFlags(false);
		if(handleOpt.configFlagsPack != null){
			handleOpt.configFlagsPack.fadeOut(function(){
				var currentView = 'view'+ statusHandler.carViewInt;
				//handleOpt.configFlagsPack.appendTo( $('.inside ul.flags.cc') ).removeAttr('style').css({'left':cms.packCoord.intFlags.view1.x, 'top':cms.packCoord.intFlags.view1.y}).fadeIn();
				handleOpt.configFlagsPack.appendTo( $('.inside ul.flags.cc') ).removeAttr('style').css({'left':cms.packCoord.intFlags[currentView].x, 'top':cms.packCoord.intFlags[currentView].y}).fadeIn();
				//$('#above div.package_panel').appendTo( $('#above div.inside') );
				if ( fiatCom.readyPack /* && !fiatCom.filledPackPanel */ ) {//move package panel only if exists (otherwise fires an error)
					packagePanel.panel.appendTo( statusHandler.status2 );
				}
			});
		}
		myPanel.panel.stop(true,true).fadeOut(function(){
			myPanel.panel.appendTo(statusHandler.status2).fadeIn();
			
		});
		//statusHandler.status2.append(myPanel.panel);
		statusHandler.status01.add( statusHandler.status3 ).add( statusHandler.bgImgExt ).fadeOut(function(){
			statusHandler.toolbarEl.removeClass('on').eq(1).addClass('on');
			statusHandler.status2.add( statusHandler.bgImgInt ).fadeIn();
		});
		statusHandler.viewsInt.fadeIn(statusHandler.SPEED);//temp
		
		handleCurrentCar.redraw();
	},
	status_3: function(){//passaggio a status 3 (finito page)
		statusHandler.current = 3;
		handleMpFlags.hideModelFlags(false);
		statusHandler.status01.add( statusHandler.status2 ).add( statusHandler.bgImgExt ).add( statusHandler.bgImgInt ).fadeOut(function(){
			statusHandler.toolbarEl.removeClass('on').eq(2).addClass('on');
			statusHandler.status3.fadeIn();
		});
		
		//$('span.price.tot').html(currentCar.price);//finito page
		
		if (!fiatCom.filledTechSpec) {
			fiatCom.filledTechSpec=true;
			//finitoTabs.tabContent.eq(1).html(fiatCom.loading);
			var info = {
				//feature: 'DT10'//2.9
				//feature: 'DT02'//0
				//feature: 'DT02|DT10|DT11|DT12|DT19|DT40'
				feature: ''
			};
			cc.getTechSpec(currentCar, info, finitoPage.printTechSpec);
		}
	},
	trackingSophus: function(description){
		var model = description[0];
		var desc = description[1];
		
		//tracking actions
		statusHandler.actions.find("a.saved_builds").attr("data-tracking", "/modelpage/" + model + "/" + desc + "/configurator/follow-up/saved-builds");
		statusHandler.actions.find("a.save").attr("data-tracking", "/modelpage/" + model + "/" + desc + "/configurator/follow-up/save");
		statusHandler.actions.find("a.tdrive").attr("data-tracking", "/modelpage/" + model + "/" + desc + "/configurator/follow-up/tdrive");
		
		//tracking change-version, outside, inside
		statusHandler.toolbar.find("a.mvs_selection.change_mvs").attr("data-tracking", "/modelpage/" + model + "/" + desc + "/change_mvs");
		statusHandler.toolbarEl.find("a.view_outside").attr("data-tracking", "/modelpage/" + model + "/" + desc + "/view_outside");
		statusHandler.toolbarEl.find("a.view_inside").attr("data-tracking", "/modelpage/" + model + "/" + desc + "/view_inside");
		
		//tracking more views
		statusHandler.viewsExt.find("a").eq(0).attr("data-tracking", "/modelpage/" + model + "/" + desc + "/more-views");//ext views
		statusHandler.viewsInt.find("a").eq(0).attr("data-tracking", "/modelpage/" + model + "/" + desc + "/more-views");//int views
	}
	
	// ,
	// openPanels: function(){
		// statusHandler.configFlags.find('a').click(function(e){
			// var _this = $(this);
			// if ( !_this.parent('li').hasClass('on') ){
				// var clicked = '';
				// clicked = _this.attr('rel');
				// //$.log(clicked);
				// if (clicked != '') {
					// statusHandler.configFlags.find('li').removeClass('on');
					// _this.parent().addClass('on');
					// optPanels.panel.fadeOut().filter('div.'+clicked).fadeIn();//open his own panel
					// if ( myPanelOuterTabs.tabControls.hasClass('on') ) {
						// myPanelOuterTabs.tabContent.slideUp();//close myPanel
						// myPanelOuterTabs.tabControls.removeClass('on');
					// }
				// }
			// }
			// e.preventDefault();
		// });
	// }
};

var mvsSelection = {//overlay cambia versione
	btnChange: null,
	otherTrim: [],
	engineCount: 0,
	init: function(){
		mvsSelection.container = $("div.mvs_selection");
		mvsSelection.modelPanel = mvsSelection.container.find("div.model");
		mvsSelection.trimPanel = mvsSelection.container.find("div.trim");
		mvsSelection.trim = mvsSelection.trimPanel.find("ul:first").children("li");
		
		mvsSelection.btnChange = mvsSelection.container.find("a.change_trim");
		mvsSelection.engineTypes = $('div.mvs_selection div.model div.trim div.engine div.engine_type');
		//mvsSelection.changeMvs();
		mvsSelection.closeLayer();
	},
	selecting: function(trigger){
		trigger.click(function(e){
			var $this = $(this);
			if($this.hasClass("on")){return}
			
			trigger.removeClass("on");
			$this.addClass("on");
			
			e.preventDefault();
		});
		/* mvsSelection.btnChange.click(function(e){
			alert('');
			mvsSelection.trim.trigger('click');
			e.preventDefault();
		}); */
	},
	layer: function(){
		var mvs_layer = '<div class="mvs_selection">'+
								'<div class="header">'+
									'<div>'+
										'<h2>' + printMsg("configurator", "changing") + '</h2>'+
										'<p>' + printMsg("configurator", "changingAlert") + '</p>'+
									'</div>'+
									'<a href="#" class="close">' + printMsg("configurator", "changingRevert") + '</a>'+
								'</div>'+
								'<div class="wrapper">'+
									'<div class="model">'+
										'<ul><li><div class="loading"><img src="'+fiat_respath+'img/ajax.gif" /></div></li></ul>'+//check path
									'</div>'+
								'</div>'+
							'</div>';
		return mvs_layer;
	},
	closeLayer: function(){
		$("div.mvs_selection a.close").click(function(e){
			layerMvsSelection.objLayer.remove();
			mvsSelection.btnChange.die('click');
			//e.preventDefault();
			return false;
		});
	},
	startCall:function(){
		//cc.getModel(currentCar,mvsSelection.handleModels);
		//cms.getModel(mvsSelection.handleModels, statusHandler.supermodel);
		cms.getModel(mvsSelection.handleModels);
	},
	//handleModels: function(param, modelDesc, allModels){
	handleModels: function(response){
		var model = '';
		
		var supermodelLanding = $('input.landing_trim').attr('data-supermodel');
		
		if(supermodelLanding != ''){//il supermodel esiste
			$(response).find("item").each(function(){
				var modelId = $('VehicleModelId',this).text();
				var modelDesc = $('VehicleModelName',this).text();
				var image = $('Image',this).text();
				var supermodel = $('SuperModel',this).text();
				
				if ( supermodel == supermodelLanding ) {
					if ( modelId == currentCar.modelId ) {
						//model += '<li class="on" rel="'+modelId+'">';
						model += '<li class="on populated" rel="'+modelId+'">';
					} else {
						model += '<li rel="'+modelId+'">';
					}
					
					//model += '<img src="'+fiat_respath+image+'" />'+
					model += '<img src="'+image+'" />'+
								'<h3>'+modelDesc+'</h3>'+
								'<div class="trim">'+
									'<ul><li><div class="loading"><img src="'+fiat_respath+'img/ajax.gif" /></div></li></ul>'+
								'</div>'+
							'</li>';
					
					if ( modelId == currentCar.modelId ) {
						cc.getVersions(currentCar, mvsSelection.handleVersions);
					}
				}
			});
		} else {//non esiste il supermodello, quindi stampiamo solo il modello della current
			$(response).find("item").each(function(){
				var modelId = $('VehicleModelId',this).text();
				var modelDesc = $('VehicleModelName',this).text();
				var image = $('Image',this).text();
				//var supermodel = $('SuperModel',this).text();
				
				if ( modelId == currentCar.modelId ) {
					model += '<li class="on" rel="'+modelId+'">';

					//model += '<img src="'+fiat_respath+image+'" />'+
					model += '<img src="'+image+'" />'+
								'<h3>'+modelDesc+'</h3>'+
								'<div class="trim">'+
									'<ul><li><div class="loading"><img src="'+fiat_respath+'img/ajax.gif" /></div></li></ul>'+
								'</div>'+
							'</li>';
					
					cc.getVersions(currentCar, mvsSelection.handleVersions);
					
					return false;
				}
			});
		}
		
		
		/* $(response).find("item").each(function(){
			var modelId = $('VehicleModelId',this).text();
			var modelDesc = $('VehicleModelName',this).text();
			var image = $('Image',this).text();
			var supermodel = $('SuperModel',this).text();
			
			if ( modelId == currentCar.modelId ) {
				model += '<li class="on" rel="'+modelId+'">';
			} else {
				model += '<li rel="'+modelId+'">';
			}
			model += '<img src="'+fiat_respath+image+'" />'+
						'<h3>'+modelDesc+'</h3>'+
						'<div class="trim">'+
							'<ul><li><div class="loading"><img src="'+fiat_respath+'img/ajax.gif" /></div></li></ul>'+
						'</div>'+
					'</li>';
			
			if ( modelId == currentCar.modelId ) {
				cc.getVersions(currentCar, mvsSelection.handleVersions);
			}
		}); */
		
		$('div.mvs_selection div.model>ul').html(model);
		mvsSelection.selecting($('div.mvs_selection div.model ul:first li'));//activating click to show list of versions
	},
	handleSuper: function(){
		mvsSelection.engineCount = 0;//reset
		$('div.mvs_selection div.model > ul > li:not([rel="'+currentCar.modelId+'"])').live('click',function(e){
		//$('div.mvs_selection div.model > ul > li:not([rel="'+currentCar.modelId+'"])').live('click',function(e){
		//$('div.mvs_selection div.model > ul > li:not([rel="'+currentCar.modelId+'"])').click(function(){
			var _this = $(this);
			if ( !_this.hasClass('populated') ) {
				var superCar = {
					market: fiat_market,
					language: fiat_lang,
					modelId: _this.attr('rel'),
					versionId: '',
					carCode: '',
					colorExt: '',
					colorInt: ''
				};
				cc.getVersions(superCar, mvsSelection.handleVersions);
				_this.addClass('populated');
			}
			e.preventDefault();
		});
		$('div.mvs_selection div.model > ul > li').children('div').click(function(e){
			e.stopPropagation();
		});
	},
	
	handleVersions: function(param, versionDesc, allVersions){
		mvsSelection.handleSuper();
		//$.log('dentro handleVersions');
		var versions='';
		mvsSelection.otherTrim = [];//reset
		
		//$.log(allVersions);
		allVersions = allVersions.sort(function(a,b) { return parseFloat(a.code) - parseFloat(b.code) });//ordiniamo le versioni in base al code
		//$.log(allVersions);
		
		for(var i=0, len=allVersions.length; i<len; i++){
			var versionCode = allVersions[i].code;
			//var newTrim = "'it','it','150',"+versionCode+",'001500C60000','rosso'";
			var newTrim = {
				market: fiat_market,
				language: fiat_lang,
				modelId: param.modelId,//it should consider not only the current car
				//modelId: currentCar.modelId,
				versionId: versionCode,
				carCode: '',//
				colorExt: '',//should be populated via cms to get default color
				colorInt: ''//should be populated via cms to get default color
			};
			mvsSelection.otherTrim.push(newTrim);
			
			
			if ( allVersions[i].code == currentCar.versionId ) {
				versions += '<li class="on" rel="'+allVersions[i].code+'">';
			} else {
				versions += '<li rel="'+allVersions[i].code+'">';
			}
				versions += 	'<a href="#" rel="'+allVersions[i].description+'"><img src="'+fiat_respath+'img/ajax-mini.gif" alt=""/>'+allVersions[i].description+'</a>'+
								'<div class="engine">'+
									'<div class="accordion"><div class="loading"><img src="'+fiat_respath+'img/ajax.gif" /></div></div>'+
								'</div>'+
								'<div class="details">'+//il div.details viene popolato con chiamata verso contenuti cms
									'<h2></h2>'+
									'<img src="" alt="">'+
									'<img src="" alt="">'+
									'<div class="description"></div>'+
									'<div class="action">'+
										'<a class="select_engine" href="#">' + printMsg("configurator", "selectEngine") + '</a>'+
									'</div>'+
								'</div>'+
							'</li>';
		}
		//$.log('model: '+param.modelId);
		$('div.mvs_selection div.model > ul > li[rel="'+param.modelId+'"] div.trim > ul').html(versions);
		
		mvsSelection.selecting($('div.mvs_selection div.model li[rel="'+param.modelId+'"] div.trim ul:first li'));//activating click to show list of engines
		
		for (var i=0, len=mvsSelection.otherTrim.length; i<len; i++) {
			var tempTrimParam = mvsSelection.otherTrim[i];
			cc.getTrim(tempTrimParam, mvsSelection.handleEngines);
			//cc.getOptStandard(tempTrimParam, modelPanel.printOtherStandard);
		}
		//cms.getVersion(param.modelId+'');//needs to be filtered by MV
		cms.getVersion(param.modelId, mvsSelection.printVersionInfo);//needs to be filtered by Model
	},
	printVersionInfo:function(modelId,versionId,image,ROPanelTitle,ROPanelImage1,ROPanelImage2,ROPanelDescription){
		//$.log('funziona');
		var container = mvsSelection.modelPanel.find('ul > li[rel="'+modelId+'"]').find('div.trim > ul > li[rel="'+versionId+'"]');
		
		container.children('a').children('img').attr({'src': image});
		container.find('div.details > h2').text(ROPanelTitle);
		container.children('div.details').children('img').eq(0).attr({'src': ROPanelImage1});
		container.children('div.details').children('img').eq(1).attr({'src': ROPanelImage2});
		container.children('div.details').children('div.description').html(ROPanelDescription);
	},
	handleEngines: function(param, engineId, engineDesc, gearId, gearDesc, fuelId, fuelDesc, driveId, driveDesc, price, priceNoVat, pricePromo, allFuels, allTrims){
		var engines='';
		mvsSelection.engineCount++;
		//$.log('engine count '+mvsSelection.engineCount + 'other trim length:' + mvsSelection.otherTrim.length);
		for (var i=0, len=allFuels.length; i<len; i++) {
			var header='';
			for (var j in allFuels[i]) {
				//if(allFuels[i][j].engineDescription != undefined){
				if (allFuels[i][j].description != undefined) {
					var cheatingPrice = allFuels[i][j].Price[0].value;
					var cheatingPromoPrice = '0';
					if(allFuels[i][j].Price[2]){
						cheatingPromoPrice = allFuels[i][j].Price[2].value;
					}
					cheatingPrice = addDot(cheatingPrice);
					cheatingPromoPrice = addDot(cheatingPromoPrice);
					if (header != allFuels[i][j].fuelDescription) {
						header = allFuels[i][j].fuelDescription;
						engines +=	'<a class="header">'+header+'</a>'+
									'<div class="content">';
					}
					if (allFuels[i][j].id==currentCar.carCode) {
						engines +=	'<div class="engine_type on" rel="'+allFuels[i][j].id+'">';
					} else {
						engines +=	'<div class="engine_type" rel="'+allFuels[i][j].id+'">';
					}
						engines +=		'<a class="engine_class">&nbsp;'+
											'<span class="tooltip">'+
												//'<span>Fuel efficient engine</span>'+
												'<span></span>'+
											'</span>'+
										'</a>'+
										'<p class="gear">'+allFuels[i][j].description+
											'<span class="info">'+
												'<span class="tooltip">&nbsp;'+
													//'<span>Urbano 8,3</span>'+
													//'<span>Extra 5,3</span>'+
													//'<span>140cv Potenza</span>'+
													//'<span>180 velocit&agrave; max km/h</span>'+
												'</span>'+
											'</span>'+
											'<strong>'+ printMsg("configurator", "gear") + allFuels[i][j].gearDescription+'</strong>'+
										'</p>'+
										'<p class="price">'+ printMsg("configurator", "da");
										
											if ( parseFloat( cheatingPromoPrice.replace(",",".") ) > 0) {//convert comma to dot on the fly (to keep original value)
												engines +=	'<span class="promotion_price">'+ printMsg("currency", param.market) + cheatingPromoPrice +'</span>'+
																		'<span class="list_price deleted">'+ printMsg("currency", param.market) + cheatingPrice +'</span>';
											} else {//no promo
												engines +=	'<span class="promotion_price">'+ printMsg("currency", param.market) + cheatingPrice +'</span>';
											}//need to discriminate between regular price and promo price
										
										engines += '</p>'+
										//'<p class="gear"><strong>'+allFuels[i][j].gearDescription+'</strong> '+allFuels[i][j].engineDescription+
										'<div class="loading"><img src="'+fiat_respath+'img/ajax-mini.gif" alt=""/></div>'+
										'<a class="change_trim" href="#">' + printMsg("configurator", "change") + '</a>'+
									'</div>';
									
					var newParam = {//we need a new car for every single engine, in order to gain the right mvs price
						market: fiat_market,
						language: fiat_lang,
						modelId: param.modelId,
						modelDesc: param.modelDesc,
						versionId: param.versionId,
						versionDesc: param.versionDesc,
						//carCode: '',
						carCode: allFuels[i][j].id,//write carCode to tempParam, in order to call standard optionals
						colorExt: '',
						colorInt: '',
						price:'',
						pricePromo:'',
						selectedOpt: '|'
					};
					
					//$.log('carcode '+newParam.carCode);
					//newParam.carCode = allFuels[i][j].id;//write carCode to tempParam, in order to call standard optionals
					
					/* var heroColors = ['',''];//obsolete
					if ( $('input.hero_trim').filter('[rel="'+allFuels[i][j].id+'"]').length > 0 ) {//waiting for a real CMS call, this 'if' prevents errors for empty values (no input hidden for that particular mvs)
						heroColors = $('input.hero_trim').filter('[rel="'+allFuels[i][j].id+'"]').val().split('|');//temp, waiting for CMS call; with CMS call we'll implement a new callback function, in which we'll have to call getStandard
					}
					//var heroColors = $('#carcode_'+allFuels[i][j].id).val().split('|');//temp, waiting for CMS call; with CMS call we'll implement a new callback function, in which we'll have to call getStandard
					newParam.colorExt = heroColors[0];
					newParam.colorInt = heroColors[1];
					newParam.selectedOpt = newParam.colorExt + '|' + newParam.colorInt;
					//cc.getOptStandard(newParam, mvsSelection.printStandard); */
					var info = {
						feature: 'DT12|DT10|DT34|DT40'
					};
					cc.getTechSpec(newParam, info, mvsSelection.printTechSpec);//use newParam to call techData for each engine, in order to populate engine specs tooltip
					
				}
			}
			engines +=	'</div>';
			//$.log('version: '+param.versionId);
			$('div.mvs_selection div.model > ul > li[rel="'+param.modelId+'"] div.trim > ul > li[rel='+param.versionId+']').find('div.engine div.accordion').html(engines);
		}
		//$.log(mvsSelection.engineCount+' su '+mvsSelection.otherTrim.length);
		if ( mvsSelection.engineCount == mvsSelection.otherTrim.length ) {
			$('div.mvs_selection div.model > ul > li[rel='+param.modelId+']').find('div.accordion').accordion('destroy');
			$('div.mvs_selection div.model > ul > li[rel='+param.modelId+']').find('div.accordion').accordion({
				autoHeight: false,
				create: function(){/*$.log('creo accordion');*/}
			});
			$('div.engine_type.on').parent('div.content').prev().trigger('click');
			//cms.getTrim(mvsSelection.printCmsTrim, '');//the second param is empty cause we aren't filtering
			cms.getTrim(mvsSelection.printCmsTrim,'&Expression=VehicleModel,'+param.modelId, param);
			$('div.mvs_selection').find('a.change_trim').hide();//prevent clicking until input hidden are printed
		}
		mvsSelection.btnChange = mvsSelection.container.find("a.change_trim");//reassigned due to updated DOM
	},
	printCmsTrim: function(response){
		mvsSelection.changeMvs();
		//$.log('dentro print');
		$(response).find("folder").each(function(){
			var modelId = $('VehicleModelId',this).text();
			var versionId = $('VehicleVersionId',this).text();
			var trimId = $('VehicleTrimId',this).text();
			var EngineClassification = $('EngineClassification',this).text();
			var HeroExternalColorId = $('HeroExternalColorId',this).text();
			var HeroInternalColorId = $('HeroInternalColorId',this).text();
			//$.log('model '+modelId+' version '+versionId+' carcode ' + trimId);
			//$.log('tipo di motore ' + EngineClassification);
			//$.log('esterni '+HeroExternalColorId+' interni ' + HeroInternalColorId);
			/*var image = $('Image',this).text();
			var ROPanelTitle = $('ROPanelTitle',this).text();
			var ROPanelImage1 = $('ROPanelImage1',this).text();
			var ROPanelImage2 = $('ROPanelImage2',this).text();
			var ROPanelDescription = $('ROPanelDescription',this).text(); */
			var container = mvsSelection.modelPanel.find('ul > li[rel="'+modelId+'"]').find('div.trim > ul > li[rel="'+versionId+'"]').find('div.engine_type[rel="'+trimId+'"]');
			var engineClass = '';
			var engineClDesc = '';
			switch(EngineClassification) {
				case "Ecologico":
					engineClass = 'ecol';
					engineClDesc = printMsg('configurator', 'ecol');
				break;
				case "Economico":
					engineClass = 'econ';
					engineClDesc = printMsg('configurator', 'econ');
				break;
				case "Sportivo":
					engineClass = 'sport';
					engineClDesc = printMsg('configurator', 'sport');
				break;
				case "Tecnologico":
					engineClass = 'tech';
					engineClDesc = printMsg('configurator', 'tech');
				break;
				default:
			}
			//container.children('a.engine_class').addClass(engineClass).find('span.tooltip > span').text(engineClDesc);//temp, fase 1bis
			var code = '<input type="hidden" class="hero_trim" value="'+HeroExternalColorId+'|'+HeroInternalColorId+'" />';//print herocolors
			container.append(code);
			$('div.mvs_selection').find('div.engine_type').not('.on').children('a.change_trim').show();//until this code is not appended, hide the change trim button, to prevent useless clicks by the user
		});
	},
	printTechSpec: function(param, response){
		//$.log('carcode dentro printTechSpec'+param.carCode);
		//$.log(response);
		var techWrap = mvsSelection.modelPanel.find('ul > li[rel="'+param.modelId+'"]').find('div.trim > ul > li[rel="'+param.versionId+'"]').find('div.engine_type[rel="'+param.carCode+'"]').find('p.gear span.tooltip');
		//techWrap.append('<span>de ma de</span>');
		var code = '';
		for (var i=0, len=response.Categories.length; i<len; i++){
			for (var j=0, l=response.Categories[i].Features.length; j<l; j++){
				code += '<span>'+response.Categories[i].Features[j].description+': '+response.Categories[i].Features[j].value+'</span>';
			}
		}
		techWrap.append(code);
		techWrap.parent(".info").hover(function(){
				if( $(this).offset().left > $(this).parents("div.wrapper").width() ){
					techWrap.addClass("right");
				}
			},
			function(){
		});
	},
	/* printStandard: function(param, response){//obsolete
		mvsSelection.engineTypes = $('div.mvs_selection div.model div.trim div.engine div.engine_type');//reassigned due to updated DOM
		for (var i=0, len=response.Categories.length; i<len; i++){
			for (var j=0, l=response.Categories[i].OptionalList.length; j<l; j++){
				param.selectedOpt += '|'+response.Categories[i].OptionalList[j].code;
			}
		}
		//$.log('selected dentro print standard '+param.selectedOpt);
		var info = {
			operation: 'ADD',//fake add
			optional: '',//no optional to add, just a check to update price when landing
			optionalsToAdd: ''
		};
		cc.checkConfigConsist(param, info, mvsSelection.printPrice);
	}, */
	/* printPrice: function(param, info, response){//obsolete
		var price = response.Price[0].value;
		var pricePromo = response.Price[2].value;
		var priceWrap = $('div.mvs_selection').find('div.engine_type[rel="'+param.carCode+'"]').children('p.price').children('span');
		if ( parseFloat( pricePromo.replace(",",".") ) > 0) {//convert comma to dot on the fly (to keep original value)
			priceWrap.eq(0).text(pricePromo).prepend( printMsg("currency", param.market) );
			priceWrap.eq(1).text(price).prepend( printMsg("currency", param.market) );
		} else {//no promo
			//priceWrap.hide().eq(0).show().text(price).prepend( printMsg("currency", param.market) );
			$('div.mvs_selection').find('div.engine_type[rel="'+param.carCode+'"]').children('p.price').children('span').hide().eq(0).show().text(price).prepend( printMsg("currency", param.market) );
		}//need to discriminate between regular price and promo price
	}, */
	changeMvs: function(){
		//mvsSelection.btnChange.live('click',function(e){
		//$.log( $("div.mvs_selection").find("a.change_trim").length );
		//$('div.mvs_selection h2').live('click',function(){
		$("div.mvs_selection").find("a.change_trim").click(function(e){
		//$("a.change_trim").live('click',function(e){
			//$('div.layers').append('<div class="loading"><img src="'+fiat_respath+'img/ajax.gif" /></div>');
			$('div.layers').hide();
			var _mvs = $(this).parent('div.engine_type');
			//$.log( 'click carcode '+_mvs.attr('rel') );
			
			//var clicked = mvsSelection.engineTypes.index( _mvs );
			//alert('cliccato il '+clicked);
			//mvsSelection.engineTypes.removeClass('on').eq(clicked).addClass('on');//useless
			var mvsDescs = [];
			
			//var onModel = $('div.mvs_selection div.model > ul > li.on');
			//var onVersion = onModel.find('div.trim > ul > li.on');
			
			var onVersion = _mvs.closest('div.engine').parent('li');
			var onModel = onVersion.closest('div.trim').parent('li');
			
			var onEngine = onVersion.find('div.engine_type.on');
			mvsDescs.push( onModel.children('h3').text() );
			mvsDescs.push( onVersion.children('a').text() );
			//$.log(mvsDescs);
			var mvsCodes = [];
			mvsCodes.push( onModel.attr('rel') );//modelId
			mvsCodes.push( onVersion.attr('rel') );//versionId
			//mvsCodes.push( onEngine.attr('rel') );//carCode
			mvsCodes.push( _mvs.attr('rel') );//carCode
			
			//var heroColors = $('input.hero_trim').filter('[rel="'+ onEngine.attr('rel') +'"]').val().split('|');//temp, waiting for CMS call
			var heroColors = _mvs.find('input.hero_trim').val().split('|');
			mvsCodes.push( heroColors[0] );//colorExt
			mvsCodes.push( heroColors[1] );//colorInt
			//$.log(mvsCodes);
			
			
			//modelPanel.colorWrapper = _mvs.children('input.colors').val();
			//alert('before clear yo');
			//alert(mvsDescs);
			//alert(mvsCodes);
			
			handleCurrentCar.clear('current');
			handleCurrentCar.init( mvsDescs, mvsCodes, '' );
			
			statusHandler.carViewExt = 2;//when changing mvs, restart from default views
			statusHandler.carViewInt = 1;
			changeViewExt.box.removeClass('on').eq(1).addClass('on');//default view is 2, so light up the right box when changing
			changeViewInt.box.removeClass('on').eq(0).addClass('on');//default view is 1, so light up the right box when changing
			
			myPanel.initDynamic();
			//handleCurrentCar.initRedraw();
			if ( statusHandler.current!=1 ) {//we are in the finito page or in the inside
				statusHandler.toolbarEl.eq(0).find('a').trigger('click');//force the external view 2
				$('#item_pack').remove();//force removing to prevent bug (perhaps due to cloning pack flag from inside to outside)
			}
			
			//fiatCom.filledMyPanel = false;
			/* switch (statusHandler.current) {//do not uncomment this piece of code: read below
				case 1:
				case 2:
					fiatCom.filledExt = false;//these istructions are already invoked via initRedraw: that's what breaks the right flux
					handleOpt.initExt();
				//break;
					fiatCom.filledInt = false;
					handleOpt.initInt();
				break;
				default://status 3, finito page: do nothing
			} */
			
			updateDataTracking( mvsDescs[0], mvsDescs[1], true);
			/* $('#above div.model_outside').append(fiatCom.loading);
			configurator.outLayers.fadeOut('slow',function(){
				var layersCode =	'<img class="layer_0" src="'+fiat_respath+'img/configurator/cars/bravo/myLife/ext/base/bravo_myLife_base_e01.png" alt="" />'+
													'<img class="layer_1" src="'+fiat_respath+'img/configurator/cars/bravo/myLife/ext/rims/bravo_myLife_r00_e01.png" alt="" />'+
													'<img class="layer_2" src="'+fiat_respath+'img/configurator/cars/bravo/myLife/ext/body/bravo_myLife_b01_e01.png" alt="" />';
				
				configurator.outLayers.html(layersCode)//change images
			}).fadeIn('slow',function(){
				fiatCom.loading.remove();
			}); */
			
			
			$("div.mvs_selection a.close").trigger('click');//do not move: breaks ie8, needs to be last
			//e.preventDefault();//not enough, it breaks FF (landing at outside, it shows model and config flags instead of just config ones)
			return false;
		});
	}
};

var finitoPage = {
	container: null,
	triggerViews: null,
	finitoTabs: null,
	remove: null,
	init: function(){
		finitoPage.container = $("#above div.finito");
		finitoPage.remove = finitoPage.container.find("a.remove");
		finitoPage.triggerViews = $("div.review").find("a.view");
		
		finitoPage.toggleView();
		finitoTabs = new Tabs( finitoPage.container.find('div.tab_wrap'), false, /* false, */ false );
		finitoTabs.init();
		//finitoPage.removeItem();//to be removed and integrated in carconfigurator.js
		finitoPage.eBrochureTracking();
	},
	toggleView: function(){
		var thisParent;
		preloadImages('div.review_img');
		finitoPage.triggerViews.click(function(e){
			thisParent = $(this).parent("div.review_img");
			thisParent.fadeOut(function(){
				thisParent.siblings("div.review_img").fadeIn();
			});
			e.preventDefault();
		});
	},
	/* removeItem: function(){
		finitoPage.remove.click(function(e){
			var $this = $(this),
				li = $this.closest("li");
		
			//removing the whole LI if the X is under div.version or removing the whole LI if only one items remained or removing only the span	and showing the default item
			if($this.parents("div.version").hasClass("version")){
				li.remove();
			}else if (li.children("span").length == 1 && !li.hasClass('colors') && !li.hasClass('wheels')){
				$this.parent(".price").closest("li").remove();
			}else{
				$this.parent(".price").parent("span").remove();
				if(li.children("span.price").length == 0 && li.hasClass('colors') || li.hasClass('wheels')){
					li.find(".default").css('display', 'block');
				}
			}
			e.preventDefault();
		});
	}, */
	printTechSpec: function(param, response){
		//$.log(response);
		var code = '';
		for (var i=0, len=response.Categories.length; i<len; i++){
			code += '<strong>'+response.Categories[i].description+'</strong>'+
								'<ul>';
			for (var j=0, l=response.Categories[i].Features.length; j<l; j++){
				code +=		'<li><em>'+response.Categories[i].Features[j].description+'</em>: '+response.Categories[i].Features[j].value+'</li>';
			}
			code +=		'</ul>';
		}
		finitoTabs.tabContent.eq(1).html(code);
	},
	eBrochureTracking: function(){
		$('div.finito a.brochure').click(function(){
			var data = $(this).attr("data-tracking");
			s3_log(data);//sending data to sophus
			$.log(data);
		})
	}
};

var handleZoom = {
	dragWrap: null,//zoomed image(s) holder
	init: function(){
		//statusHandler.viewsExt.clone().appendTo( layerZoom.loaderWrapper );//copy more views button to zoom overlay IN RELEASE 2
		handleZoom.dragging();
		handleZoom.close();
		
		cms.type = 2;//zoom
		handleCurrentCar.initRedraw();
	},
	insertCode: function(){
		var code = '';
		code += '<div class="dragging">';
		//code += 	'<img src="'+fiat_respath+'img/placeholder/configurator/zoom/1040x648.jpg" width="1040" height="648" alt="" />';
		/* code += 	'<img src="'+fiat_respath+'img/placeholder/configurator/zoom/giulietta/ext/carrozzeria_nera.png" width="1120" height="532" alt="" />';//multilayer
		code += 	'<img src="'+fiat_respath+'img/placeholder/configurator/zoom/giulietta/ext/ruote.png" width="1120" height="532" alt="" />'; */
		code += '</div>';
		code += '<div class="back"><a href="#">'+printMsg('zoom', 'back')+'</a></div>';
		return code;
	},
	dragging: function(){
		handleZoom.dragWrap = layerZoom.loaderWrapper.find('div.dragging');
		handleZoom.dragWrap.css({top: 0, left: 0});//always starts at zero position for below calcs to work
		var maskWidth  = layerZoom.loaderWrapper.width();//mask
		var maskHeight = layerZoom.loaderWrapper.height();
		var imgPos     = handleZoom.dragWrap.offset();
		var imgWidth   = handleZoom.dragWrap.width();
		var imgHeight  = handleZoom.dragWrap.height();
		//$.log('altezza maschera:'+ maskHeight);
		//$.log('altezza immagine:'+ imgHeight);
		var x1 = (imgPos.left + maskWidth) - imgWidth;
		var y1 = (imgPos.top + maskHeight) - imgHeight;
		var x2 = imgPos.left;
		var y2 = imgPos.top;
		var centerX = (imgWidth-maskWidth)/2;
		var centerY = (imgHeight-maskHeight)/2;
		handleZoom.dragWrap.draggable({
			scroll: false,
			containment: [x1,y1,x2,y2]//constrain image within the clipping mask
		});
		handleZoom.dragWrap.css({ top:-centerY, left:-centerX });//now we can center zoomed image
	},
	close: function(){
		layerZoom.loaderWrapper.find("div.back > a").click(function(e){
			layerZoom.btnClose.trigger('click');
			//statusHandler.viewsExt.appendTo( $('#above .model_outside') );
			e.preventDefault();
		});
	}
};

function addDot(str){
	//12345,67 -> 12.345,67
	//if( str.indexOf("..") ){return;}
	//str = parseInt(str, 10);
	str = str.substring(0, str.length -6) + "." + str.substring(str.length -6, str.length);
	return str;
};

/* function filterGroup(obj, filteredGroup, filterParam) {//moved to utils.js
	var resultObj = $.extend({},obj);
	for (var i in obj) {
		if ( obj.hasOwnProperty(i) ) {
			//if ( obj[i].fuelId && obj[i].fuelId !== filteredGroup ) {
			if ( obj[i][filterParam] && obj[i][filterParam] !== filteredGroup ) {
				delete resultObj[i];
			}
		}
	}
	return resultObj;
}; */

var tableCompareEngines = {
	count: 0,
	trimToCall: 0,
	init: function(){
		var compareCar = {
			market: fiat_market,
			language: fiat_lang,
			superModelId: '',
			modelId: statusHandler.landingCodes[0],//il modello di riferimento e' quello definito nella model page
			//modelId: '150',//test modello con piu' di 5 versioni, x vedere attivo il carosello
			modelDesc: statusHandler.landingDescs[0],
			versionId: '',
			versionDesc: '',
			carCode: '',
			engineDesc: '',
			position: null
		};
		cc.getVersions(compareCar, tableCompareEngines.printVersion);
	},
	printVersion: function(compareCar, versionDesc, allVersions){//da virtual layer prendo le varie versioni di quel modello e le stampo
		var versions='';
		var num=0;
		//mvsSelection.otherTrim = [];//reset
		for(var i=0, len=allVersions.length; i<len; i++){
			//var versionCode = allVersions[i].code;
			num++;
			
			versions += '<li rel="'+allVersions[i].code+'" data-position="'+num+'">'+
							'<div>'+
								'<a href="#">'+
									//'<p><img src="'+fiat_respath+'img/ajax-mini.gif" alt="" /></p>'+
									'<span>'+allVersions[i].description+'</span>'+
								'</a>'+
								'<a href="#" class="btn">'+ printMsg('tableCompare', 'showInfo') +'</a>'+//msg.js
							'</div>'+
						'</li>';
		}
		
		$('div.compare_selector div.wrapper div.carousel > ul').html(versions);
		
		if($('div.compare_selector div.wrapper div.carousel > ul li').length>5){//attiva carosello se ci sono piu' di 5 elementi
			$("div.compare_selector a.btn_prev").addClass("disabled");//da rivedere: come per il carosello di campaigns sarebbe bene nascondere da css le frecce e mostrarle solo se viene attivato il carosello
			$('div.compare_selector div.wrapper div.carousel').jCarouselLite({
				btnNext: 'a.btn_next',
				btnPrev: 'a.btn_prev',
				visible: 5,
				circular: false,
				speed: 800
			});
		}else{
			$('#below .compare_selector .nav a').hide();
		}
		
		cms.getVersion(compareCar.modelId,tableCompareEngines.printVersionsImages);
		
		tableCompareEngines.getTrim(compareCar);
		
		//cc.getTrim();//when landing, populate starting from first mvs
	},
	printVersionsImages: function(modelId,versionId,image,ROPanelTitle,ROPanelImage1,ROPanelImage2,ROPanelDescription){//da cms prendo le img delle versioni e le stampo
		//var container = mvsSelection.modelPanel.find('ul > li[rel="'+modelId+'"]').find('div.trim > ul > li[rel="'+versionId+'"]');
		var container = $('div.compare_selector div.carousel').find('li[rel="'+versionId+'"]');
		//container.children('div').find('p').children('img').attr({'src': image});
		//$.log(container.html());
	},
	getTrim: function(compareCar){// sul click chiamo la get trim per recuperare tutti i trim di quella versione
		$('div.compare_selector div.carousel a').click(function(){
			//reset:
			tableCompareEngines.count = 0;
			$('table.compare_table').hide();
			$('div.engine_table').prepend('<div class="loading"><img src="'+fiat_respath+'img/ajax.gif" /></div>');
			
			var _this = $(this);
			compareCar.versionId = _this.closest('li').attr('rel');
			compareCar.position = _this.closest('li').attr('data-position');
			
			cc.getTrim(compareCar,tableCompareEngines.getTechSpec);
			return false;
		})
	},
	getTechSpec: function(param, engineId, engineDesc, gearId, gearDesc, fuelId, fuelDesc, driveId, driveDesc, price, priceNoVat, pricePromo, allFuels, allTrims){//ciclo su tutti i trim per recuperare le techspec di ciascuno
		tableCompareEngines.trimToCall = allTrims.length;
		var i = 0;
		
		$('.compare_table').html('');
		
		var info = {
			feature: ''
		};
		
/* 		for (i=0; i<allTrims.length; i++) {
			var statment = 'tableCompareEngines.drawTrim("' + allTrims[i].id +'","' + allTrims[i].description + '");';
			setTimeout('' + statment,i*5000);
		} */
		
		for (i=0; i<allTrims.length; i++) {
			tableCompareEngines.drawTrim(allTrims[i].id , allTrims[i].description);
		}
	},
	drawTrim: function(trim, description){//stampa tabella
		var data = 'market='+fiat_market+'&language='+fiat_lang+'&carCode='+trim;
		var table = false;

		$.ajax({
			type: 'GET',
			//url: 'http://vl.fiat.com/service/virtuallayerservice.svc/vehicles/technicalData/jsonp',//VL produzione Fiat
			url: fiat_vlurl+'/vehicles/technicalData/jsonp',
			contentType: 'application/json; charset=utf-8',
			dataType: 'jsonp',//The type of data that you're expecting back from the server
			data: data,
			cache: true,
			success: function(msg){
				tableCompareEngines.count++;
				
				var response = msg;
				var i = 0;
				var j = 0;
				
				if ( response.Error == null ){
					if ($('.compare_table').html().length==0) {
						table = true;
					}

					if (table) {
						//$('.compare_table').append('<tr id="row_0"><td></td><td rel="'+trim+'">' + description + ' ['+trim+']</td></tr>');
						$('.compare_table').append('<tr id="row_0"><td></td><td rel="'+trim+'">' + description + '</td></tr>');
					} else {
						//$('#row_0').append('<td rel="'+trim+'">' + description + ' ['+trim+']</td>');
						$('#row_0').append('<td rel="'+trim+'">' + description + '</td>');
					}
					//$('#version_sel').unbind('change');
					//alert(response.Categories.length)
					for (i=0; i<response.Categories.length; i++) {
						if(response.Categories[i].code != '0'){//la categoria 0 (Altro) non va stampata
							var data ='<table>';//stampa delle features (tabella dentro cella)
							for (j=0; j<response.Categories[i].Features.length ; j++) {
								//data = data + '<tr><td>['+ response.Categories[i].Features[j].code + '] ' + response.Categories[i].Features[j].description +':' + response.Categories[i].Features[j].value + '</td></tr>';
								//data = data + '<tr><td rel="'+trim+'">' + response.Categories[i].Features[j].description +':' + response.Categories[i].Features[j].value + ' ['+trim+']</td></tr>';
								data = data + '<tr><td rel="'+trim+'"><span class="feature">' + response.Categories[i].Features[j].description +':</span> <span class="value">' + response.Categories[i].Features[j].value + '</span></td></tr>';
							}
							data = data + '</table>';

							if (table) { //stampa delle categorie
								//$('.compare_table').append('<tr id="row' + response.Categories[i].code + '"><td>[' + response.Categories[i].code + '] ' + response.Categories[i].description + '</td><td>' + data + '</td></tr>');
								//$('.compare_table').append('<tr id="row' + response.Categories[i].code + '"><td rel="'+trim+'">' + response.Categories[i].description + '</td><td>' + data + ' ['+trim+']</td></tr>');
								$('.compare_table').append('<tr id="row' + response.Categories[i].code + '"><td rel="'+trim+'">' + response.Categories[i].description + '</td><td>' + data + '</td></tr>');
							} else {
								$('#row' + response.Categories[i].code).append('<td rel="' + response.Categories[i].code + '">' + data + '</td>');
							}
						}
					}
					
					//$.log('tableCompareEngines.count: '+tableCompareEngines.count+' | tableCompareEngines.trimToCall: '+tableCompareEngines.trimToCall)
					if(tableCompareEngines.count == tableCompareEngines.trimToCall){
						$('div.engine_table div.loading').remove();
						$('table.compare_table').show();
					}
				}
			},
			error: function(XMLHttpRequest, textStatus, errorThrown) {
				var sStatus = XMLHttpRequest.status;
				var sResponse = XMLHttpRequest.responseText;
				var sXml = XMLHttpRequest.responseXml;
				alert('http status: '+sStatus+', text response entity body: '+sResponse+', document response entity body: '+sXml+', type of error: '+textStatus);
			}
		});
	}
};
