function addbookmark(sUrl, sTitle)
{
	if( (navigator.appName == "Microsoft Internet Explorer") && (parseInt(navigator.appVersion) >= 4) )
	{
		window.external.AddFavorite(sUrl, sTitle);
	}
	else
	{
		var sMessage = "Drücken Sie bitte [Strg] + [d] um die Seite zu Ihren Favoriten hinzuzufügen.";
		if(navigator.appName == "Netscape") sMessage;
		alert (sMessage);
	} // if
} // function

/**
 * Blendet von dem angegebenen Feld auf focus den Dummy-Wert aus und gegebenenfalls wieder ein.
 * @param Object oInput Das Input-Feld.
 * @param mixed mValue Der Dummy-Wert.
 * @return void
 */
function changeValueVisibilityOnFocusOrBlur(oInput, mValue)
{
	var oObject = $(oInput);

	if (oObject.size())
	{
		oObject.blur(function()
		{
			if (oObject.val() === '')
			{
				oObject.val(mValue);
			} // if
		}).focus(function()
		{
			if (oObject.val() === mValue)
			{
				oObject.val('');
			} // if
		});
	} // if
} // function

/**
 * Einfache Aktualisierung des Warenkorbs bei einem Mixkini-Klick.
 * @param Float fAmount
 * @param String sPrice
 * @return void
 */
function refreshBasketForMixkini(fAmount, sPrice)
{
	var oAmount = $('#warenkorb-layer .anzahl span');
	var oSum    = $('#warenkorb-layer .betrag span');

	if (oAmount.size())
	{
		oAmount.html(fAmount);
	} // if

	if (oSum.size())
	{
		oSum.html(sPrice);
	} // if
} // function

/**
 * Stellt das Akordeon in dem angegebenen Element dar und aktiviert einen Index ab 1 gezaehlt.
 * @param Integer iActiveElement Welcher Container soll aktiv geschaltet werden?
 * @param Object oAccordeonElement Der Akordeon Container.
 * @param Boolean bWithOverflowFlaw Soll der overflow korrigiert werden?
 * @return void
 */
function renderAccordeon(iActiveElement, oAccordeonElement, bWithOverflowFlaw)
{
	$(oAccordeonElement).accordion( {
		active: --iActiveElement,
		changestart : function(event, ui) {
			ui.newHeader.addClass('active');
			ui.oldHeader.removeClass('active');

			// IE6 FIX
			if ((ui.newHeader.prev().size() == 0) && bWithOverflowFlaw)
			{
				ui.newContent.parent().css('overflow','auto');
			} // if
		}
	});
} // function

/**
 * Fuellt den Suggest-Container mit den Daten die von Weikatec geliefert werden.
 *
 * Das Formular muss die Standard-URL .../index.php und die Standardfelder wie searchparam etc enthalten.
 * @param Object oForm Ursprunegliches Formular aus dem die Daten entnommen werden.
 * @param Object oInput Das Suchfeld.
 * @param Object oSuggestContainer Hier wird die Response eingefuegt.
 * @param String sSuggestView Welcher OXID-View stellt die Daten bereit.
 * @return void
 */
function searchSuggest(oForm, oInput, oSuggestContainer, sSuggestView)
{
	var bWasOpened          = false;
	var oSuggestParent      = oSuggestContainer.parent();
	var oRequest            = null;
	var sDivider            = '?';
	var sOriginalForLink    = oForm.attr('action');
	var sOriginalForSuggest = sOriginalForLink;

	jQuery.each(oForm.serializeArray(), function(iRound, oField)
	{
		if (oField.name !== 'searchparam')
		{
			sOriginalForLink += sDivider + oField.name + '=' + oField.value;

			sDivider = '&';
		} // if
	});

	oInput.keyup(function() {
		if (oRequest !== null)
		{
			oRequest.abort();
			oRequest = null;
		} // if

		var sSearchUrl = sOriginalForSuggest + '?' + oForm.serialize().replace('cl=search', 'cl=' + sSuggestView);

		if (oInput.val().length > 1)
		{
			oRequest = jQuery.getJSON(sSearchUrl, function(oJsonData, textStatus) {
				if ($(oJsonData.suggestresult.result.suggests).size())
				{
					oRequest = null;

					if (!oSuggestParent.is(':visible'))
					{
						oSuggestParent.toggle();
					} // if

					oSuggestContainer.html('');

					jQuery.each(oJsonData.suggestresult.result.suggests, function(iRound, oSuggest)
					{
						var sData = oSuggest.suggest;

						oSuggestContainer.append('<a href="' + sOriginalForLink + '&searchparam=' + sData.replace(/<span class="marked">/g,'').replace(/<\/span>/g, '') + '">' + sData + '</a>');
					});
				} // if
			});
		} // if
	});

	oSuggestParent.mouseenter(function() {
		bWasOpened = true;
		oSuggestParent.show();
	}).mouseleave(function() {
		if (bWasOpened)
		{
			oSuggestParent.hide();
		} // if

		bWasOpened = false;
	});
} // function

/* Funktionen die fuer die korrekte Anzeige der Verfuegbarkeitslayer notwendig sind */
/* Fuegt das Attribut z-index hinzu */
function set_zindex(artikel) {
	$('#' + artikel).css('zIndex', "500");
}

/* entfernt das Attribut z-index */
function unset_zindex(artikel) {
	$('#' + artikel).css('zIndex', "");
}

