﻿/*
 * Auslesen und Setzen des KategorienCookies zur Anzeige eines Empfehlungsteasers
 * 
 * Vorbedingung: Die Variable "kuenstlerid" muss von ausserhalb gesetzt sein
 * 
 *@see http://www.elated.com/articles/javascript-and-cookies/
 *@date 26.02.2009 
 */

var CATEGORY_COOKIE_NAME = 'behaviourCategories';
var BAND_COOKIE_NAME = 'behaviourBands';
var MAX_KEY_VALUES_COUNT = 20;
var EXPIRES = new Date ('2999', '1', '1');
var REMOVE_EXPIRES_DATE = new Date ('1970', '1', '1');
var DOMAIN = 'getgo.de';

/**
 * 
 * @param {String} name Name des Cookies
 * @param {String} domain Domain fuer die das Cookie gueltig ist
 * @param {Date} date Ablaufdatum des Cookies
 * @param {String} value Wert des Cookies
 */

function setCookie ( name, value, domain )
{  
	writeCookie(name, domain, EXPIRES, value); 
} 
 
function writeCookie(name, domain, date, value)
{
	var cookieString = name + "=" + escape(value);
		cookieString += "; expires=" + date.toGMTString();
	
	if (domain)
	{
		cookieString += "; domain=" + escape(domain);
	}
	cookieString += "; path=/";	
	document.cookie = cookieString;
	//alert(cookieString);
}

/**
 * Setzt das Cookie
 * @param {String} name Name des Cookies
 * @param {String} value Wert des Cookies
 * @param {String} domain Domain fuer die das Cookie gueltig ist
 */


/**
 * Setzt das Cookie
 * @param {String} name Name des Cookies
 * @param {String} value Wert des Cookies
 * @param {String} domain Domain fuer die das Cookie gueltig ist
 */
function removeCookie ( name, domain )
{
	writeCookie(name, domain, REMOVE_EXPIRES_DATE);
}

/**
 * Liest das aktuelle Cookie aus
 * @param {String} cookieName Name des Cookies
 */
function getCookie ( cookieName )
{
  var results = document.cookie.match ( '(^|;) ?' + cookieName + '=([^;]*)(;|$)' );

  if (results)
  {
  	return (unescape(results[2]));
  }
  else
  {
  	return null;
  }	
}



/**
 * Stellt sicher, das nur eine bestimmte Anzahl ( MAX_KEY_VALUES_COUNT ) 
 * an Kategorien in dem Cookie gespeichert werden
 * Speichert das Cookie mit der neuen Kategorie an vordester Stelle
 * Tritt ein Fehler auf wird das Cookie geloescht. Fehler werden gecatched
 * 
 * @param cookie_name Name des Cookies
 * @param currentKeyValue Externer Schluessel (momentan mit kuenstlerId auf getgo eingebunden)
 */
function handleCookie(cookie_name, currentKeyValue)
{ 
	 try { 

		var cookieValuesString = getCookie(cookie_name);


		if (!(cookieValuesString == null || cookieValuesString == ""))
		{
			
				
			var values = cookieValuesString.split(',');
			
			if (currentKeyValue != null && currentKeyValue != "")
			{
				
				values.unshift(currentKeyValue); 
			}
			
			if (values.length > MAX_KEY_VALUES_COUNT)
			{
					
					values.pop();
			}
			
			if (values != null && values != "")
			{
				
					values = values.join();
			}	
		}
		else {  
		
			var values = currentKeyValue;
			
		}
		if (values != null && values != "")	{ 	
		
			//alert(cookie_name + values + DOMAIN);
			setCookie(cookie_name, values, DOMAIN);
	
		}
	
	}
	 catch (e)
	{ 
		try
		{
			 removeCookie(cookie_name, DOMAIN); 
		}
		catch (e)
		{
			//do nothing	
		}	
	}		
}

//window.onload = handleCookie(CATEGORY_COOKIE_NAME);
document.onload = handleCookie(BAND_COOKIE_NAME, kuenstlerid);


