//
// 2006 by bitart; Author: Alexander Graf
//
// Copyright by bitart - Furch & Graf GbR, Gartenstr. 5 56220 St. Sebastian,
// Germany. All rights reserved.
// Copyright in this software is owned by bitart, unless otherwise indicated.
//
// You are not allowed to distribute this software in any form or use it as
// part of another project without asking the owner for permission to use.
//

var coo_cookieTags = Array('config',                           'marks'         );
var coo_cookieDefs = Array(unescape('PopPos-scr%2fVersion-0'), unescape('ids-'));
var coo_cookieWarn = 'Hinweis:\nIhre Einstellungen konnten nicht gespeichert werden!\nSie haben möglicherweise "Cookies" dekativiert.';
var coo_cookieUID  = null; // Cookie User-ID for server-stored cookies
var coo_cookieDays = 365; // How many days the Cookie is valid
var coo_cookiePath = unescape('%2f'); // In which paths the Cookie is valid
var coo_cookieKchr = '-'; // Split character for Key/Value
var coo_cookieSchr = unescape('%2f'); // Split character for Options
var coo_cookieLchr = '.'; // Split character for Lists in Option

// Init cookieDefs
for (var cc=0, ce=coo_cookieDefs.length; cc<ce; cc++)
	coo_cookieDefs[cc] = unescape(coo_cookieDefs[cc]).split(coo_cookieSchr);

function coo_SetCookie(tag, key, val)
{
	var tagdef = coo_gettag(tag);
	if (!tagdef) return false;
	var cName = tagdef[0];
	var cDefs = tagdef[1];
	key=coo_cooesc(key);
	var newcookie = '';
	// extract current cookie data
	var pos = document.cookie.indexOf(cName);
	if (pos>=0){
		var end = document.cookie.indexOf(';', pos);
		if (end==-1) end = document.cookie.length;
		var pos = document.cookie.indexOf(coo_cookieSchr, pos+cName.length); // ignore timestamp
		if (pos>=0){
			var values = coo_unesc(document.cookie.substring(pos+1,end)).split(coo_cookieSchr);
			for (var cnt=0; cnt<values.length; cnt++){
				var keyval = values[cnt].split(coo_cookieKchr);
				if (keyval.length == 2 && keyval[0] != key && keyval[1] != coo_getval(keyval[0], cDefs, false))
					newcookie += ((!newcookie)?'':coo_cookieSchr)+values[cnt];
			}
		}
	}
	// update requested key with value
	if (val != null){ // null clears value
		// convert value to string
		if (typeof val == 'object'){ // only arrays are supported
			var newval='';
			for (var cnt=0; cnt<val.length; cnt++)
				newval += ((!newval)?'':coo_cookieLchr)+coo_cooesc(val[cnt]);
			val = newval;
		}else{
			val=coo_cooesc(String(val));
		}
		var def = coo_getval(key, cDefs, false);
		if (def != null && def != val) newcookie += ((!newcookie)?'':coo_cookieSchr)+key+coo_cookieKchr+val;
	}
	// create new cookie incl. timestamp
	var expires = new Date(); expires.setTime(expires.getTime()+86400000*coo_cookieDays);
	var now = new Date();
	var utc = Math.floor(now.getTime()/1000)-now.getTimezoneOffset()*60;
	var uid = (coo_cookieUID)?(coo_cookieUID+'_'):'';
	document.cookie = cName+uid+utc+coo_cookieSchr+escape(newcookie)+';expires='+expires.toGMTString()+';path='+coo_cookiePath;
	if (document.cookie.indexOf(cName)==-1) alert(coo_cookieWarn);
}

function coo_GetCookie(tag, key)
{
	var tagdef = coo_gettag(tag);
	if (!tagdef) return false;
	var cName = tagdef[0];
	var cDefs = tagdef[1];
	key=coo_cooesc(key);
	// extract value for key from current cookie data
	var pos = document.cookie.indexOf(cName);
	if (pos>=0){
		var end = document.cookie.indexOf(';', pos);
		if (end==-1) end = document.cookie.length;
		var pos = document.cookie.indexOf(coo_cookieSchr, pos+cName.length); // ignore timestamp
		if (pos>=0){
			var result = coo_getval(key, coo_unesc(document.cookie.substring(pos+1,end)).split(coo_cookieSchr), true);
			if (result != null) return result;
		}
	}
	// if key is not found return default value
	return coo_getval(key, cDefs, true);
}

function coo_ClearCookie(tag)
{
	// set cookie back to default
	var tagdef = coo_gettag(tag);
	if (!tagdef) return false;
	var cName = tagdef[0];
	var cDefs = tagdef[1];
	var expires = new Date(); expires.setTime(expires.getTime()+86400000*coo_cookieDays);
	var now = new Date(); var utc = Math.floor(now.getTime()/1000)-now.getTimezoneOffset()*60;
	var uid = (coo_cookieUID)?(coo_cookieUID+'_'):'';
	document.cookie = cName+uid+utc+coo_cookieSchr+';expires='+expires.toGMTString()+';path='+coo_cookiePath;
	if (document.cookie.indexOf(cName)==-1) alert(coo_cookieWarn);
}

function coo_getval(key, values, unesc)
{
	for (var cnt=0; cnt<values.length; cnt++){
		var keyval = values[cnt].split(coo_cookieKchr);
		if (keyval.length == 2 && keyval[0] == key){
			if (!unesc) return keyval[1];
			if (keyval[1].indexOf(coo_cookieLchr) == -1) return coo_unesc(keyval[1]);
			var res=keyval[1].split(coo_cookieLchr);
			for (var lst=0; lst<res.length; lst++)
				res[lst] = coo_unesc(res[lst]);
			return res;
		}
	}
	return null;
}

function coo_gettag(tag)
{
	if (typeof tag != 'number')
		for (var cc=0, ce=coo_cookieTags.length; cc<ce; cc++)
			if (coo_cookieTags[cc] == tag){
				tag = cc;
				break;
			}
	if (typeof tag != 'number')
		return false;
	else
		return Array(coo_cookieTags[cc]+'=', coo_cookieDefs[cc]);
}

function coo_cooesc(value)
{
	if (value.indexOf(coo_cookieKchr) != -1) value = value.split(coo_cookieKchr).join('%'+coo_cookieKchr.charCodeAt(0).toString(16))
	if (value.indexOf(coo_cookieSchr) != -1) value = value.split(coo_cookieSchr).join('%'+coo_cookieSchr.charCodeAt(0).toString(16))
	if (value.indexOf(coo_cookieLchr) != -1) value = value.split(coo_cookieLchr).join('%'+coo_cookieLchr.charCodeAt(0).toString(16))
	return value;
}

function coo_unesc(text)
{
	if (text)
		return unescape(text.split('+').join(' '));
	else
		return '';
}

