// read product type counters from cookie:
com_hp_hope.hopeCookieHandler.prototype.getProdTypeCounter = function()
{
	var counters = {};
	var counterString = this.read('t');
	if (counterString != null && counterString != '')
	{
		var counterStrings = counterString.split(':');
		for (var i = 0; i<counterStrings.length; i=i+2)
		{
			var counteritems = {};
			var items = counterStrings[i+1].split(';');
			
			for (var j = 0; j<items.length; j++)
			{
				var tmp = items[j].split('|');
				var item = {};
				item.total = tmp[1];
				item.lastAccess = tmp[2];
				item.interval = tmp[3];
				counteritems[tmp[0]] = item;
			}
			counters[counterStrings[i]] = counteritems;
		}
	}
	return counters;
};

// write product type counters to cookie:
com_hp_hope.hopeCookieHandler.prototype.setProdTypeCounter = function(counters)
{
	if (counters != null)
	{
		var prodTypeCounterStrings = [];
		for (var oid in counters)
		{	
			var segmentCounters = counters[oid];
			
			var segmentCounterStrings = [];
			for (var seg in segmentCounters) 
			{
			    if(segmentCounters[seg] !== null){ //to check if the current segment counter was removed by setting it to null
    				segmentCounterStrings.push(seg + '|' + segmentCounters[seg].total + '|' + segmentCounters[seg].lastAccess + '|' + segmentCounters[seg].interval);
    			}
			}
			prodTypeCounterStrings.push(oid);
			prodTypeCounterStrings.push(segmentCounterStrings.join(';'));
		}
		this.update('t', prodTypeCounterStrings.join(':'));
	}
	else
	{
		this.remove('t');
	}
};

// read MKS counters from cookie:
com_hp_hope.hopeCookieHandler.prototype.getSegmentCounter = function()
{
	var counters = {};
	var counterString = this.read('m');
	if (counterString != null && counterString != '')
	{
		var counterStrings = counterString.split(';');
		for (var i = 0; i<counterStrings.length; i++)
		{
			var tmp = counterStrings[i].split('|');
			var counter = {};
			counter.total = tmp[1];
			counter.lastAccess = tmp[2];
			counter.interval = tmp[3];
			counters[tmp[0]] = counter;
		}
	}
	return counters;
};

// write MKS counters to cookie:
com_hp_hope.hopeCookieHandler.prototype.setSegmentCounter = function(counters)
{
	if (counters != null)
	{
		var counterStrings = [];
		for (var c in counters)
		{
			counterStrings.push(c + '|' + counters[c].total + '|' + counters[c].lastAccess + '|' + counters[c].interval);
		}
		this.update('m', counterStrings.join(';'));
	}
	else
	{
		this.remove('m');
	}
};

// write last visited product type to cookie:
com_hp_hope.hopeCookieHandler.prototype.setLastProdType = function(oid)
{
	if (oid != null)
	{
		this.update('l', oid);
	}
	else
	{
		this.remove('l');
	}
};


