/* ------------------------------------------------------------------------------------- */
/* Namespace Declarations.                                                               */
/* ------------------------------------------------------------------------------------- */

var YStore = window.YStore || {};

/* ------------------------------------------------------------------------------------- */
/* Cross Sell Beacon Common Code                                                         */
/* ------------------------------------------------------------------------------------- */
/* This object contains functions and variables common to all Cross Sell Beacon stuff    */
/* ------------------------------------------------------------------------------------- */

YStore.CrossSellBeacon = function() {
	return {
                lastViewBeaconUrl: '',

		validateKeys: function(obj, keyList) {
			for(var i = 0, len = keyList.length; i < len; i++) {
				var k = keyList[i];
				if (obj[k] === null || obj[k] === undefined) {
					return false;
				}
			}
			return true;
		},

		addRecData: function(urlId, url, itemId, modelName, seqIndex, vibesData) {

			if (urlId === undefined || urlId === null ||
			    url === undefined || url === null ||
			    itemId === undefined || itemId === null) {
				// LOG THIS
				return;
			}
			csell_page_rec_data[urlId] = {};
			csell_page_rec_data[urlId]['ui'] = urlId; // optional - only used for click beacon
			csell_page_rec_data[urlId]['u'] = url; // optional - only used for click beacon
			csell_page_rec_data[urlId]['ii'] = itemId;

			// add vibes data
			if (typeof vibesData === 'object') {
				for(var key in vibesData) {
					if (typeof vibesData[key] == 'string') {
						csell_page_rec_data[urlId][key] = vibesData[key];
					}
				}
			}
		},
		renderBeaconWithRecData: function(url) {

			if (url === null || url === undefined) {
				// LOG THIS
				return;
			}

			var vibesDataStr = '';
			if (typeof YStore.CrossSellBeacon.vibesData === 'object') {
				for(var key in YStore.CrossSellBeacon.vibesData) {
					if (typeof YStore.CrossSellBeacon.vibesData[key] == 'string') {
						vibesDataStr += '/'+key+'='+YStore.CrossSellBeacon.vibesData[key];
					}
				}
			}

			var dupeMap = {};

			var csell_page_rec_data_str = '';

			for(var key in csell_page_rec_data) {
				if (false === this.validateKeys(csell_page_rec_data[key], ['ii'])) {
					// LOG THIS
					continue;
				}

				if (typeof dupeMap[csell_page_rec_data[key]['ii']] === 'undefined') {
					// key indicates which reco this is for
					csell_page_rec_data_str += 'ii='+csell_page_rec_data[key]['ii'];

					for(var vkey in csell_page_rec_data[key]) {
						var vval = csell_page_rec_data[key][vkey];

						if (typeof vval === 'string') {
							if ('v_' === vkey.substr(0, 2)) {
								csell_page_rec_data_str += ','+vkey+'='+csell_page_rec_data[key][vkey];
							}
						}
					}

					csell_page_rec_data_str += ';';

					dupeMap[csell_page_rec_data[key]['ii']] = 1;
				}
			}
			var img = new Image();
			lastViewBeaconUrl = url+vibesDataStr+'/recs='+csell_page_rec_data_str;
			img.src = lastViewBeaconUrl;
		},
		// Should ONLY be called after anchor tag that urlId refers to has been rendered
		setClickTagUrl: function(urlId) {

			if (urlId === null || urlId === undefined) {
				// LOG THIS
				return;
			}

			var el = document.getElementById(urlId);
			if (el === undefined || el === null) {
				// LOG THIS
				return;
			}

			if (csell_page_rec_data[urlId] === undefined) {
				// LOG THIS
				return;
			}

			var recData = csell_page_rec_data[urlId];

			if (false === this.validateKeys(recData, ['u', 'ii'])) {
					// LOG THIS
					return;
			}

			if (false === this.validateKeys(csell_page_data, ['si', 'ii', 'bt', 's'])) {
					// LOG THIS
					return;
			}

			var url = recData['u'];

			// Possibly optimize so we do not need to copy as many fields- have this initialized on reco render
			// in addClickTagData func
			var data = {};
			data['si'] = csell_page_data['si'];
			data['srci'] = csell_page_data['ii'];
			data['bt'] = csell_page_data['bt']+'-click';
			data['dsti'] = recData['ii'];
			data[YAHOO.ULT.SRC_SPACEID_KEY] = csell_page_data['s'];
			data.inArray = '';

			// add vibes global data
			if (typeof YStore.CrossSellBeacon.vibesData === 'object') {
				for(var vkey in YStore.CrossSellBeacon.vibesData) {
					if (typeof YStore.CrossSellBeacon.vibesData[vkey] == 'string') {
						data[vkey] = YStore.CrossSellBeacon.vibesData[vkey];
					}
				}
			}

			// add vibes data for target item
			for(var vkey in recData) {
				var vval = recData[vkey];
				if (typeof vval === 'string') {
					if ('v_' === vkey.substr(0, 2)) {
						data[vkey] = recData[vkey];
					}
				}
			}
   
			var ult = YAHOO.ULT.track_click(url, data);
    
			var el = document.getElementById(urlId);
			el.href = ult;
		}
	};
}();
