// ===========================
// basic cookie functions
// ===========================

function setCookie(cookieName, cookieValue, cookieExpiry, cookiePath, cookieDomain, cookieSecure)
{
	if ( (cookieName != null) && (cookieValue != null) &&
	     (cookieName.length > 0) )		 
	{
		cookieSecure = ( (cookieSecure != null) && (('' + cookieSecure) == 'true') );
		
		var cookieString = '';
		
		cookieString += cookieName + '=' + escape( encodeURI( cookieValue ) );
		cookieString += ((cookieExpiry != null) ? ('; expires=' + cookieExpiry.toGMTString()) : '');
		cookieString += ((cookiePath != null) ? ('; path=' + cookiePath) : '');
		cookieString += ((cookieDomain != null) ? ('; domain=' + cookieDomain) : '');
		cookieString += ((cookieSecure) ? '; secure' : '');
				
		document.cookie = cookieString;
	}
}

function getCookie(cookieName)
{
	var returnValue  = null;
	
	if ( (cookieName != null) && (cookieName.length > 0) )
	{
		var cookieString = document.cookie;
		
		if ( cookieString != null )
		{
			cookieName = cookieName + '=';
		
			var startIndex = cookieString.indexOf( cookieName );
			
			if ( startIndex > -1 ) 
			{		
				cookieString = cookieString.substring( startIndex + cookieName.length );
			
				var endIndex = cookieString.indexOf( ';' );
			
				if ( endIndex > -1 )
				{
					cookieString = cookieString.substring( 0, endIndex );		
				}
				
				returnValue = decodeURI( unescape( cookieString ) );
			}
		}
	}	
	
	return ( returnValue );
}

function deleteCookie(cookieName)
{
	if ( (cookieName != null) && (cookieName.length > 0) )
	{
		var cookieValue = encodeURI( ' ' );
		
		var expiryDate = new Date();
		expiryDate.setTime( expiryDate.getTime() + 1000*60 );
		
		setCookie( cookieName, cookieValue, expiryDate, '/' );
		
		expiryDate = new Date();
		expiryDate.setTime( expiryDate.getTime() - 1000*60 );
		
		setCookie( cookieName, cookieValue, expiryDate, '/' );
	}
}

function setSubCookie(mainCookieName, subCookieName, subCookieValue, cookieExpiry, cookiePath, cookieDomain, cookieSecure)
{	
	if ( (mainCookieName != null) && (subCookieName != null) && (subCookieValue != null) &&
	     (mainCookieName.length > 0) && (subCookieName.length > 0) && (subCookieValue.length > 0) )
	{			
		var mainCookieString = getCookie( mainCookieName );
		
		if ( mainCookieString == null )
		{
			mainCookieString = '';
		}
		
		subCookieName = subCookieName + '=';
		
		var startIndex = mainCookieString.indexOf( subCookieName );
		
		if ( startIndex  > -1 )
		{
			// subcookie schon vorhanden -> den alten wert aus der liste rausschmeisen 
			
			var tempCookieString = null;
			
			tempCookieString = mainCookieString.substring( startIndex );
			mainCookieString = mainCookieString.substring( 0, startIndex );
			
			var endIndex  = tempCookieString.indexOf( ';' );
			
			if ( endIndex > -1 )
			{
				mainCookieString += tempCookieString.substring( endIndex + 1);
			}
		}
		
		mainCookieString += subCookieName + subCookieValue + ';';	
				
		setCookie(mainCookieName, mainCookieString, cookieExpiry, cookiePath, cookieDomain, cookieSecure);	
	}
}

function getSubCookie(mainCookieName, subCookieName)
{
	var returnValue = null;	
	
	if ( (mainCookieName != null) && (subCookieName != null) &&
	     (mainCookieName.length > 0) && (subCookieName.length > 0) )
	{			
		var mainCookieString = getCookie( mainCookieName );
		
		if ( mainCookieString != null )
		{	
			subCookieName = subCookieName + '=';
		
			var startIndex = mainCookieString.indexOf( subCookieName );
			
			if ( startIndex  > -1 )
			{
				var subCookieString = null;
				
				subCookieString = mainCookieString.substring( startIndex + subCookieName.length);
				
				var endIndex  = subCookieString.indexOf( ';' );
				
				if ( endIndex > -1 )
				{
					subCookieString = subCookieString.substring( 0, endIndex );
				}
				
				returnValue = subCookieString;
			}
		}
	}
	
	return ( returnValue );
}

function deleteSubCookie(mainCookieName, subCookieName)
{
	if ( (mainCookieName != null) && (subCookieName != null) && 
	     (mainCookieName.length > 0) && (subCookieName.length > 0) )
	{			
		var mainCookieString = getCookie( mainCookieName );
		
		if ( mainCookieString != null )
		{		
			var startIndex = mainCookieString.indexOf( subCookieName );
			
			if ( startIndex  > -1 )
			{
				// subcookie vorhanden -> den wert aus der liste rausschmeisen 
				
				var tempCookieString = null;
				
				tempCookieString = mainCookieString.substring( startIndex );
				mainCookieString = mainCookieString.substring( 0, startIndex );
				
				var endIndex  = tempCookieString.indexOf( ';' );
				
				if ( endIndex > -1 )
				{
					mainCookieString += tempCookieString.substring( endIndex + 1 );
				}
			}
			
			if ( mainCookieString.length > 0 )
			{
				// das hier ist ein bisschen unschoen, denn wenn ein expiry und
				// path gesetzt war, dann geht der hier leider verloren ...
				// das ist dann noch zu verbesseren, falls das ueberhaupt geht
							
				setCookie(mainCookieName, mainCookieString );
			}
			else
			{
				deleteCookie( mainCookieName );
			}
		}
	}
}

// ===========================
// knowhow cookie functions
// ===========================

var cookieBaseName = 'KH_';

function getExpiryDate(days) 
{
	if ( days == null )
	{
		days = 365;
	}
	
	var expires = new Date();
	
	expires.setTime(expires.getTime() + days*24*60*60*1000);
	
	return ( expires );
}

function setKnowHowCookie(cookieName, cookieValue, persistentCookie)
{
	if ( ('' + persistentCookie) == 'true' )
	{
		setCookie( cookieBaseName + cookieName, cookieValue, getExpiryDate(365), '/' );
	}
	else
	{
		setCookie( cookieBaseName + cookieName, cookieValue, null, '/' );
	}
}

function getKnowHowCookie(cookieName)
{
	return ( getCookie(cookieBaseName + cookieName) );
}

function deleteKnowHowCookie(cookieName)
{
	deleteCookie( cookieBaseName + cookieName );
}

function setKnowHowSubCookie(mainCookieName, subCookieName, cookieValue, persistentCookie)
{
	if ( ('' + persistentCookie) == 'true' )
	{
		setSubCookie( cookieBaseName + mainCookieName, subCookieName, cookieValue, getExpiryDate(365), '/' );
	}
	else
	{
		setSubCookie( cookieBaseName + mainCookieName, subCookieName, cookieValue, null, '/' );
	}
}

function getKnowHowSubCookie(mainCookieName, subCookieName)
{	
	return ( getSubCookie(cookieBaseName + mainCookieName, subCookieName) );
}

function deleteKnowHowSubCookie(mainCookieName, subCookieName)
{
	deleteSubCookie( cookieBaseName + mainCookieName, subCookieName );
}
