	var userId;
	var openMode;

	var BTN_DELETE = "Delete";

	// cookie variable names
	var LAST_VISITED = "lvis";
	var LAST_CLICKED = "lcli";
	var MY_LINKS = "myl";
	
	var MAX_ENTRIES = "cme";
	var LETS_PLAY 	= "lpwu";
	var GAME_REGED	= "rtg";
	
	// max image to find in game
	var GAME_IMAGES_NO = 3;
	
	var GAME_PAGE = "letsplay-registration";
	var TAKE_A_TOUR = "take-a-tour";
	
	var MAX_ENTRIES_MAP = new Array (
		LAST_VISITED,
		LAST_CLICKED,
		MY_LINKS
	);
	
	var UID = "uid";
	var WIN_OPEN_MODE="wop";
	var FONTSIZE = "fontsize";
		
	var COOKIE_MAXENTRIES = new Array();
		COOKIE_MAXENTRIES[LAST_VISITED] = 8;
		COOKIE_MAXENTRIES[LAST_CLICKED] = 8;
		COOKIE_MAXENTRIES[MY_LINKS] = 20;


	// log categories
	var USER_NAVIGATE = "user.navigate";
	var NEW_USER_ID = "user.firstvisit";
	var PAGE_DOWNLOAD = "user.page.download";
	var USER_CLICK_ON = "user.link.click";
	var ADD_NEW_LINK = "user.link.add";
	var SET_OPEN_MODE = "user.set.openmode";
	var SET_FONTSIZE = "user.set.fontsize";
	var BEST_PAGES_WIDGET = "best.pages.widget";

	var LOG_URI = "log";

	var INTERNAL_PATTERN = ".infobay."

	// window open modes
	var OPEN_SAME=0;
	var OPEN_NEW=1;
	var OPEN_FIX=2;
	var DEFAULT_OPEN_MODE=OPEN_NEW;
	var WINDOW_NAME="infobaywin";

	// html element names
	var ELEM_LAST_VISITED = "LastVisitedPages";
	var ELEM_LAST_CLICKED = "LastClickedURLs";
	var ELEM_MY_LINKS = "MyLinks";
	var ELEM_MY_LINKS_EDIT = "MyLinksEdit";

	var HOME_NAME = "infobay Startseite";	// i18n 

	// cookie fields
	var FIELD_SEPARATOR = "|";

	// colors
	var SELECTED_BOX_TITLE_COLOR = "#9B9B9E";

	/**
	 * repaint the box title if the page loaded from a search page
	 */
	function checkLinkboxSelection()
	{
		if(gup('boxid')!="")
		{
			setLinkboxSelection(gup('boxid'));
		}
		if(gup('itemid')!="")
		{
		  setLinkitemSelection(gup('itemid'));
		}
	}

	/**
	 * returns the value of a url parameter
	 */
	function gup( name )
	{
		name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
		var regexS = "[\\?&]"+name+"=([^&#]*)";
		var regex = new RegExp( regexS );
		var results = regex.exec( window.location.href );
		if( results == null )
			return "";
		else
			return results[1];
	}
	
	/**
	 * returns the value of the cookie specified by the variable name
	 */
	function getCookie(varName)
	{
		// cookies are separated by semicolons
		var aCookie = document.cookie.split("; ");
		for (var i=0; i < aCookie.length; i++)
		{
			// a name/value pair (a crumb) is separated by an equal sign
			var aCrumb = aCookie[i].split("=");
			if (varName == aCrumb[0]) 
				return unescape(aCrumb[1]);
		}
		// a cookie with the requested name does not exist
		return null;
	}
	
	/**
	 * sets the value of the cookie specified by the variable name
	 */
	function setCookie(varName, sValue)
	{
		document.cookie = varName + "=" + escape(sValue)+"; domain=" + DOMAIN + "; expires=Thu, 31 Dec 2020 23:59:59 GMT;";
	}

	/**
	 * deletes the cookie specified by the variable name
	 */
	function delCookie(varName)
	{
		document.cookie = varName + "=; domain=" + DOMAIN + "; expires=Fri, 31 Dec 1999 23:59:59 GMT;";
	}

	/**
	 * returns the value array of the cookie specified by the variable name
	 */
	function getCookieValues(varName)
	{
		var origValue = getCookie(varName);
		if (origValue == null) {
			return new Array();
		}
		return origValue.split(",");
	}

	/**
	 * stores a value in the array of the cookie specified by the variable name
	 */
	function storeInCookie(varName, value, index)
	{
		var aValues = getCookieValues(varName);
		if (index >= aValues.length)
		{
			aValues[aValues.length] = value;
		}
		else
		{
			for (var i = aValues.length; i>index; i--)
			{
				aValues[i] = aValues[i-1];
			}
			aValues[index] = value;
		}
		//limit the size of the cookie
		return limitCookieSize(varName, value, aValues);
	}
	
	function limitCookieSize(varName, value, cookieValues) {
		
		var aValues = cookieValues?cookieValues:getCookieValues(varName);

		getMaxEntriesSize();
		
		if ((COOKIE_MAXENTRIES[varName] != "undefined")&&(aValues.length > COOKIE_MAXENTRIES[varName]))
		{
			aValues.length = COOKIE_MAXENTRIES[varName];
		}
		
		setCookie(varName, aValues.toString());
		
		return aValues;
	}

	function setMaxEntriesSize(varName, value) {
	
		if (COOKIE_MAXENTRIES[varName] != "undefined") {
			COOKIE_MAXENTRIES[varName] = value;
			
			var tmpArr = new Array();
			for (var i = 0; i < MAX_ENTRIES_MAP.length; i++) {
				tmpArr[i] = COOKIE_MAXENTRIES[MAX_ENTRIES_MAP[i]];
			}
			
			setCookie(MAX_ENTRIES, tmpArr.toString());
			limitCookieSize(varName, value);
		}
	}
	
	function getMaxEntriesSize() {
		var maxEntries = getCookieValues(MAX_ENTRIES);
		
		if (maxEntries.length > 0) {
			for (var i = 0; i < maxEntries.length; i++) {
				COOKIE_MAXENTRIES[MAX_ENTRIES_MAP[i]] = maxEntries[i];
			}
		}
		
	}
	
	/**
	 * delete the element specified by index from the array of the cookie specified by the variable name
	 */
	function deleteFromCookie(varName, index)
	{
		var aValues = getCookieValues(varName);
		if (index < aValues.length)
		{
			for (var i = new Number(index); i < aValues.length-1; i++)
			{
				aValues[i] = aValues[i+1];
			}
			aValues[aValues.length-1]=null;
			aValues.length=aValues.length-1;
			if (aValues.length>0)
			{
				setCookie(varName, aValues);
			}
			else 
			{
				delCookie(varName);
			}
		}
		return aValues;
	}

	/**
	 * stores a unique value (as first or as last element) in the array of the cookie 
	 * specified by the variable name, delete old one if it exists
	 */
	function storeUniqueValue(varName, value, asFirst)
	{
		var aValues = getCookieValues(varName);
		for (var i = 0; i < aValues.length; i++)
		{
			if (aValues[i] == value)
			{
				aValues = deleteFromCookie(varName, i);
				break;
			}
		}
		var index = asFirst ? 0 : aValues.length;
		storeInCookie(varName, value, index);
	}

	function deleteUniqueValue(varName, value)
	{
		var aValues = getCookieValues(varName);
		for (var i = 0; i < aValues.length; i++)
		{
			if (aValues[i] == value)
			{
				aValues = deleteFromCookie(varName, i);
				break;
			}
		}
	}

	function loadUserId()
	{
		var values = getCookieValues(UID);
		if (values.length > 0)
		{
			userId = values[0];
		}
		else
		{
			userId = newUserId;
			storeInCookie(UID, userId, 0);
			log(NEW_USER_ID, userId);
		}
	}

	function loadOpenMode()
	{
		var values = getCookieValues(WIN_OPEN_MODE);
		if (values.length > 0)
		{
			openMode = values[0];
		}
		else
		{
			openMode = DEFAULT_OPEN_MODE;
			storeInCookie(WIN_OPEN_MODE, openMode, 0);
		}
	}

  function log(category, value)
  {
    var im = new Image();
    im.src = "/" + LOG_URI + "?category=" + category + "&value=" + escape(value) + "&value2=" + escape(pageId) + "&user=" + userId;
  }

  function externallog(url, category, value, extuserid)
  {
    var im = new Image();
    im.src = url+"/" + LOG_URI + "?category=" + category + "&value=" + escape(value)  + "&value2=" + escape(pageId) + "&user=" + extuserid;
  }

	function logClick(aTag)
	{
		log(USER_CLICK_ON, aTag.href);
		if (aTag.href.indexOf(INTERNAL_PATTERN) == (-1))
		{
			fields = concatFields(aTag.innerHTML, aTag.href);
			storeUniqueValue(LAST_CLICKED, fields, true);
		}
	}

	function doClick(aTag)
	{
		if (aTag.href.indexOf(DOMAIN)==(-1))
		{
			//if it's an external link
			if (openMode == OPEN_NEW)
			{
				w = window.open(aTag.href);
				w.focus();
				fillLastClicked();
				return false;
			}
			else if (openMode == OPEN_FIX)
			{
				w = window.open(aTag.href, WINDOW_NAME);
				w.focus();				
				fillLastClicked();
				return false;
			}
			else //openMode == OPEN_SAME
				return true;
		}
		else //internal link
			return true;
	}

	function delLastVisited()
	{
		delCookie(LAST_VISITED);
	}
	
	function fillLastVisited()
	{
		var s ="";
		var a = getCookieValues(LAST_VISITED);
		for (var i = 0; i < a.length; i++)
		{
			var aIn = "";
			aIn = a[i];
			aIn = aIn.substring(0, aIn.indexOf("."));
			aIn = aIn == "www"?HOME_NAME:aIn;
			aIn = (i==0) ? "<b>" + aIn + "</b>" : aIn;
			s+=("<a class=\"page\" href=\"http://"+a[i]+"\" onClick=\"log(USER_NAVIGATE, 'last_visited_box')\">"+aIn+"</a>");
		}
		if (document.getElementById(ELEM_LAST_VISITED))
			document.getElementById(ELEM_LAST_VISITED).innerHTML = s;
	}

	function delLastClicked()
	{
		delCookie(LAST_CLICKED);
	}

	function fillLastClicked()
	{
		var s = "";
		var a = getCookieValues(LAST_CLICKED);
		for (var i = 0; i < a.length; i++)
		{
			var fields = splitIntoFields(a[i]);
			var title = fields[0];
			var href = fields[1];
			var sName = (i==0) ? "<b>" + title + "</b>" : title;
			s += ("<a href=\"" + href + "\" class=\"arrow\" onMouseDown=\"log(USER_NAVIGATE, 'last_clicked_box'); logClick(this)\" onClick=\"return doClick(this)\">" + sName + "</a>");
		}
		if (document.getElementById(ELEM_LAST_CLICKED)) {
			document.getElementById(ELEM_LAST_CLICKED).innerHTML = s;
		}
	}

	function fillMyLinks()
	{
		var item = document.getElementById(ELEM_MY_LINKS);
		if (item) {
			var s = "";
			var a = getCookieValues(MY_LINKS);
			for (var i = 0; i < a.length; i++)
			{
				s += ("<a href=\"" + a[i] + "\" class=\"arrow\" onMouseDown=\"log(USER_NAVIGATE, 'my_links')\" onClick=\"return doClick(this)\">" + a[i] + "</a>");
			}
			item.innerHTML = s;
		}
	}

	function fillMyLinksEditor()
	{
		var item = document.getElementById(ELEM_MY_LINKS_EDIT);
		if (item) {
			var s = "";
			var a = getCookieValues(MY_LINKS);
			s += "<ul style='margin-top:0; margin-bottom:0'>";
			for (var i = 0; i < a.length; i++)
			{
				s += ("<li>" + a[i] + "&nbsp;&nbsp;<a href=\"javascript:deleteMyLinksItem('" + a[i] + "')\">" + BTN_DELETE + "</a></li>");
			}
			s += "</ul>";
			//alert('[' + ELEM_MY_LINKS_EDIT + "]:" + item + " - " + s);
			item.innerHTML = s;
		}
	}

	function addToMyLinks(elem)
	{
		var s = new String(elem.value);
		if (
			(s.indexOf("http:")!=0) && 
			(s.indexOf("https:")!=0) && 
			(s.indexOf("mailto:")!=0) && 
			(s.indexOf("ftp:")!=0) && 
			(s.indexOf("gopher:")!=0) &&
			(s.indexOf("news:")!=0) &&
			(s.indexOf("about:")!=0)
		)
		{
			if (s.indexOf("//")!=0)
			{
				s = "http://" + s;
			}
			else
			{
				s = "http:" + s;
			}
		}
		storeUniqueValue(MY_LINKS, s, false);
		log(ADD_NEW_LINK, s);
		fillMyLinks();
		elem.value = "http://";
	}
	
	function deleteMyLinksItem(item)
	{
		/*if (!confirm("Möchten Sie '" + item + "' löschen?")) {
			return;
		}*/
		
		deleteUniqueValue(MY_LINKS, item);		
		fillMyLinksEditor();
	}
	

	function saveOpenMode(elem)
	{
		delCookie(WIN_OPEN_MODE);
		storeInCookie(WIN_OPEN_MODE, elem.value, 0);
		log(SET_OPEN_MODE, elem.value);
		loadOpenMode();
	}

	function changeFontSizeOnScreen(fontsize)
	{
		var theRules = new Array();
		var fontSizeCSS = document.styleSheets[2];
		if (fontSizeCSS.cssRules)
			theRules = fontSizeCSS.cssRules;
		else if (fontSizeCSS.rules)
			theRules = fontSizeCSS.rules;
			
		theRules[0].style.fontSize=(fontsize-1)+"px";
		for(i=1;i<theRules.length;i++)
		{
			theRules[i].style.fontSize=fontsize+"px";
		}
	}

	function changeFontSize(fontsize) 
	{
		changeFontSizeOnScreen(fontsize);
		setCookie(FONTSIZE, fontsize);
		log(SET_FONTSIZE, fontsize); 
	}

	function setFontSizeFromCookie() 
	{
		var fontsize = getCookie(FONTSIZE);
		if (fontsize!=null)
			changeFontSizeOnScreen(fontsize);
	}

	function init(isTopic)
	{
		loadUserId();
		loadOpenMode();
		log(PAGE_DOWNLOAD, pageId);
		if (isTopic) {
			storeUniqueValue(LAST_VISITED, pageId, true);
		}
		fillLastVisited();
		fillLastClicked();
		fillMyLinks();
		setFontSizeFromCookie();

		if (typeof(pageInit) == "function") {
			pageInit();
		}
		
		if (document.forms[0].keywords)
			document.forms[0].keywords.focus();		
		
		checkLinkboxSelection();
	}

	function setComboSelectedValue(comboId, value)
	{
		var combo = document.getElementById(comboId);
		if (!combo) {
			alert("combo[" + comboId + "] not found");
			return;
		}

		for (var i=0;  i<combo.options.length; i++ ) {
			if (combo.options[i].value == value) {
				combo.selectedIndex = i;
				return;
			}
		}
	}

	function getComboSelectedValue(comboId) {
		var combo = document.getElementById(comboId);
		if (!combo) {
			alert("combo[" + comboId + "] not found");
			return;
		}

		return combo.options[combo.selectedIndex].value;
	}

	
	var prevBgColor = "";
  var prevId = "";
  var prevItemId = "";
	
	function setLinkboxSelection(id) {
		if (prevId != "") {
			restoreLinkboxSelection(prevId);
		}
		prevId = id;
		prevBgColor = document.getElementById(id + "_titleLeft").style.backgroundColor;
		
		document.getElementById(id + "_titleLeft").style.backgroundColor = SELECTED_BOX_TITLE_COLOR;
		document.getElementById(id + "_title").style.backgroundColor = SELECTED_BOX_TITLE_COLOR;
		document.getElementById(id + "_titleRight").style.backgroundColor = SELECTED_BOX_TITLE_COLOR;
	}
	
	function restoreLinkboxSelection(prevId) {
		document.getElementById(prevId + "_titleLeft").style.backgroundColor = prevBgColor;
		document.getElementById(prevId + "_title").style.backgroundColor = prevBgColor;
		document.getElementById(prevId + "_titleRight").style.backgroundColor = prevBgColor;
	}
	
	function setLinkitemSelection(id) {
    if (prevItemId != "") {
      restoreLinkitemSelection(prevItemId);
    }
    prevItemId = id;
    document.getElementById(id).className="selarrow";
	}

  function restoreLinkitemSelection(prevItemId) {
    document.getElementById(prevItemId).className = "arrow";
  }

	function concatFields()
	{
		var fields = "";
		var first = true;
		for (var n=0; n<arguments.length; n++) {
			if (!first) {
				fields += FIELD_SEPARATOR;
			}
			fields += arguments[n];
			first = false;
		}
		return fields;
	}
	
	function splitIntoFields(str)
	{
		return str.split(FIELD_SEPARATOR);
	}

	function takeaTour() {
		var tourPage = "http://www." + DOMAIN + "/" + TAKE_A_TOUR;
		document.location.href = tourPage;
		return;
	}
	
	function letsPlay(picNo, url) {
		var pics = getCookieValues(LETS_PLAY);
		var reged = getCookieValues(GAME_REGED);
		var msg = "";
		var regPage = "http://www." + DOMAIN + "/" + GAME_PAGE;
		
		if (pics.length == GAME_IMAGES_NO) {
			if (reged[0]) {
				window.open(url, "gameAds");
			}
			else {
				document.location.href = regPage;
			}
			return;
		}

		if (!isArrayContains(pics, picNo)) {
			pics = storeInCookie(LETS_PLAY, picNo, 0);
			if ((pics.length) == GAME_IMAGES_NO) {
				// Call registration
				// -----------------------------------------------
				document.location.href = regPage;
				return;
			}
			msg += "Jos " + (GAME_IMAGES_NO - pics.length) + " nagrade!";
			alert(msg);			
		}
		else {
			window.open(url, "gameAds");
		}		
	}
		
	function isArrayContains(arr, str) {
		for (var i = 0; i < arr.length; i++) {
			if (arr[i] == str) {
				return true;
			}
		}
		return false;
	}
	