/* schliesst den Layer */
function close_layer(layer) {
	$('#' + layer).css('display', "none");
}

/* *
* entfernt das Attribut display
*
* beim Klick des Schliessen-Links des Layers wird dieser per display:none ausgeblendet
* damit der Layer beim nochmaligen mouse-Over ueber den Link Verfuegbarkeit auch angezeigt werden kann
* muss die Angabe wieder entfernt werden
* das passiert bei mouse-Over über den Link Verfuegbarkeit
*
**/
function unset_display_layer(layer) {
document.getElementById(layer).style.display = "";
}


/**
 * Macht aus einem entsprechend aufgebauten Container Element einen JQuery Tab.
 *
 * Klassen fuer aktiv/inaktiv Zustaende wurden auf das aktuell genutzte CSS abgestimmt.
 * Aufbau sollte wie folgt sein:
 * <div id="tabs">
 *   <ul>
 *      <li><a href="#tabs-1">Nunc tincidunt</a></li>
 *      <li><a href="#tabs-n">Proin dolor</a></li>
 *   </ul>
 *   <div id="tabs-1">
 *     <p>Tab 1 content</p>
 *  </div>
 *   <div id="tabs-n">
 *     <p>Tab n content</p>
 *  </div>
 * </div>
 *
 * @param sId string ID des Containers fuer die Reiteransicht.
 * @param iActiveIndex integer Index des Elements dass Initial dargestellt werden soll.
 * @param sFirstActiveLi string CSS-Klasse fuer das Erste LI-Element in aktiv.
 * @param sFirstPassiveLi string CSS-Klasse fuer das Erste LI-Element in passiv.
 * @param sActiveLi string CSS-Klasse fuer jedes andere aktive LI-Element ausser dem ersten.
 * @param sActiveLink string
 * @return void
 * @author Pascal Streichert <pascal.streichert@twt.de>
 */
function lcaTabs(sId, iActiveIndex, sFirstActiveLi, sFirstPassiveLi, sActiveLi, sActiveLink)
{
	$("#" + sId).tabs({
		select: function(event, ui)
		{
			// Wenn der abgewaehlte Reiter der Erste ist
			if ($(this).tabs('option', 'selected') == 0)
			{
				$('li:first', this).removeClass(sFirstActiveLi);
				$('li:first', this).addClass(sFirstPassiveLi);
			} // if
			else
			{
				// "active"-Klasse vom alten Link entfernen
				$('li:eq(' + $(this).tabs('option', 'selected') + ')', this).removeClass(sActiveLi);
			} // if

			$('li:eq(' + $(this).tabs('option', 'selected') + ') a', this).removeClass(sActiveLink);
		}, // function
		show: function(event, ui)
		{
			// Wenn der angewaehlte Reiter der Erste ist
			if (ui.index == 0)
			{
				$('li:first', this).removeClass(sFirstPassiveLi);
				$('li:first', this).addClass(sFirstActiveLi);
			} // if
			else
			{
				// "active"-Klasse auf neuem Link setzen.
				$('li:eq(' + ui.index + ')', this).addClass(sActiveLi);
			} // if

			$('li:eq(' + ui.index + ') a', this).addClass(sActiveLink);
		} // function
	});
	$("#" + sId).tabs('select', iActiveIndex);
} // function

function showErrorLayer(sInfoText)
{
	var sText = $('#layer-wk-error-content').html().replace(/#TEXT#/g, sInfoText);
	$('#layer-wk-error').html(sText);
	$('#layer-wk-error').addClass('on');

	positionLayer($('#layer-wk-error'), 180);

	return false;
} // function

function positionLayer(oLayer, iHeight)
{
	// Vertikale Position des Layers nach Scrollposition
	iWindowPos = document.documentElement.scrollTop;

	oLayer.css('top', iHeight + iWindowPos);
} // function

// Zustaendig dafuer, dass Layer geschlossen werden koennen, wenn man
// ausserhalb des jeweiligen Layers klickt
$(document).ready(function()
{
	document.onclick = function (oEvent) {

		oEvent = oEvent || event;

		var oTarget = oEvent.target || oEvent.srcElement;
		if(oTarget.id != 'test-forgot-pw')
		{
			// hole aktiven Layer
			var oLayer     = $('.on');
			var sIdToClose = oLayer.attr('id');

			// wenn aktiven Layer gefunden und nicht erster Layer-Schritt im WK
			if ((sIdToClose != 'undefined') && (sIdToClose != 'mask') && (!oLayer.hasClass('groessenberater')))
			{
				do
				{
					if (oTarget.id == sIdToClose)
					{
						// es wurde im geoeffneten Layer geklickt, mache nichts
						return;
					}

					oTarget = oTarget.parentNode;
				}
				while (oTarget);

				// es wurde irgendwo ausserhalb des Layers geklickt,
				// Layer schliessen
				oLayer.removeClass('on');
			}
		}
	}

	if ($('#TextA').length)
	{
		$('#TextA').css({'top': 'auto'});
	}

	if (iTimeoutMilSecs)
	{
		window.setInterval(
			function()
			{
				$.ajax(
				{
					url: '/index.php?cl=timeout',
					error: function(data)
					{
						var oElement = $('#timeout-warning');

						if (!oElement.size())
						{
							window.location.href = '/index.php?cl=start&timeout=1';
						} // if

						oElement.show();
					}
				});
			},
			iTimeoutMilSecs
		);
	} // if
});