com_hp_hope.Counters = function()
{
	// identify product type category. First check 'page_generic_id', then 's_prop values':
	var typeOid = function ()
	{
		if (typeof (page_generic_id) != 'undefined')
		{
			if (page_generic_id != null && page_generic_id != '')
			{
				return page_generic_id.split('-')[0];
			}
		}
		
		if (typeof (s_prop2) != 'undefined')
		{
			if (s_prop2 == 'support')
			{
				return 'sup';
			}
		}
		
		if (typeof (s_prop13) != 'undefined')
		{
			if (s_prop13.indexOf('hphqwwsupport') != -1  || s_prop13.indexOf('hphqwwhubserv') != -1)
			{
				return 'sup';
			}
		}
		
		var AuTypeMap = {
			12454:['desktops'],//desktops and workstations/entry page
			321957:['notebooks'],//mobile products/notebooks/entry page
			215348:['handheld devices'],//'mobile products/handheld/entry page', 'pc/calculators/entry page', 'pc/calculators/scientific/35s/entry page', 'pc/calculators/scientific/10s/entry page'
			382087:['monitors'],//monitors/entry page
			15179:['scanners','scanners & projectors'],//printing & digital imaging/scanners/entry page					
			390843:['accessories'],
			12883:['networking'],
			15351:['serverstorage'],
			18972:['printing & multifunction','printers']//printing & digital imaging/all in one/entry page
			
		};
		if (typeof (s_prop5) != 'undefined')
		{
			if (s_prop5 != null && s_prop5 != '')
			{
				for (var oid in AuTypeMap)
				{			
					for (var i=0; i<AuTypeMap[oid].length; i++)
					{						
						if (s_prop5.indexOf(AuTypeMap[oid][i]) != -1 )
						{
							return oid;
						}
					}
				}
			}
		}
		//	Product Type IDs:
		//	321957	Laptop and Tablet PCs
		//	12454	Desktops & Workstations
		//	329290	Options and Accessories
		//	382087	Monitors
		//	15351	Servers
		//	382085	Digital Cameras and Photo Studios
		//	18972	Printers and Multifunction
		//	18964	Software
		//	12771	Ink/Toner/Paper/Printer Supplies
		//	12169	Storage
		//	3709945	BladeSystem
		//	22744	Services
		//	12883	Networking
		//	3447589	Rack and Power Infrastructure 
		//	15179	Scanners/Copiers/Faxes
		//	3338965	Projectors
		//	457757	Solutions
		//	215348	Handhelds and Calculators

		var typeMap = {
			321957:['mobile products/notebooks/entry page'],
			12454:['desktops and workstations/entry page', 'thin clients/entry page'],
			215348:['mobile products/handheld/entry page', 'pc/calculators/entry page', 'pc/calculators/scientific/35s/entry page', 'pc/calculators/scientific/10s/entry page'],
			12771:['supplies/entry page', 'supplies&accessories/entry page', 'supplies/toner seo/entry page'],
			382087:['monitors/entry page'],
			15179:['printing & digital imaging/scanners/entry page'],
			15351:['servers/entry page'],
			18964:['software/entry page'],
			390843:['accessories/entry page'],
			18972:['printing & digital imaging/all in one/entry page']
			//12883: contains '*networking*&*entry*page' 
			//18972: contains '*printing & multifunction*&*entry*&*page*'
		};
		
		if (typeof (s_prop3) != 'undefined')
		{
			if (s_prop3 != null && s_prop3 != '')
			{
				for (var oid in typeMap)
				{			
					for (var i=0; i<typeMap[oid].length; i++)
					{
						//if (s_prop3.indexOf(typeMap[oid][i]) != -1)
						if (s_prop3 == typeMap[oid][i])
						{
							return oid;
						}
					}
				}
			}
		}
		return null;	
	}();
	
	// identify segment by reading s_prop9:
	var seg = function ()
	{
		var segMap = {
			a:['any', 'any (default)', 'all', 'undef'],
			h:['hho', 'consumer'],		
			s:['smb', 'commercial'],
			g:['ga', 'graphic_arts'],
			e:['large', 'enterprise', 'ent', 'enter_segmet'],
			p:['public_sector', 'edu'],
			o:[]
		};
		
		if (typeof (s_prop9) != 'undefined')
		{
			if (s_prop9 != null && s_prop9 != '')
			{
				var segmet = s_prop9.toLowerCase().replace(/^cs:/, '').split('.')[0];
				for (var seg in segMap)
				{
					for (var i=0; i<segMap[seg].length; i++)
					{
						if (segmet == segMap[seg][i])
						{
							return seg;
						}
					}
				}
				return 'o';
			}
		}
		return null;
	}();

	// handle product type counters, set last visited product type:
	if (typeOid != null)
	{
		var s = (seg == null || seg == 'o' || seg == 'p') ? 'a' : seg;
		var counters = com_hp_hope.hopeCookie.getProdTypeCounter();
		if (counters[typeOid] == null)
		{
			counters[typeOid] = {};
		}
		counters[typeOid][s] = increment(counters[typeOid][s]);
		com_hp_hope.hopeCookie.setProdTypeCounter(counters);
		com_hp_hope.hopeCookie.setLastProdType(typeOid);
	}
	
	// handle market segment counters:
	if (seg != null)
	{
		var counters = com_hp_hope.hopeCookie.getSegmentCounter();		
		counters[seg] = increment(counters[seg]);
		com_hp_hope.hopeCookie.setSegmentCounter(counters);
	}
	
	// increment interval counter. If last access date is more than 7 days ago then add interval counter value to total counter, reset interval counter and set last access date. Return new counter if counter does not yet exist.
	function increment(c)
	{	
		var now = com_hp_hope.hopeCookie.dateStamp;
		if (c != null)
		{
			/*
			if ((now - c.lastAccess) > 7)
			{
				c.total += c.interval;
				c.interval = 1;
				c.lastAccess = now;
			}
			else
			{
				c.interval++;
			}
			*/
			// pilot version only increments the total counter:
			c.total++;
		}
		else
		{
			//c = { total:0, lastAccess:now, interval:1 };
			c = { total:1, lastAccess:0, interval:0 };
		}
		return c;
	};
}();
