function createCemAnalyticsObject(_cem_analytics, response) {
	
	if(_cem_analytics.hasError()) {
		return _cem_analytics;
	}
	
	try {
		var preferences = response.preferences;
		//get preferences
		if(preferences != null && ("products" in preferences) && ("attributes" in preferences.products)) {
			var attributes = preferences.products.attributes;
			for(attribute in attributes) {
				for(value in attributes[attribute]) {
					_cem_analytics.setProfileAttributeValueWeight(attribute, value, attributes[attribute][value]);
				}
			}
		}
		
		response = response.response;
		if(typeof(response.searches.main) == "undefined") {
			return _cem_analytics;
		}
		var search = response.searches.main.search;
		var tagsLabels = response.searches.main.results.keywords;
		var attributeLabels = response.searches.main.results.attributes;
		var tagsLabels = response.searches.main.results.keywords;
		
		_cem_analytics.setTagsLabels(tagsLabels);
		
		_cem_analytics.setIsRelax(response.model.relax && response.model.relax.length > 1);
		
		//get query
		for(var i=0; i<search.scorers.length;i++) {
			if(search.scorers[i].chunks) {
				_cem_analytics.setQuery(search.scorers[i].text);
				break;
			}
		}
		
		//get attributes and tags
		if(!_cem_analytics.getIsRelax() ) {
			for(var i=0; i<search.filters.length;i++) {
				if(search.filters[i].type == "attribute") {
					//_cem_analytics.addAttributeValues(attributeLabels[search.filters[i].attribute].label, attributeLabels[search.filters[i].attribute].values[search.filters[i].values].label);
					_cem_analytics.addAttributeValues(search.filters[i].attribute, search.filters[i].values);
				}
				if(search.filters[i].type == "keyword") {
					for(var k=0; k<search.filters[i].keywords.length; k++) {
						var keyword_id = search.filters[i].keywords[k];
						_cem_analytics.addTag(tagsLabels[keyword_id].label);
					}
				}
			}
		}
		
		//get miss chunks
		for(var i=0; i<search.filters.length;i++) {
			if(search.filters[i].chunks) {
				_cem_analytics.setMissChunksFromTermFilters(search.filters[i].text);
				break;
			}
		}
		
		//relaxation
		if(_cem_analytics.getIsRelax()) {
			var relax = response.model.relax;
			_cem_analytics.setRelaxNbChoices(relax.length);
			for(var i=0; i<relax.length;i++) {
				for(var k=0; k<relax[i].filters.length; k++) {
					var criteria = relax[i].filters[k];
					
					if(criteria.type == "attribute") {
						_cem_analytics.addRelaxAttributeValues(criteria.attribute, criteria.values);
					}
					if(criteria.type == "keyword") {
						for(var k=0; k<criteria.keywords.length; k++) {
							var keyword_id = criteria.keywords[k];
							_cem_analytics.addRelaxTag(tagsLabels[keyword_id].label);
						}
					}
				}
			}
		}
		
	} catch(e) {
		_cem_analytics.setError("corbeil_analytics.js-1", e);
	}
	
	return _cem_analytics;
}

function addActionToCemAnalytics(_cem_analytics, q_param, s_param, a_param, v_param, k_param, cem_param, suggestion_param, rec_type, op_param, product_param, quantity_param, zip_param) {
	
	if(_cem_analytics.hasError()) {
		return _cem_analytics;
	}
	
	try {

		if(location.pathname.indexOf("/products/") === 0) {
			var tmpname = location.pathname.substring(10);
			productEngagementTimeout(60, tmpname.substring(0,tmpname.length-1));
			productEngagementTimeout(120, tmpname.substring(0,tmpname.length-1));
			productEngagementTimeout(180, tmpname.substring(0,tmpname.length-1));
		}
		
		var tagsLabels = _cem_analytics.getTagsLabels();
	
		if(zip_param != "") {
			var tmpname2 = location.pathname.substring(10);
			_cem_analytics.setProductEngagementAction("verify zip", tmpname2.substring(0,tmpname2.length-1), "1");
		} else if(q_param != "") {
			_cem_analytics.setSearchAction(cem_param == "");
			
		} else {
			
			if(s_param != "") {
				_cem_analytics.setSortAction();
			} else if (a_param != "") {
				if(a_param.charAt(0) == '+') {
					_cem_analytics.setFilterAttributeAddAction(a_param.substring(1), v_param);
				}
				else if(a_param.charAt(0) == '-') {
					_cem_analytics.setFilterAttributeRemoveAction(a_param.substring(1), v_param);
				} else {
					_cem_analytics.setFilterGuidanceAddAction(a_param, v_param, cem_param == "");
				}
			} else if (k_param != "") {
				var label = k_param.substring(1);
				if(label in tagsLabels) {
					label = tagsLabels[label].label;
				}
				if(k_param.charAt(0) == '+') {
					_cem_analytics.setFilterTagAddAction(label, cem_param == "");
				}
				else if(k_param.charAt(0) == '-') {
					_cem_analytics.setFilterTagRemoveAction(label);
				}
				else {
					//alert(k_param);
				}
			} else if (suggestion_param != "") {
				_cem_analytics.setFilterRelaxationSolvedAction(suggestion_param);
			} else if (rec_type != "") {
				var prodId = null;
				try {
					var s = location.pathname;
					var re = new RegExp("/products/([^/]*)/?$");
					var m = s.match(re);
					prodId = m[1];
				}catch(e) {
				}
				_cem_analytics.setProductRecommendationClickAction(rec_type, prodId);
			} else if (op_param == "add" && quantity_param != "" && quantity_param > 0 && product_param != "") {
				if(location.pathname == "/shop/wishlist/") {
					_cem_analytics.setProductEngagementAction("add to wishlist", product_param, quantity_param);
				} else {
					_cem_analytics.setProductEngagementAction("add to cart", product_param, quantity_param);
				}
			} else if (location.pathname == "/shop/checkout/") {
				_cem_analytics.setStartCheckoutAction();
			}
		}
	} catch(e) {
		_cem_analytics.setError("corbeil_analytics.js-2", e);
	}
	return _cem_analytics;
}