//------------------------------- Flash loader ------------------------------------
function play_flash()
{
  var ret = 
    AC_GetArgs
    (  arguments, 
		".swf", "movie", 
		"clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" , "application/x-shockwave-flash"
    );
  AC_Generateobj(ret.objAttrs, ret.params, ret.embedAttrs);
}

//v1.0
//Copyright 2006 Adobe Systems, Inc. All rights reserved.
function AC_AddExtension(src, ext)
{
  if (src.indexOf('?') != -1)
    return src.replace(/\?/, ext+'?'); 
  else
    return src + ext;
}

function AC_Generateobj(objAttrs, params, embedAttrs) 
{ 
  var str = '<object ';
  for (var i in objAttrs)
    str += i + '="' + objAttrs[i] + '" ';
  str += '>';
  for (var i in params)
    str += '<param name="' + i + '" value="' + params[i] + '" /> ';
  str += '<embed ';
  for (var i in embedAttrs)
    str += i + '="' + embedAttrs[i] + '" ';
  str += ' ></embed></object>';

  document.write(str);
}

function AC_FL_RunContent(){
  var ret = 
    AC_GetArgs
    (  arguments, ".swf", "movie", "clsid:d27cdb6e-ae6d-11cf-96b8-444553540000"
     , "application/x-shockwave-flash"
    );
  AC_Generateobj(ret.objAttrs, ret.params, ret.embedAttrs);
}

function AC_SW_RunContent(){
  var ret = 
    AC_GetArgs
    (  arguments, ".dcr", "src", "clsid:166B1BCA-3F9C-11CF-8075-444553540000"
     , null
    );
  AC_Generateobj(ret.objAttrs, ret.params, ret.embedAttrs);
}

function AC_GetArgs(args, ext, srcParamName, classid, mimeType){
  var ret = new Object();
  ret.embedAttrs = new Object();
  ret.params = new Object();
  ret.objAttrs = new Object();
  for (var i=0; i < args.length; i=i+2){
    var currArg = args[i].toLowerCase();    

    switch (currArg){	
      case "classid":
        break;
      case "pluginspage":
        ret.embedAttrs[args[i]] = args[i+1];
        break;
      case "src":
      case "movie":	
        args[i+1] = AC_AddExtension(args[i+1], ext);
        ret.embedAttrs["src"] = args[i+1];
        ret.params[srcParamName] = args[i+1];
        break;
      case "onafterupdate":
      case "onbeforeupdate":
      case "onblur":
      case "oncellchange":
      case "onclick":
      case "ondblClick":
      case "ondrag":
      case "ondragend":
      case "ondragenter":
      case "ondragleave":
      case "ondragover":
      case "ondrop":
      case "onfinish":
      case "onfocus":
      case "onhelp":
      case "onmousedown":
      case "onmouseup":
      case "onmouseover":
      case "onmousemove":
      case "onmouseout":
      case "onkeypress":
      case "onkeydown":
      case "onkeyup":
      case "onload":
      case "onlosecapture":
      case "onpropertychange":
      case "onreadystatechange":
      case "onrowsdelete":
      case "onrowenter":
      case "onrowexit":
      case "onrowsinserted":
      case "onstart":
      case "onscroll":
      case "onbeforeeditfocus":
      case "onactivate":
      case "onbeforedeactivate":
      case "ondeactivate":
      case "type":
      case "codebase":
        ret.objAttrs[args[i]] = args[i+1];
        break;
      case "width":
      case "height":
      case "align":
      case "vspace": 
      case "hspace":
      case "class":
      case "title":
      case "accesskey":
      case "name":
      case "id":
      case "tabindex":
        ret.embedAttrs[args[i]] = ret.objAttrs[args[i]] = args[i+1];
        break;
      default:
        ret.embedAttrs[args[i]] = ret.params[args[i]] = args[i+1];
    }
  }
  ret.objAttrs["classid"] = classid;
  if (mimeType) ret.embedAttrs["type"] = mimeType;
  return ret;
}
	