/*
@Author Kamenew
Globaler Ajax-Handel

@requestURL
@method POST,GET
@dataObject POST Data assoziatives Array
@callback die Callback-Methode für den jeweiligen Request
@async boolean Modus
@error Callback-Methode für Fehlerfall(optional)
@beforSend Callback-Methode um RequestHeader zu setzen(optional)
*/
function requestAjax(requestURL,method,dataObject,callback,async,error,beforeSend){
//console.log("ajax"+requestURL);
if(error == undefined)
	error = null;
if(beforeSend == undefined)
	beforeSend = null;
$.ajax({
   type: method,
   url: requestURL,
   data: dataObject,
   success: callback,
   async: async,
   beforeSend: beforeSend,
   error: error
 });
}

/* <![CDATA[ */
function MM_findObj(n, d) { //v4.01
	var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
	d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
	if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
	for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
	if(!x && d.getElementById) x=d.getElementById(n); return x;
}
/* ]]> */

/*
Popup Funktion

@param url	zu öffnende URL
@param name Name des Fensters
@param width Breite des Fensters
@param height Höhe des Fensters
@param top Abstand des Popups vom oberen Rand des Bildschirms
@param left Abstand des Popups vom linken Rand de Bildschirms
@param toolbar Toolbar anzeigen = yes nicht anzeigen = no
@param status Statusbar anzeigen = yes nicht anzeigen = no
@param scrollbars Scrollbalken anzeigen = yes nicht anzeigen = no
@param resize Größe des Fensters veränderbar = yes fixiert = no
*/
var win = null;
function windowOpen(url,name,width,height,top,left,toolbar,status,scrollbars,resize){

	//schliesse das fenster wenn es bereits geöffnet ist
	if( win != null )win.close();
	var attrib_str = 'toolbar='+toolbar+',width='+width+',height='+height+',top='+top+',left='+left+',directories=no,status='+status+',scrollbars='+scrollbars+',resize='+resize
	win = window.open(url,name,attrib_str);
	return true;
}

function windowOpenCenter(url,name,width,height,scrollbars,toolbar,status,resize){

	popY = (screen.width-width)/2;
	popX = (screen.height-height)/2; 

   var attrib_str = 'toolbar='+toolbar+',width='+width+',height='+height+',top='+popY+',left='+popX+',directories=no,status='+status+',scrollbars='+scrollbars+',resize='+resize
   win = window.open(url,name,attrib_str);

   return true;
}



/*
Zählt bei Textarea Felder die noch verfügbaren
Zeichen runter

@param Anzahl der
@param Anzahl der max. Zahlen
@param ID des Formularfeldes
*/
function checkLen(val,zeichen,formid) {

objLen 		= document.getElementById("objLen");
formid	= document.getElementById(formid);

tmpLen		= zeichen - formid.value.length;

if(tmpLen >= 0) {
svobjComment = formid.value;
} else {
formid.value = svobjComment;
tmpLen = zeichen - svobjComment.length;
}
objLen.value = tmpLen;
}


/*
Zählt bei Textarea Felder die noch verfügbaren
Zeichen runter und zwar FÜR BELIEBIGE TEXTAREAS UND NICHT NUR FÜR DIE MIT ID objLen :-)

@param Objekt (Textarea)
@param Anzahl der max. Zahlen
@param ID des Ausgabefeldes
*/
function limitChars(obj,max,leftId)
{
if (obj.value.length > max) {
	obj.value = obj.value.substring(0,max);
	alert("Es dürfen nicht mehr als "+max+" Zeichen eingegeben werden");
}
iZeichen = max - obj.value.length

document.getElementById(leftId).value = iZeichen >= 0 ? iZeichen : 0;

}

/*
Inputfields replace values

Bei Bestellformularen oder ähnlichem wird in z.b. grauer Schrift
als value z.b. Anzahl und Bestell-Nummer angezeigt.
bei einem onclick event muß dieser zurückgesetzt werden und
evtl. der Style geändert werden.

@param neue TextFarbe
@param Array mit IDs der Inputfields welche zurückgesetzt werden sollen
@param Array MaxLength
*/
var finished = 0;
function inputFieldsChangeValue(textstyle, inputFields, maxLength){

	if(finished == 1){

		return;
	}
	for(i = 0; i < inputFields.length; i++){
			document.getElementById( inputFields[i] ).value = '';
			document.getElementById( inputFields[i] ).style.color = textstyle;
			document.getElementById( inputFields[i] ).maxLength = maxLength[i];
	}

	finished = 1;
}

/*
Funktion pr�ft, ob Text der Vorbelegung entspricht --> Text entfernen
sonstige Eingaben nicht l�schen 
Wenn Leer --> Text-Vorbelegung
*/
function inputFieldChangeText(textstyle,id,value){

	if (document.getElementById( id ).value == value){
		document.getElementById( id ).value = '';
		document.getElementById( id).style.color = textstyle;
		return;
	}
	
	if (document.getElementById( id ).value == ''){
		document.getElementById( id ).value = value;
		document.getElementById( id ).style.color = textstyle;
		return;
	}		
}



/*
Katalogbestellformular

übernehme Daten des kleinen Katalogbestellformulars wenn auf weitere Produkte geklickt wurde
@param modifier
*/
function getOrderNumbers(modifier){
	var f1, f3;
	//artikel 1
	if(document.getElementById( 'f2'+modifier ).value.match(/[0-9]+/)){
		if (!document.getElementById( 'f1'+modifier ).value.match(/[0-9]+/))
			f1 = 1;
		else
			f1 = document.getElementById( 'f1'+modifier ).value;
		document.getElementById( 'cat'+modifier ).href += '&f1='+f1+'&f2='+document.getElementById( 'f2'+modifier ).value;
	}

	//artikel 2
	if(document.getElementById( 'f4'+modifier ).value.match(/[0-9]+/)){
		if (!document.getElementById( 'f3'+modifier ).value.match(/[0-9]+/))
			f3 = 1;
		else
			f3 = document.getElementById( 'f3'+modifier ).value;
		document.getElementById( 'cat'+modifier ).href += '&f3='+f3+'&f4='+document.getElementById( 'f4'+modifier ).value;
	}

}

/*
Abfrage der Anzahl von Filialen im Umkreis einer Postleitzahl

Mittels Ajax-Request werden die Daten aus der MS abgefragt und in dem Container mit ID 'nr_of_stores' abgelegt

@param string plz
@param string land
*/
function getNrOfStores(plz,land){

        if ((plz.match(/[0-9]{4,5}/))){
	        requestAjax('/index.html?f=chainstore.count&plz='+plz.substring(0,2),'GET',[],callbackFiliale,true);
		} else {
			document.getElementById("nr_of_stores").innerHTML = '';
		}
}

function callbackFiliale(data) {
	if (data != '0'){
		document.getElementById("nr_of_stores").innerHTML = 'Wir haben '+data+' Filialen in Ihrer Nähe gefunden';
	} else {
		document.getElementById("nr_of_stores").innerHTML = '';
	}
}

/*
Prüffunktion für ISBN-Nummern aus dem Schulbuch-Bestellformular

@param string text
*/
function checkISBN(formular) {
	invalidNrs = "Ungültige ISBN-Nummer(n):\n\n";
	text = "Bitte prüfen Sie die ISBN-Nummer(n) (13 Ziffern) oder verwenden Sie die Suche (oben links) durch Eingabe des Autors bzw. Titels.";
	var count = 0;
	isbns = formular.elements["b[]"];
	anzahl = isbns.length;
	for (var i=0; i<anzahl; i++) {
		isbn = isbns[i].value;
		if (isbn!="") {
			if(isValidISBN(isbn)==false) {
				count++;
				invalidNrs = invalidNrs+isbn+"\n";
			}
		}
	}
	if (count>0) {
		alert(invalidNrs+"\n"+text);
		return false;
	} else {
		return true;
	}
}

/*
Prüffunktion für ISBN-10 und ISBN-13 Nummern

@param string isbn
*/
function isValidISBN(isbn) {
	// Eliminieren eventueller Bindestriche und Leerzeichen
	isbn = isbn.replace(/-/g, "");
	isbn = isbn.replace(/\s/g, "");
	// Format überprüfen

	if (isbn.search(/^\d{9}[\dx]$/i)!=-1) {
		isbnart = 10;
	}
	else if (isbn.search(/^\d{13}$/i)!=-1) {
		isbnart = 13;
	}
	else{
		return false;
	}

	arrIsbn = new Array(isbnart);
	for (i=0; i<isbnart; i++) {
		arrIsbn[i] = isbn.charAt(i);
	}
	if (arrIsbn[isbnart-1].toLowerCase() == "x") arrIsbn[isbnart-1] = 10;
	// Prüfsumme ermitteln
	if (isbnart == 10){
		summe = 0;
		for (i=0; i<10; i++) {
			summe += arrIsbn[i]*(10-i);
		}
		if ((summe%11)!=0)
			return false;
	}
	else if (isbnart == 13){
		summe = 0;
		for (i=0; i<12; i++) {
		//Der Multiplikator für dei einzelnen Ziffern ist abwechselnd 1 und 3
			$next_mult = 2*(i%2)+1;
	//		alert (arrIsbn[i]*$next_mult);
			summe += arrIsbn[i]*$next_mult;

		}
	//	alert (summe);
		prueffziffer = 10 - (summe%10);
	//	alert (prueffziffer);
		if ((prueffziffer == 10)&&(arrIsbn[12])!= 0){
			return false;
		}
		else if (prueffziffer != arrIsbn[12]) {
			return false;
		}

	}
	return true;
}

/*
Prüft die Bestellnummern der Katalogbestellungen ob diese >= 6 Stellen besitzt
und gibt bei einem Fehler einen Alertfenster mit einem Hinweistext aus
*/
function checkOrderNumbers(idTag,type)
{
	////////////////////////////
	//kleines Katalogbestellformular auf Homepage
	if(type == 1){
			value = document.getElementById( 'f2'+idTag ).value;
			//wenn value gesetzt prüfe auf länge
			if(value != ''){
				//gebe eine Meldung aus
				if(value.length <= 5){
					alert('Bestellnummern bestehen aus 6 bis 8 Zahlen.\nBitte korrigieren Sie Ihre Angaben.');
					return false;
				}
			}
			
			if (value == 'Bestell-Nummer'){
		    	self.location="/index.html?p=cat.order";
		    	return false;
		    }
			
			value = document.getElementById( 'f4'+idTag ).value;
			//wenn value gesetzt prüfe auf länge
			if(value != ''){
				//gebe eine Meldung aus
				if(value.length <= 5 ){
					alert('Bestellnummern bestehen aus 6 bis 8 Zahlen.\nBitte korrigieren Sie Ihre Angaben.');
					return false;
				}
			}
	}else{
	////////////////////////////
	//Großes Katalogbestellformular
		//durchlaufe die schleife solage bis iTag+1 = undefined und breche schleife ab
		for(i=1;i<100;i++){

			if(document.getElementById( idTag+i )){

				value = document.getElementById( idTag+i ).value;
				//wenn value gesetzt prüfe auf länge
				if(value != ''){
					//gebe eine Meldung aus
					if(value.length <= 5 ){
						alert('Bestellnummern bestehen aus 6 bis 8 Zahlen.\nBitte korrigieren Sie Ihre Angaben.');
						return false;
					}
				}
			}else{
				break;
			}
		}
	}
}

/**
Ersetzt die CSS Klasse eines Elementes
Wenn Objekt Class "first" tausche mit second und umgekehrt
Wird z.b. für Sys::dumpVar
@autor Markus Kamenew
@param id = id des Elements
@param first = default Klassenname
@param second = zweiter Klassenname

**/
function changeClass(id,first,secound){
	
	if( document.getElementById(id).className==first){
		document.getElementById(id).className=secound;
	}else{
		document.getElementById(id).className=first;
	}
}

/**
Generiert zufälligen Wert und prüft, ob er im übergebenen Wertebereich liegt
Wird z.b. für zufälliges Öffnen eines Popup benutzt (Sammler-Editionen)
@autor Oliver Deul
@param range = Wertebereich

**/
function my_rand(range){
	a=Math.random();
	a*=100;
	a=Math.ceil(a)
	if (a <= range)
		return true;
	else
		return false;		
}

/**
Ersetzt den Inhalt vom 1. Element mit dem Inhalt vom 2. Element und umgekehrt
und weist den neuen Inhalt den Elementen entsprechend zu
@autor Oliver Deul
@param id1 = id des 1. Elementes
@param id2 = id des 2. Elementes

**/
function flipContent (id1, id2){
	var content1 = document.getElementById(id1).innerHTML;
	var content2 = document.getElementById(id2).innerHTML;
	document.getElementById(id1).innerHTML = content2;
	document.getElementById(id2).innerHTML = content1;
}

/**
Liest in das Popup den Inhalt des im opener Fenster definierten Inhalt ein.
@autor Oliver Deul
@param id_opener = id des Elementes im opener Fenster
@param id_popup = id des Elements im Popup
@param add_head = Angaben, die im Header stehen können (Javacripts, css, etc.)

**/
function getContent (id_opener,id_popup){
	var content = opener.document.getElementById(id_opener).innerHTML;
	document.getElementById(id_popup).innerHTML = content;
}

/**
Konfiguration der Detailimagesslideshow.
@autor Oliver Deul

**/
var oMyDiv;
var isScrolling;
var DX;
var DELAY;

function initPage() {
	oMyDiv = document.getElementById( "divname" );
	isScrolling = false;
	DX = 50; 
	DELAY = 150;
};

/**
Scrollt die Slideshow nach links.
@autor Oliver Deul
@param evt = Initialisierungsparameter

**/
function scroll2Left( evt ) {
	if ( evt ) {
		isScrolling = true;
	}
	if ( isScrolling ) {
		if ( oMyDiv.scrollLeft > 0 ) {
			oMyDiv.scrollLeft -= DX;
			window.setTimeout( "scroll2Left()", DELAY );
		};
	};
};

/**
Scrollt die Slideshow nach rechts.
@autor Oliver Deul
@param evt = Initialisierungsparameter

**/
function scroll2Right( evt )
{
	if ( evt ) {
		isScrolling = true;
	}
	if ( isScrolling )
	{		
		oMyDiv.scrollLeft += DX;
		window.setTimeout( "scroll2Right()", DELAY );
	};
};

/**
schaltet das Scrolling aus.
@autor Oliver Deul

**/
function stopScrolling()
{
	isScrolling = false;
}


/**
Speicherbarer Warenkorb - Daten aus dem Cookie holen
**/
function getStorableCartData(){

		requestAjax('/index.html?f=cart.add&mode=sc','GET',[],callbackStorableCart,true);
}
/*
Speicherbarer Warenkorb - Setzen der Anzeige Artikel im Warenkorb  
*/
function callbackStorableCart(data) {

	if (data != null && data != "0" && data != ""){
		values=data.split("|");
		if (values != null){
			if (values.length > 0)				
		    	if (document.getElementById("set_aiw") != null && values[0] != null){
		    		if (values[0].indexOf("fallback") == -1)
						document.getElementById("set_aiw").innerHTML = values[0];
					else
						document.getElementById("set_aiw").innerHTML = "0";
					}
			if (values.length > 1)
				if (document.getElementById("set_sav") != null)
					document.getElementById("set_sav").innerHTML = values[1];
				}
				if (window.location.href.indexOf('cart.wk') != -1){
					window.location.href=window.location.href;
				}
				
				if(  window.location.href.indexOf('cart.lwk') != -1) {
					//"Reload" bedeutet Anzeige des Warenkorbs :-)
					window.location.href = getURLBase() + '?p=cart.wk';
				}	
			} 
		if (window.location.href.indexOf('cart.wk') != -1){
			window.location.href=window.location.href;
		}
}


//100 milisekunden * suggestTime dann feuer
var suggestTime = 1;
var suggestCounter = 0;
var intervalObj = null;
var stopSuggestionAfterEnter = 0;
var dontRequestSuggestion = 0;
var maxCharforSuggestBox = 2;
var registerClickeventforBoxclosing = 0;
var BoxclosingonClick = 1;
var globalsuggestDiv = '';
var actualSerachphrase = '';
/*
Initalisiert die Suggestion
@textFieldId	id des Such-Inputfields
@width			breite des Vorschlagfelds
@height			höhe des Vorschlagfelds
@suggestDiv		id des Vorschlag-DIVs
@activeColor	Farbe wenn Div ausgewählt
@inactiveColor	Farbe wenn Div nicht ausgewählt
*/
function fireSuggestions(textFieldId,width,suggestDiv,activeColor,inactiveColor){

	// Globalisierung der Suggestbox
	globalsuggestDiv = suggestDiv;
	
	// aktuelle Eingabe speichern, wenn Zeichen im Suchfeld hinzugefügt oder entfernt werden:
	if (dontRequestSuggestion != 1) {
		actualSerachphrase = document.getElementById(textFieldId).value;
	}

	// registriere Clickevent zum Schliessen der Suggestbox
	if (registerClickeventforBoxclosing == 0){
		document.getElementById(suggestDiv).onmousedown = switchsuggestboxshow;
		document.onmouseup = closeSuggestorBoxEvent;
		registerClickeventforBoxclosing = 1;
	}

	suggestCounter = 0;

	//feuer pfeiltasten
	arrowKeyListener(textFieldId,suggestDiv,activeColor,inactiveColor);
		
	if(intervalObj == null)
		intervalObj = window.setInterval("suggestTimer('"+textFieldId+"','"+width+"','"+suggestDiv+"','"+activeColor+"','"+inactiveColor+"')", 100);
}

/*
Timer zählt nach Ablauf des Intervals suggestCounter +1 und feuert die Anfrage
wenn suggestTime < suggestCounter

@textFieldId	id des Such-Inputfields
@width			breite des Vorschlagfelds
@suggestDiv		id des Vorschlag-DIVs
@activeColor	Farbe wenn Div ausgewählt
@inactiveColor	Farbe wenn Div nicht ausgewählt
*/
function suggestTimer(textFieldId,width,suggestDiv,activeColor,inactiveColor){
	
	suggestCounter++;

	if(suggestCounter > suggestTime){
		suggestCounter = 0;
		window.clearInterval(intervalObj);
		intervalObj = null;
		//eventkeylistener aktivieren
		document.getElementById(textFieldId).onkeydown = keyEventListener;
		
		// Suggestlist erst nach bestimmter Anzahl (maxCharforSuggestBox) an Zeichen ein- bzw. ausblenden inkl. Searchrequest
		if (document.getElementById(textFieldId).value.length <= maxCharforSuggestBox) {
			document.getElementById(suggestDiv).innerHTML = "";
			dontRequestSuggestion = 1;
		}
		//vorschlagsliste anfordern
		if(dontRequestSuggestion == 0)
			getSuggestion(textFieldId,width,suggestDiv,activeColor,inactiveColor);	
	}
}

/*
wenn außerhalb der Suggestbox geklickt wurde, diese ausblenden:
Beim Event onmouseup wird geprüft, ob der onmousedown außerhalb der Suggestbox stattgefunden hat.
Falls ja, wird Box ausgeblendet, ansonsten geht es ganz normal weiter.
*/
function closeSuggestorBoxEvent() {
	if (document.getElementById(globalsuggestDiv).innerHTML != "" && BoxclosingonClick == 1) {
		document.getElementById(globalsuggestDiv).innerHTML = "";
	}
	BoxclosingonClick = 1;
}

/*
Hilfsfunktion zum Ausblenden der Suggestbox -> closeSuggestorBoxEvent()
*/
function switchsuggestboxshow() {
	BoxclosingonClick = 0;
}

/**
/**
Autosuggestion der Suche
führt einen Ajax-Request durch und zeigt das Vorschlagsfenster an

@textFieldId	id des Such-Inputfields
@width			breite des Vorschlagfelds
@height			höhe des Vorschlagfelds
@suggestDiv		id des Vorschlag-DIVs
@activeColor	Farbe wenn Div ausgewählt
@inactiveColor	Farbe wenn Div nicht ausgewählt
*/
function getSuggestion(textFieldId,width,suggestDiv,activeColor,inactiveColor){
	//return
	if(stopSuggestionAfterEnter)
		return;
	//hole input aus suchefeld
	searchPhrase = document.getElementById(textFieldId).value;
	
	//return wenn searchphrase leer
	if(searchPhrase.length == 0)
		document.getElementById(suggestDiv).innerHTML = "";
	
	// Leerzeichen mitnehmen (request::trustnoone umgehen)
	var s_searchPhrase = searchPhrase.replace(/ /g, "###");
	requestAjax('/index.html?f=search.getsuggestions&com='+encodeURIComponent(s_searchPhrase),
	'GET',[],
	function(data){getSuggestionBox(data,width,suggestDiv,searchPhrase,textFieldId,activeColor,inactiveColor);}
	,true);
}

/*
Erstelle die Dropdownbox

@width 			breite des divs
@suggestDiv 	id des Divs welches per innerHTML gefüllt werden soll
@searchPhrase 	Eingabetext des Users
@searchBox 		id des Sucheingabetextfelds
@activeColor		Farbe wenn Div ausgewählt
@inactiveColor	Farbe wenn Div nicht ausgewählt
*/
function getSuggestionBox(data,width,suggestDiv,searchPhrase,searchBox,activeColor,inactiveColor){
	 
	jsonData = JSON.parse(data);
	suggestJson = jsonData.a.rs;
	if(suggestJson.length > 0){
		
		//erstelle rexEx Object
		var regObj = new RegExp("^("+searchPhrase+")",'i');
		
		//erstelle autocomplet div
		//height:"+height+"px;
		html = "<div id=\""+suggestDiv+"inner\" style=\"position:absolute;z-index:550;margin-left:-1px;background-color:white;border:1px solid #cccccc;width:"+width+"px;overflow:auto;\">"+
		"<div style=\"text-align:right;margin-right:2px\" class=\"text09\">Suchvorschl&auml;ge<a href=\"\" onclick=\"document.getElementById('"+suggestDiv+"').innerHTML='';return false;\"></div>";
	
		
		//durchlaufe ergebnisliste aus json
		for(i = 0;i<suggestJson.length;i++){
			
			search = suggestJson[i];
			
			if(search.match(regObj)){
				//substring des textstrings
				txt = suggestJson[i].substring(0,searchPhrase.length);
				search = search.replace(txt,"<b>"+txt+"</b>");
			}
			html += "<div onclick=\"fillSearchBox('"+searchBox+"','"+suggestJson[i]+"','"+suggestDiv+"')\" style=\"width:97%;padding: 1px 1px 1px 5px;cursor:pointer\" id=\"sug"+i+"\""+
			" onmouseover=\"overOut('sug"+i+"','"+activeColor+"',1)\" onmouseout=\"overOut('sug"+i+"','"+inactiveColor+"',0)\""+
			"  title=\""+suggestJson[i]+"\">"+
			"<a style=\"display:block;text-align:left;\" onclick=\"fillSearchBox('"+searchBox+"','"+suggestJson[i]+"','"+suggestDiv+"')\">"+
			""+search+"</a></div>";
		}
		html +="</div>";
		
		//insert div
		document.getElementById(suggestDiv).innerHTML = html;
	}else{
		//insert div
		document.getElementById(suggestDiv).innerHTML = "";
	}
}

/*
Setze HintergrundFarbe der divs mit suchbegriffen

@idSuggest 	id des div
@color		Hintergrundfarbe
@inOut		true aktiv false inaktiv
*/
function overOut(idSuggest,color,inOut){
	
	if(inOut)
	{
		document.getElementById(idSuggest).style.backgroundColor = color;
	}else{
		document.getElementById(idSuggest).style.backgroundColor = color;
	}
}

var eventKeyCode = "";
/*
Textfeld der Suche füllen und gleich Suche abschicken

@box 			id des Textfelds
@searchSuggest	asugewählter Suchbegriff
@suggestDiv		id des großen Vorschlags-DIV
*/
function fillSearchBox(box,searchSuggest,suggestDiv){
	
	document.getElementById(box).value = searchSuggest;
	document.getElementById(suggestDiv).innerHTML = "";
	document.getElementById(box+"Button").click();
}

/*
KeyDownUp Listener um mit Pfeiltasten zu navigieren
*/
function arrowKeyListener(searchBoxObject,suggestDiv,activeColor,inactiveColor){
	
	active = 1;
	
	suggestObj = document.getElementById(suggestDiv+"inner");
	//event
	//wenn nicht leer
	if(eventKeyCode != "" && suggestObj != ""){
		divs = suggestObj.getElementsByTagName("div");
		
		//KeyCode down
		if(eventKeyCode == "down"){
			//durchlaufe divs
			for(i = 1; i < divs.length;i++){

				if(divs[i].style.zIndex == 1){
					active = i+1;
					divs[i].style.backgroundColor = inactiveColor;
					divs[i].style.zIndex = 0;
					break;
				}
			}
			//nun aktiviere nächstes div
			if(divs.length == active){
				active = 1;
				document.getElementById(searchBoxObject).value = actualSerachphrase;
			} else {
				divs[active].style.backgroundColor = activeColor;
				divs[active].style.zIndex = 1;
				document.getElementById(searchBoxObject).value = divs[active].title;
			}
		}
		
		//KeyCode up
		if(eventKeyCode == "up"){
			if (active == 1) {
				active = divs.length-1;
			}
			//durchlaufe divs
			for(i = (divs.length-1); i > 0;i--){
	
				if(divs[i].style.zIndex == 1){
					active = i-1;
					divs[i].style.zIndex = 0;
					divs[i].style.backgroundColor = inactiveColor;
					break;
				}
				
			}
			//nun aktiviere nächstes div
			if(active == 0){
				active = divs.length-1;
				document.getElementById(searchBoxObject).value = actualSerachphrase;
			} else {
				divs[active].style.backgroundColor = activeColor;
				divs[active].style.zIndex = 1;
				document.getElementById(searchBoxObject).value = divs[active].title;
			}
		}
		//KeyCode enter
		if(eventKeyCode == "enter"){
			//ausgewähltes div
			selectedDiv = "";
			//durchlaufe divs
			for(i = 1; i < divs.length;i++){
	
				if(divs[i].style.zIndex == 1){
					selectedDiv = divs[i];
					break;
				}
			}
			
			if(selectedDiv != ""){
				document.getElementById(searchBoxObject).value = selectedDiv.title;
				document.getElementById(searchBoxObject).style.zIndex = 1;
				document.getElementById(suggestDiv).innerHTML = "";
				eventKeyCode = "";
				stopSuggestionAfterEnter = 1;
			}
		}
	}
}

/*
Eventhandler Key up down
*/
function keyEventListener(ev){

	if(window.event){
		ev = window.event;
	}
	
	//up 38
	if(ev.keyCode == 38){
		eventKeyCode = "up";
		dontRequestSuggestion = 1;
	}
	//down 40
	else if(ev.keyCode == 40){
		eventKeyCode = "down";
		dontRequestSuggestion = 1;
	//enter 13
	}else if(ev.keyCode == 13){
		eventKeyCode = "enter";
	}else{
		eventKeyCode = "";
		dontRequestSuggestion = 0;
	}
}


/*
Fügt neue Bestellfelder dem Bestellformular hinzu

@param string field_length_small
@param string field_length_large
*/
function addOrderFields(field_length_small, field_length_large, host,new_fields) {
	// Anzahl der Erhöhungen
	var add_more = 5; 
	// Maximale Anzahl der Felder
	var max_fields = 30;
	// Anzahl der aktuellen Bestellfelder
	var act_count = parseInt(document.direct_order_form.elem_count.value);
	
	if (new_fields != '')add_more=new_fields;
	
	// Abbruch, wenn schon max_fields vorhanden sind
	if (act_count >= max_fields) {
		return;
	}
	// neue Felder anhängen
	for (i = act_count; i < (act_count+add_more); i++) {
		var neuerdiv = document.createElement("div");
		neuerdiv.setAttribute("id","cat_order_form_"+(i+1),0);
		neuerdiv.innerHTML = '\n'
			+	'<img onClick="delLine('+(i+1)+')" id="delete$counter}" src="/lay/wbde/i_delete.gif" style="cursor:pointer;margin-left:20px;" class="f_l" />\n'
			+	'<input onfocus="last'+(i+1)+' = this.value;" onkeypress="jumpto(\'orderNumber'+(i+1)+'\',event,'+new_fields+');" onkeyup="if (isNaN(this.value)) this.value = last'+(i+1)+'; last'+(i+1)+' = this.value;" onChange="getNewPrice('+(i+1)+');" class="input_size25 cat_order_form_small" id="orderValue'+(i+1)+'"  name="ba[]" maxlength="'+field_length_small+'" type="text" />\n'
			+	'<input onfocus="last'+(i+1)+' = this.value;" onkeypress="jumpto(\'orderValue'+(i+2)+'\',event,'+new_fields+');" onkeyup="if (isNaN(this.value)) this.value = last'+(i+1)+'; last'+(i+1)+' = this.value;" onChange="searchArticle(\''+host+'/?f=cart.ajaxsearcharticle\','+(i+1)+');" class="input_size60 cat_order_form_large"  id="orderNumber'+(i+1)+'"  name="b[]" maxlength="'+field_length_large+'"type="text" />\n'
			+	'<div id="cat_order_title_'+(i+1)+'" class="f_l cat_order_title"></div>\n'
			+	'<div id="cat_order_price_'+(i+1)+'" class="f_l cat_order_price"></div>\n'
			+	'<div id="cat_order_single_price_'+(i+1)+'" style="display:none;"></div>\n'
			+	'<img id="loader'+(i+1)+'" src="/lay/wbde/loader.gif" style="margin-left:3px;display:none;" class="f_l" />\n';
		var position = document.getElementById("cat_order_form_"+i);
		
		insertAfter(neuerdiv, position);
		document.getElementById("cat_order_form_"+(i+1)).className = "f_l v_top_small textleft";
		document.getElementById("cat_order_form_"+(i+1)).style.width = "100%";
		if ((act_count + add_more) == max_fields) {
			document.getElementById('add_more_fields').style.display = 'none';
		}
	}
	
	// Anzahl der Bestellfelder anpassen
	document.direct_order_form.elem_count.value = act_count + add_more;
}

/**
 * Fängt die Enter-Taste ab und springt dafür in das nächte Feld.
 * Falls alle Felder voll, füge per Enter neue Felder hinzu.
 * Beim letztem Feld (OrderNumber30), klicke auf den WK-Button.
 * 
 * WICHTIG: Damit diese Funktion korrekt funktionieren kann,
 * muss im Formular-Tag die Enter-Taste deaktiviert werden:
 * onkeypress="if (window.event) kc = window.event.keyCode; else kc = event.which; if (kc == 13) { return false; }"
 * @param jump
 * @param event
 * @return
 */
function jumpto(jump,event,newfields) {

	var kc = '';
	kc = event.keyCode ? event.keyCode : event.which ? event.which : event.charCode;
	if (kc == 13) { 
		//if (field.name=="button") document.direct_order_form.submit();
		try {
			
					document.getElementById(jump).focus();
		} catch(err) {
		
			if (kc == 13) {
				try {
				
					document.getElementById('orderNumber30').focus();
					document.getElementById('orderbutton').click();
				} catch(err) {
				    var newnumber='orderNumber'+(parseInt(document.direct_order_form.elem_count.value)+1);
					addOrderFields(2, 8, '',newfields);
					document.getElementById(newnumber).focus();
					
				}
			}
		}
	}
}

	/**
	 * Katalog-Bestellformular. Befüllt automatisch die Liste mit dem zugehörigem Titel des Artikels und dem Preis.
	 * @param orderURL
	 * @param fieldId
	 * @return
	 */
	function searchArticle(orderURL,fieldId,loadnext) {
		//Initialisiere Variable
		var orderNumber	= document.getElementById("orderNumber"+fieldId);
		var orderValue	= document.getElementById("orderValue"+fieldId);
		var orderTitle	= document.getElementById("cat_order_title_"+fieldId);
		var orderButton = document.getElementById("orderbutton");
		
		//Initial alle Felder löschen, bis auf die OrderNumber
		document.getElementById("cat_order_single_price_"+fieldId).innerHTML = '';
		document.getElementById("cat_order_price_"+fieldId).innerHTML = '';
		document.getElementById("cat_order_title_"+fieldId).innerHTML = '';
		
		//Falls keine Bestellnummer eingegeben ist, oder Anzahl auf 0 gestellt wurde, lösche die ganze Zeile
		if(orderNumber.value == '' || orderValue <= 0 || orderNumber.value.length == 0) {
			orderNumber.className = 'input_size60 cat_order_form_large';
			document.getElementById("errorbox").style.display="none";
			delLine(fieldId);
		}
		
		// Frage Artikelnummer erst dann ab, sobald mindestens 6 Ziffern eingegeben wurden
		if(orderNumber.value.length >= 6) {
			startSearchArticleAjax(orderURL,orderNumber.value,fieldId,loadnext);
		} else if(orderNumber.value.length > 0 && orderNumber.value.length < 6) {
			document.getElementById("errorbox").style.display="block";
			orderNumber.className = 'input_size60 cat_order_form_large input_highlight';
		}
	}
	/**
	 * Starte Ajax-Abfrage der Methode mit übergebenener Bestellnummer. 
	 * @param url
	 * @param orderNumber
	 * @param fieldId
	 * @return
	 */
	function startSearchArticleAjax(url,orderNumber,fieldId,loadnext) {
		
		var orderTitle = document.getElementById("cat_order_title_"+fieldId);
		var orderLoader = document.getElementById("loader"+fieldId);
		
		//Starte Methode
		requestAjax(url+"&b="+orderNumber,"GET",[],
		function(data){callbackSearchArticle(data,fieldId,loadnext);},
		true);
		//Ladenachricht, und Ladegrafik anzeigen
		orderTitle.innerHTML='<p style="font-style:italic;color:#9ea1a8;">Eingabe wird gepr&uuml;ft</p>';
		orderLoader.style.display="block";
	}
	/**
	 * Callback-Funktion zur Katalogbestell-Seite
	 * @param fieldId
	 * @return
	 */
	function callbackSearchArticle(data,fieldId,loadnext) {
		//Wenn Seite fertig geladen hat, und ein Ergebnis vorliegt
		if (data != '0'){
			var orderTitle	= document.getElementById("cat_order_title_"+fieldId);
			var orderLoader = document.getElementById("loader"+fieldId);
			var orderNumber	= document.getElementById("orderNumber"+fieldId);
			var errorBox	= document.getElementById("errorbox");
			
			//Überführe den erhaltenen Text in ein Objekt (JSON)
			result = new Function("return "+data)();
			
			//Falls ein Titel gefunden wurde, setze alle Informationen in die Felder
			if(result.long_title) {
				orderTitle = document.getElementById("cat_order_title_"+fieldId);
				orderTitle.innerHTML=result.long_title_truncate;
				
				orderValue = document.getElementById("orderValue"+fieldId);
				if(orderValue.value == '' || orderValue.value < 0) {
					orderValue.value = 1;
				}
				
				//Berechne Preis mittels der übergebenen Anzahl
				orderPrice = document.getElementById("cat_order_price_"+fieldId);
				var newPrice = orderValue.value * result.prices.current.value;
				newPrice = newPrice / 100;
				if(result.currency == "EUR") {
					orderPrice.innerHTML = newPrice.toFixed(2)+" "+result.currency;
				} else {
					orderPrice.innerHTML = result.currency+" "+newPrice.toFixed(2);
				}
				document.getElementById("cat_order_single_currency").innerHTML = result.currency;
				
				//Für spätere Berechnungen wird der Einzelpreis als INT benötigt.
				orderSinglePrice = document.getElementById("cat_order_single_price_"+fieldId);
				orderSinglePrice.innerHTML = result.prices.current.value;
				
				orderNumber.className = 'input_size60 cat_order_form_large';
				errorBox.style.display="none";
			//Falls kein titel gefunden wurde, gibt Fehlermeldung aus
			} else {
				orderTitle.innerHTML='<p style="font-style:italic;color:#9ea1a8;">Artikel nicht (mehr) verf&uuml;gbar</p>';
				orderNumber.className = 'input_size60 cat_order_form_large input_highlight';
				errorBox.style.display="block";
			}
			//Sobald alles fertig ist, blende Ladegrafik wieder aus.
			orderLoader.style.display="none";
			if(loadnext == 1)
				searchArticle('/?f=catalog_order.ajaxsearcharticle',2,0);
		}
	}
	/**
	 * Berechnet den Preis neu, falls sich die Anzahl geändert hat
	 * @param fieldId
	 * @return
	 */
	function getNewPrice(fieldId) {
		var orderValue		= document.getElementById("orderValue"+fieldId);
		var orderNumber		= document.getElementById("orderNumber"+fieldId);
		var oldSinglePrice	= document.getElementById("cat_order_single_price_"+fieldId);
		var price			= document.getElementById("cat_order_price_"+fieldId);
		var newPrice;
		var currency		= document.getElementById("cat_order_single_currency").innerHTML;
		
		if(!orderValue.value) {
			orderValue = 1;
		}
		
		if(orderValue.value <= 0) {
			delLine(fieldId);
		}
				
		if(price.innerHTML != '') {
			newPrice = (parseInt(orderValue.value, 10) * parseInt(oldSinglePrice.innerHTML)) / 100;
			if(currency == "EUR") {
				price.innerHTML = newPrice.toFixed(2)+" "+currency;
			} else {
				price.innerHTML = currency+" "+newPrice.toFixed(2);
			}
		}
	}
	
	/**
	 * Überprüft, ob
	 * 1. Gesamtes Formular leer (return false)
	 * 2. Gesamtes Formular mit fehlerhaften Artikelnummern gefüllt (return false)
	 * 3. Gemischt: Einige richtige Nummern, einige false => lösche Fehlerhafte und führe Submit durch
	 * 4. Nur richtige nummer => Führe Submit durch
	 * @return
	 */
	function checkValid() {
		
		var errorBox	= document.getElementById("errorbox");
		var hasEntry = 0;
		for (fieldNo = 1; fieldNo <=30; fieldNo++) {
			if(document.getElementById("orderNumber"+fieldNo)) {

				var orderNumber = document.getElementById("orderNumber"+fieldNo);
				
				if(orderNumber.value && orderNumber.className.search(/input_highlight/) == -1) {
					hasEntry++;
				}
				
				if(orderNumber.className.search(/input_highlight/) != -1) {
					delLine(fieldNo);
				}
			}
		}
		
		if(hasEntry > 0) {
			errorBox.style.display="none";
			return true;
		} else {
			errorBox.style.display="block";
			return false;
		}
	}
	/**
	 * Löscht alle Daten einer Zeile
	 * @param fieldId
	 * @return
	 */
	function delLine(fieldId) {
		document.getElementById("orderValue"+fieldId).value = '';
		document.getElementById("orderNumber"+fieldId).value = '';
		document.getElementById("cat_order_single_price_"+fieldId).innerHTML = '';
		document.getElementById("cat_order_price_"+fieldId).innerHTML = '';
		document.getElementById("cat_order_title_"+fieldId).innerHTML = '';
		document.getElementById("orderNumber"+fieldId).className = 'input_size60 cat_order_form_large';
		document.getElementById("errorbox").style.display="none";
	}
	

/*
Fügt ein Element (newElement) hinter einanderes Element (targetElement) hinzu

@param string newElement
@param string targetElement
*/
function insertAfter(newElement, targetElement) {
    var parent = targetElement.parentNode;
    if (parent.lastChild == targetElement) {
        parent.appendChild(newElement);
    } else {
        parent.insertBefore(newElement, targetElement.nextSibling);
    }
}


/*
zählt die Prämiendivs
*/
function countPraemienImgDivs () {
	i = 1;
	/* zählt die ids des <div id="PraemienBildNUMMER"> solange nicht null zurückliefert wird */
	while (document.getElementById("PraemienBild" + i) != null) {
		i++;
	};
	/* letzte PraemienBildDiv war nicht existent also 1 abziehen */
	i = i - 1;
	return i;
}

/* Höhe des Prämienbildes zurückliefern - i ist Nummer des Bildes */
function getPraemienImgHeight ( i ) {
	 return document.getElementById("PraemienBild" + i).getElementsByTagName("img")[0].height;
}


/* höchstes Bild finden und höhe zurückliefern - i ist Anzahl der gesamten PrämienbilderDivs */
function getPraemienImgMaxHeight ( i ) {
	
	PraemienImgMaxHeight = 0;
	
	for (var x = 1; x-1 < i; x++) {
			if ( getPraemienImgHeight(x) > PraemienImgMaxHeight ) {
				PraemienImgMaxHeight = getPraemienImgHeight(x);
				};
		};

	return PraemienImgMaxHeight;
}


/* Setzte Höhe aller Divs der Prämienbilder auf eine höhe - i ist Anzahl der gesamten PrämienbilderDivs - MaxHeight ist höchste Höhe */
function setPraemienImgDivHeight (i) {

	PraemienImgMaxHeight = getPraemienImgMaxHeight ( i );
	for (var x = 1; x-1 < i; x++) {
		document.getElementById("PraemienBild" + x).style.height =  PraemienImgMaxHeight + "px";
	 	document.getElementById("PraemienBild" + x).style.width = "170px";
		
		/* Prämienbild mit margin-top versehen um kleiner Bilder mittig auszurichten  img margintop = round(maximgheigh - imgheight) / 2  */
		document.getElementById("PraemienBild" + x).getElementsByTagName("img")[0].style.marginTop = Math.round((PraemienImgMaxHeight - document.getElementById("PraemienBild" + x).getElementsByTagName("img")[0].height) / 2) + "px";

	 };
	 
};

/*
Postet Daten und holt entsprechend Formfehler und BusinessID ab

@param string url
@param string formobj
@param string additionalparam
@param string posi (Position der SSL-Box, oben (1) oder unten (2))
*/
function postdata(url, formobj, additionalparam, posi) {

	var formdata = getdatafromform(formobj);
	var urlbase = getURLBase();
	var posturl = urlbase + url + additionalparam;
	var params = "ajax=1" + formdata;

	requestAjax(posturl,"POST",params,
	function(data) {
		var jsonData = JSON.parse(data);
		// Falls keine Fehler auftreten zum nächsten Step weiterleiten:
		if ((!jsonData.form_errors || jsonData.form_errors == '') && (!jsonData.field_errors || jsonData.field_errors == '')) {
			// URL nur umschiessen, wenn man von der WK-Seite kommt
			var ajaxsslswitch = '';
			if (formobj.elements["ajaxsslswitch"]) {
				if (document.getElementById("ssl"+posi).checked && urlbase.substring(0,5) == "http:") {
					urlbase = urlbase.replace("http","https");
				} else if (!document.getElementById("ssl"+posi).checked && urlbase.substring(0,6) == "https:") {
					urlbase = urlbase.replace("https","http");
				}
				ajaxsslswitch = '&ajaxsslswitch=on';
			}
			var geturl = urlbase + '?p=' + jsonData.page + ajaxsslswitch
			window.location.href = geturl;
		
		// Ansonsten Fehler aufbereiten und ausgeben:
		} else {
			if (jsonData.mode == 'accountlogin') {
				var div_block_start = '';
				var div_block_end = ''
				var err_begin_style = '<p>';
				var err_end_style = '</p>';
				var err_block = 'ajaxlogin';
				window.scrollTo(0, 0);
			} else{
				var div_block_start = '';
				var div_block_end = ''
				var err_begin_style = '<p>';
				var err_end_style = '</p>';
				var err_block = 'ajaxerror';
				window.scrollTo(0, 0);
			}
			var FormErrJson = jsonData.form_errors;
			var FieldErrJson = jsonData.field_errors;
			var html = '';
			// durchlaufe Ergebnislisten aus JSON, erst Formularfehler, dann Feldfehler:

			if (FieldErrJson != null && FieldErrJson != '') {
				html += div_block_start;
				for(i = 0; i < FieldErrJson.length; i++){
					html += err_begin_style + FieldErrJson[i].message + err_end_style;
				}
				html += div_block_end;
			}
			
			if (FormErrJson != null && FormErrJson != '') {
				html += div_block_start;
				for(i = 0; i < FormErrJson.length; i++){
					html += err_begin_style + FormErrJson[i].message + err_end_style;
				}
				html += div_block_end;
			}
			
			if (document.getElementById('ajaxlogin') != null){
			document.getElementById('ajaxlogin').innerHTML = '';
			document.getElementById('ajaxlogin').style.display='none';
			}
			if (document.getElementById('ajaxerror') != null){
			document.getElementById('ajaxerror').innerHTML = '';
			document.getElementById('ajaxerror').style.display='none';
			}
			if (document.getElementById('errgap') != null){
				document.getElementById('errgap').style.display='none';
			}
			if (document.getElementById('err_zusatz') != null ){
					document.getElementById('err_zusatz').style.display='none';	
			}
		
			if (document.getElementById(err_block) != null){
					document.getElementById(err_block).innerHTML = html;
				document.getElementById(err_block).style.display='block';
			}
			if (document.getElementById('errgap') != null ){
				document.getElementById('errgap').style.display='block';
			}
			
			if (document.getElementById('err_zusatz') != null  && err_block == 'ajaxlogin'){
					document.getElementById('err_zusatz').style.display='block';	
			}
			
			setErrorHighlighting(formobj,FieldErrJson,jsonData.highlighting,jsonData.special_case);
		}
	},
	true);
}

/*
wandelt alle Formulardaten in eine Query-Format um

@param object formobj
*/
function getdatafromform(formobj) {
	var queryString = "";
	// durchlaufe alle Formularelemente
	for(var n=0; n < formobj.elements.length; n++) {
		var formName  = formobj.elements[n].name; 
		var formValue = formobj.elements[n].value;
		// bei Radiobuttons nur das Checked mitnehmen:
		if (formobj.elements[n].type == 'radio') {
			if (formobj.elements[n].checked) {
				queryString += "&"+formName+"="+formValue;
			}
		// bei Checkboxen nur das Checked mitnehmen:
		} else if (formobj.elements[n].type == 'checkbox') {
			if (formobj.elements[n].checked) {
				queryString += "&"+formName+"="+formValue;
			}
		} else {
			queryString += "&"+formName+"="+encodeURIComponent(formValue);
		}
	}
	return queryString;
}

/*
Für Error-Hightlighting

@param object formobj
*/
function setErrorHighlighting(formobj,fielderrors,highlighting,specialcase) {
	var from = '';
	var classtype = '';
	var highlight_class = 'input_highlight';
	var f_l = 'f_l';
	 for(i = 0; i < formobj.elements.length; i++){
	    if ( formobj.elements[i].name == 'form_id'){
			 form='form['+formobj.elements[i].value+']';
			 break;
		}		
	}
		
	
  if (document.forms != null){
		for (i=0;i<document.forms.length;i++){
			for(j=0;j<document.forms[i].length;j++){
		   	 	if (document.forms[i].elements[j].type=='text' || document.forms[i].elements[j].type=='password' || document.forms[i].elements[j].type=='select-one' ){
		   	 	 	
		   	 	 	classtype=document.getElementById(document.forms[i].elements[j].id).className;
		   	 	 	if (classtype == null) classtype='';
		   	 	 	
		   	 	 	if (classtype != '' && (classtype.indexOf(highlight_class) != -1 || classtype.indexOf(f_l) != -1)){
		   	 	 		classtype=classtype.replace(f_l,'').replace('  ',' ');
		   	 			classtype=classtype.replace(highlight_class,'').replace('  ',' ');
		   	 			classtype=document.getElementById(document.forms[i].elements[j].id).className=classtype;
		   	 		}
		        	
		        	if (document.getElementById(document.forms[i].elements[j].id+'_gif') != null)
		        		document.getElementById(document.forms[i].elements[j].id+'_gif').className='display_none_gif';
				}
			}
		}
	}
	
	if (highlighting == true){
	     if (fielderrors != null){
			for(i = 0; i < fielderrors.length; i++){
		         if (document.getElementsByName(form+"["+fielderrors[i].field_name+"]") != null){
		        	document.getElementsByName(form+"["+fielderrors[i].field_name+"]")[0].className
		        		 =document.getElementsByName(form+"["+fielderrors[i].field_name+"]")[0].className+' '+highlight_class;
		        	if (document.getElementById(document.getElementsByName(form+"["+fielderrors[i].field_name+"]")[0].id+'_gif') != null){
		        	 	document.getElementById(document.getElementsByName(form+"["+fielderrors[i].field_name+"]")[0].id+'_gif').className='display_gif';
		        	 	document.getElementsByName(form+"["+fielderrors[i].field_name+"]")[0].className
		        		 =document.getElementsByName(form+"["+fielderrors[i].field_name+"]")[0].className+' f_l';
		        	 }
		     	}
		     }
		   }  
		
		
		if (specialcase == null) specialcase='';
		
		if (specialcase != '' ){
		 		   
			for(i = 0; i < specialcase.length; i++){
			         if (document.getElementsByName(form+"["+specialcase[i].field+"]") != null){
			        	document.getElementsByName(form+"["+specialcase[i].field+"]")[0].className
			        		 =document.getElementsByName(form+"["+specialcase[i].field+"]")[0].className+' '+highlight_class;
			       
				        if (document.getElementById(document.getElementsByName(form+"["+specialcase[i].field+"]")[0].id+'_gif') != null){
			        	 	document.getElementById(document.getElementsByName(form+"["+specialcase[i].field+"]")[0].id+'_gif').className='display_gif';
			        	 	if ( specialcase[i].gifstate != true){
			        	 		document.getElementsByName(form+"["+specialcase[i].field+"]")[0].className
				        		 =document.getElementsByName(form+"["+specialcase[i].field+"]")[0].className+' f_l';
			        	 	}
			     		}
			     	}
		     }
	     }
 	}
}

/*
Gibt URL ohne Querystring zurück
*/
function getURLBase() {
	var completeURL = window.location.href;
	var questionmarkpos = completeURL.indexOf('?');
	if (questionmarkpos > 0) {
		var URLBase = completeURL.substring(0,questionmarkpos);
	} else {
		var URLBase = completeURL;
	}
	return URLBase
}

Tracking = function(){

		function setTrackingsOrderId(article,qed,source){
			if (source != ''){
				setTrackingInformation(article,source);
				if (cm_tracking_enabled)
					cmCreateConversionEventTag(article, 1,'Suche_Product_Bestellnummer', 1 );
			}
			if (qed != true){
				searchTrackLogging(article,qed);
			}
			
		}
		
		function setSearchTrackings(article,qed,type,tracking,linktype,source){
		    
			var source=source;
			var categorie='';
			var information='';
			if (linktype == 'wklink'){
				if(tracking == '1'){
				    
				    if(type == 'article') this.source='se.wk';
				    if (source == 'seeker') this.source = 'se.wksek';
				    if (source == 'crossselling') this.source  = 'se.wkxsel';
					information=setTrackingInformation(article,this.source);
				}
				
			   if (cm_tracking_enabled){
			        categorie='Suche_Direct_Cart';
			        if (source == 'seeker') categorie='StoebernSuche_Direct_Cart';
			        if (source == 'crossselling') categorie = 'Suche_Xsell_Direct_Cart';
			        if (existTrackingSourceArticle(information,article,this.source) == true){
						cmCreateConversionEventTag(article, 1,categorie, 1 );
					}
			   }
			}else if (linktype == 'detail'){
			    if(qed != '')	searchTrackLogging(article,qed);
				if(tracking == '1'){
				    if(type == 'article') this.source='se.art';
				    if (source == 'seeker') this.source = 'se.sek';
				    if (source == 'crossselling') this.source  = 'se.xsel';
				  
					setTrackingInformation(article,this.source);
				}
			}
			
		}
		
		//Aufruf Function-Controller für Search Loganalyzer
		function searchTrackLogging(id,qed){
			 requestAjax('/index.html?f=search.track&qed='+qed+'&rand='+Math.random(),'GET',[],null,true);
		}
		
		
		/**
		Setzt ein Cookie mit der Quelle f�r Tracking
		*/
		
		function setTrackingInformation(article,source) {
			var expires = new Date();
			var information = '';
			information = getCookie('tracking_source');	
			information=setTrackingArticle(information,article, source);
		     
			expires = new Date(expires.getTime() + (5400000)); 
			document.cookie = 'tracking_source='+escape(information)+';expires='+expires.toGMTString()+';path=/;';
			return information;
		}
		
		
		/**
		Tracking-Informationen im Cookie erg�nzen
		*/
		function setTrackingArticle(information,article, source){
			var skip = false;
			var content;
			var listtype;
			var element;
			var listelements;
			var count=0;
			var listexists = false;
			var sourcetype = source.split('.');
			
			if (information != ''){
				if (existTrackingArticle(information,article,source) == true)
					return information;
			}
			
			//Cookie leer
			if (information == ''){
				information=source+'_'+article;
				return information;
			}
			
			//Verschiedene Listen
			content = information.split('~-~');
			
			information='';
			
			count=0;
			//Anzahl ermitteln
			for (var i=0; i<content.length;i++){
				listtype=content[i].split('_');
		
			 	if (listtype[0].indexOf(source) != -1){
			 		element=listtype[1].split('~');
			 		count=count+element.length;
			 	}
			}
			
			//Anzahl 10 pro Trackingart �berschritten
			if (count >= 10){
				for (var i=0; i<content.length;i++){
					listtype=content[i].split('_');
				 	if (listtype[0].indexOf(source) != -1){
				 		element=listtype[1].split('~');
				 		element.shift();
		
				 	
					 	listelements='';
				   		for (var j=0; j<element.length;j++){
				   		   if (listelements == '')
				   		   	 listelements=element[j];
				   		   else
				   		   	 listelements=listelements+'~'+element[j];
				   		} 
					 	content[i]=listtype[0]+'_'+listelements;	   	
				 	break;
				 	}
				 }
			}
			
			count=0;
			//Ermitteln, welche Liste zu erg�nzen ist
			for (var i=0; i<content.length;i++){
			   listtype=content[i].split('_');
			   
			   if (listtype[0]==source){
			   		element=listtype[1].split('~');
		
			   		listelements='';
			   		for (var j=count; j<element.length;j++){
			   		   if (listelements == '')
			   		   	 listelements=element[j];
			   		   else
			   		   	 listelements=listelements+'~'+element[j];
			   		} 	
			   		listelements=listelements+'~'+article;	
			   		content[i]=listtype[0]+'_'+listelements;
			   		listexists = true;
			   }  	 
			}
			
			
			for (var i=0; i<content.length;i++){
				if (information == '')
					information=content[i];
				else
					information=information+'~-~'+content[i];
			}
			
			// Liste noch nicht vorhanden
			if (listexists == false)
				information=information+'~-~'+source+'_'+article;
			
				
			return information;
		}
		
		/**
		Prüfen, ob der Tracking-Artikel bereits existiert
		*/
		function existTrackingArticle(information,article,source){
		
			var content = information.split('~-~');
			var element = null;
			var sourcetype = source.split('.');
			
			for (var i=0; i<content.length;i++){
			 	listtype=content[i].split('_');
		
			 	if (listtype[0].indexOf(sourcetype[0]+'.') != -1){
			 		element=listtype[1].split('~');
			 		for (var j=0; j<element.length; j++)
			 			if (element[j] == article)
			 				return true;
			 	}
			}
			return false;
		}
		
		/**
		Prüfen, ob der Tracking-Artikel bereits existiert
		*/
		function existTrackingSourceArticle(information,article,source){

			var content = '';
			var element = null;
			var sourcetype = '';
			
			if (source != undefined && information != undefined && information != null){
			    content=information.split('~-~');
				sourcetype=source.split('.');
			
				for (var i=0; i<content.length;i++){
				 	listtype=content[i].split('_');
			        if (listtype[0] == source){
				 		element=listtype[1].split('~');
				 		for (var j=0; j<element.length; j++)
				 			if (element[j] == article)
				 				return true;
				 	}
				}
			}
			return false;
		}
		
		
		return {
			setTrackingsOrderId : setTrackingsOrderId,
			setSearchTrackings : setSearchTrackings,
			searchTrackLogging : searchTrackLogging,
			setTrackingInformation : setTrackingInformation,
			setTrackingArticle : setTrackingArticle,
			existTrackingArticle : existTrackingArticle,
			existTrackingSourceArticle : existTrackingSourceArticle
			};

	}();

/**
Cookie auslesen
*/
function getCookie(c_name)
{
if (document.cookie.length>0)
  {
  c_start=document.cookie.indexOf(c_name + "=");
  if (c_start!=-1)
    {
    c_start=c_start + c_name.length+1;
    c_end=document.cookie.indexOf(";",c_start);
    if (c_end==-1) c_end=document.cookie.length;
    return unescape(document.cookie.substring(c_start,c_end));
    }
  }
return "";
}

/* Google Book Seaerch */
/**
Parameter
isbn
callback
lädt das js von google wird per extJS
*/
function loadGoogleBookSearch(){
	var params = extJSData.getParamsForMethod("loadGoogleBookSearch");
	jQuery('body').append("<script src=\"http://books.google.com/books?jscmd=viewapi&bibkeys="+params["isbn"]+"&callback="+params["callback"]+"\" type=\"text/javascript\"/>");
}

function ProcessGBSBookInfo(booksInfo) {
	var params = extJSData.getParamsForMethod("loadGoogleBookSearch");
	for (isbn in booksInfo) {

		var bookInfo = booksInfo[isbn];
		if (bookInfo && (bookInfo.preview == "full" || bookInfo.preview == "partial")) {

			//kamenew erstelle blättern
			var blaetternDiv = $(document.createElement("div"));
			blaetternDiv.attr("id","blaettern");
			//blaetternDiv.css("display","block");
			var blaetternContent = params.href+'<img src="'+params.blaetternimage+'" style="z-index:3;margin-left:25px;position:absolute;"/>'+
				'</a><img src="'+params.transimg+'" height="12" width="1"/>';
			blaetternDiv.html(blaetternContent);
			
			//erstelle preview button
			var previewDiv = $(document.createElement("div"));
			previewDiv.attr("id","googlePreview");
			previewDiv.css("display","block");
			var previewContent = params.href+'<img src="'+params.previewimage+'" alt="Google Preview" border="0"/></a>';
			previewDiv.html(previewContent);
			//normales produktbild
			var produktbild = $('#produktbild');
			//produktbild
			if(produktbild.html() != null){
				var detailpopup = $('#detailpopup');
				detailpopup.before(blaetternDiv);
				detailpopup.after(previewDiv);
				detailpopup.bind("click",function(event){
					windowOpen('/1/pprod.googlebook/google-book-search.html?isbn='+isbn,'Google','600','760','10','10','no','no','no','no');
					event.preventDefault();
				});
			}else{
			//libreka
				var libreka = $('#libreka');
				if(libreka.html() != null){
					libreka.html('');
					libreka.html(params.detailimg);
					libreka.before(blaetternDiv);
					libreka.after(previewDiv);
					libreka.bind("click",function(event){
						windowOpen('/1/pprod.googlebook/google-book-search.html?isbn='+isbn,'Google','600','760','10','10','no','no','no','no');
						event.preventDefault();
					});
				}
			}
		}
	}
}
//Speichern der Zahlart PayPal und anfordern der Url für Saferpay
function getPayPal(){
    requestAjax('/index.html?f=cart.controller&step=paypal','GET',[],showPayPal,true);
}

function showPayPal(data){
	if (data!= null)
		window.location.href=data;
}

// beide Häckchen bei AGB's synchron halten
function setWKB(pos) {
	if (pos == 2)
		if (document.getElementById("f_7_agb2").checked == true) {
			document.getElementById("f_7_agb").checked = true;
		}
		else {
			document.getElementById("f_7_agb").checked = false;
		}
	else if (pos == 1) {
		if (document.getElementById("f_7_agb").checked == true) {
			document.getElementById("f_7_agb2").checked = true;
		}
		else {
			document.getElementById("f_7_agb2").checked = false;
		}
	}
}

/*******************************
** add-to-cart-layer (featuring jQuery)
*******************************/
var hTimer;
function atcOpenClose(b,r,cat) {
	//Timer zum schließen des Layers zurücksetzen, damit er bei erneutem Klick wieder auf 3000ms gesetzt werden kann.
	if(hTimer != null)
		window.clearTimeout(hTimer);
	//Suche Artikelinformation und lege ihn in den Warenkorb
	 requestAjax("?f=cart.ajaxsearcharticle&mode=atclayer&b="+b+"&cat="+cat,'GET',[],function(data){callBackAtcOpenClose(data,b,r);},true);
}

function callBackAtcOpenClose(data,b,r) {
	//Initialisierung von benötigten Variablen
	var atcBox = $("#wkbginner");
	var warenkorb = $("#warenkorb");
	var view = $(window);
	var viewTop;
	var originalPosition = 85;

	
	//Ermittle aktuelle Position des Fensters/Tabs/Scrollleiste
	viewTop = view.scrollTop();
	
	//Überprüfe initial, ob das Fenster sich schon im gescrolltem Zustand befindet
	//und ändere je nachdem die Klasse des Layers
	if ((viewTop > originalPosition)) {
		atcBox.css('top', viewTop-10 + "px");
		// Schalte die Klassen um (absolut -> fixiert)
		atcBox
			.removeClass( "addToCartFading-absolute" )
			.addClass( "addToCartFading-fixed" )
		;
		$('#addToCartFading').addClass('atc-scrolling');
		
	}
	
	view.bind(
		"scroll resize",
		function(){
			//Aktuelle Position muss bei jedem Klick, Scrollen oder Größenveränderung des Fensters aktualisiert werden
			viewTop = view.scrollTop();
			if(viewTop > originalPosition)
				atcBox.css('top', viewTop-10 + "px");
			// Prüfe ob gescrollt wurde und nicht schon die fixierte Box angezeigt wird
			if ((viewTop > originalPosition) && !atcBox.is( ".addToCartFading-fixed" )) {
				
				// Schalte die Klassen um (absolut -> fixiert)
				atcBox
					.removeClass( "addToCartFading-absolute" )
					.addClass( "addToCartFading-fixed" )
				;
				$('#addToCartFading').addClass('atc-scrolling');

			// Überprüfe ob zurückgescrollt wurde
			} else if ((viewTop <= originalPosition) && atcBox.is( ".addToCartFading-fixed" )) {
				// Schalte die Klassen um (fixiert -> absolut)
				atcBox
					.removeClass( "addToCartFading-fixed" )
					.addClass( "addToCartFading-absolute" )
				;
				$('#addToCartFading').removeClass('atc-scrolling');
				$('.addToCartFading-absolute').css('top', "0px");
			}
		}
	);

	//Wenn Request (ermittlung des Artikels) fertig (Status = 200), und ein Ergebnis vorliegt
	//überschreibe die Werte in der Ausgabebox mit dem neuem Artikel.
	if (data != '0') {
		var result = new Function("return "+data)();
		if (result.error == null) {
			atcInit(result);
			
			//Öffne bzw. Schließe add-to-cart-layer

			//Wenn Layer nicht sichtbar ist, DIV öffnen und für 3000ms geöffnet halten. Anschließend wieder schließen
			if(atcBox.is(':hidden')) {
				atcBox.slideDown(600);
			}
			
			hTimer = window.setTimeout(function(){
				closeWkLayer(atcBox,r);
			}, 3000);
			
		/*	//Wenn Maus über dem DIV, lösche den Timer und lasse das DIV geöffnet
			$("#warenkorb").mouseover(function(){
				if(hTimer != null) {
					window.clearTimeout(hTimer);
					hTimer = null;
				}
			}).mouseleave(function() {
				//Wenn Maus aus dem geöffnetem Layer fährt, schließe es nach 1000ms
				if(atcBox.is(":visible")) {
					hTimer = window.setTimeout(function(){
						closeWkLayer(atcBox);
					}, 1000);
				}
			});
		*/	
			
			$("#wkclose").click(function() {
				closeWkLayer(atcBox,r);
			});
			
			//Falls Layer geöffnet ist und irgendwo in das Fenster geklickt wird, schließe es sofort.
			var wkbuttonclicked = false;
			if(atcBox.is(":visible")) {
				$('.wkbutton').click(function(){
					wkbuttonclicked = true;
				});
				$(document).click(function(e){
					if (e.button == 0 && !wkbuttonclicked) { // Nur wenn linke Maustaste gedrückt
						closeWkLayer(atcBox,r);
						
						if(hTimer != null) {
							window.clearTimeout(hTimer);
							hTimer = null;
						}
						wkbuttonclicked = false;
					}
				});
			}
			
			//Führe Coremetrics-Tracking aus.
			if(cm_tracking_enabled==true) {
				new Function (result.cm_tracking)();
			}
			
		} else {
			//showErrorBoxScrolling();
		}
		
	}
}

function atcInit(result) {
	$('.atcArticlePrice').html(result.prices.current.format);
	$('.atcArticleTitle').html(result.long_title);
	$('#atcArticleImage').attr('alt',result.long_title);
	wkValue = $('#set_aiw');
	wkValue.html(parseInt(wkValue.html())+1);
	wkValue2 = $('#set_aiw2');
	wkValue2.html(parseInt(wkValue2.html())+1);
	var myImg = "/media"+result.product_img;
	$("#atcArticleImage").attr('src',myImg);
	$("#wkborder").css('display','none');
	$("#warenkorb").css('border','2px solid #DC0204');
	$("#wkbg").css('background','transparent url(/lay/wbde/x_glas.png)');
	$("#wklinks").css('display','none');
	$("#wkclose").css('display','block');
	$("#wkl_top_tiny").css('display','block');
}

function closeWkLayer(atcBox,r) {
	atcBox.slideUp(600,function() {
		$("#wkborder").css('display','block');
		$("#warenkorb").css('border','2px solid #fff');
		$("#wkbg").css('background','none');
		$("#wkclose").css('display','none');
		$("#wklinks").css('display','block');
		$("#wkl_top_tiny").css('display','none');
		if( window.location.href.indexOf('cart.wk') != -1 ||  window.location.href.indexOf('cart.lwk') != -1) {
			//"Reload" bedeutet Anzeige des Warenkorbs :-)
			window.location.href = getURLBase() + '?p=cart.wk';
		}
	});
}

function showErrorBoxScrolling() {
	errorbox = $("#errorboxscrolling");
	errorbox.slideDown("slow", function(){
		hTimer = window.setTimeout(function(){
			errorbox.slideUp("slow");
			}, 3000);
	});
}

/**
 * 
 * Handelt beim onlcick-Event welche Socialbookmark Box gehighlighted wird und
 * ruft entsprechendes individuelles Popup auf
 * 
 * 
*/

var recommend_form = null;
function  socialnetworks(network) {

	if(recommend_form==null) {
		recommend_form = jQuery('#recommend_box').html();
	}
   	 // recommend_message
	var message = null;
	var popup_width= null;
	var popup_height= null;
	var url='';
		
		 // deaktiviere alle links
		 $("#email").removeClass('reclink_active').addClass('reclink');
		 $("#facebook").removeClass('reclink_active').addClass('reclink');
		 $("#twitter").removeClass('reclink_active').addClass('reclink');
		 $("#studivz").removeClass('reclink_active').addClass('reclink');
		 $("#yahoo").removeClass('reclink_active').addClass('reclink');
		 $("#misterwong").removeClass('reclink_active').addClass('reclink');
		 $("#google").removeClass('reclink_active').addClass('reclink');
		 $("#digg").removeClass('reclink_active').addClass('reclink');
		 $("#myspace").removeClass('reclink_active').addClass('reclink');
		 $("#delicious").removeClass('reclink_active').addClass('reclink');
		 
		 
	  	switch (network) {
	  	  case "email":
	  	    jQuery('#recommend_box').show();
	  	    $("#email").addClass('reclink_active');
	  	    message = 'E-Mail';
	  	    jQuery('#networkservice').text(message);
	  	  	return;
	  	  	break;
		  case "facebook":
		    url=$("#"+network).attr('href');
		    $("#facebook").addClass('reclink_active');
		     message = 'facebook';
		     popup_width = 790;
		     popup_height = 320;
		    break;
		  case "twitter":
		      url=$("#"+network).attr('href');
		      $("#twitter").addClass('reclink_active');
		      message = 'twitter';
		      popup_width = 780;
		      popup_height = 465;
		    break;
		  case "studivz":
		     url=$("#"+network).attr('href');
		     $("#studivz").addClass('reclink_active');
		     message = 'studiVZ';
		     popup_width = 870;
		     popup_height = 720;
		    break;
		 case "yahoo":
		     url=$("#"+network).attr('href');
		     $("#yahoo").addClass('reclink_active');
		     message = 'Yahoo!';
		     popup_width = 888;
		     popup_height = 550;
		    break;
		  case "misterwong":
		     url=$("#"+network).attr('href');
		     $("#misterwong").addClass('reclink_active');
		      message = 'Mister Wong';
		      popup_width = 1030;
		      popup_height = 760;
		    break;
		  case "google":
			    url=$("#"+network).attr('href');
			    $("#google").addClass('reclink_active');
			     message = 'Google';
			     popup_width = 920;
			     popup_height = 460;
			    break;
		  case "digg":
			    url=$("#"+network).attr('href');
			    $("#digg").addClass('reclink_active');
			     message = 'Digg';
			     popup_width = 965;
			     popup_height = 450;
			    break;
		  case "myspace":
			    url=$("#"+network).attr('href');
			    $("#myspace").addClass('reclink_active');
			     message = 'MySpace';
			     popup_width = 420;
			     popup_height = 450;
			    break;
		  case "delicious":
			    url=$("#"+network).attr('href');
			    $("#delicious").addClass('reclink_active');
			     message = 'Delicious';
			     popup_width = 550;
			     popup_height = 550;
			    break;
		}
		jQuery('#networkservice').text(message);
		jQuery('#recommend_box').hide();
		windowOpenCenter(url,network,popup_width,popup_height,"yes");
}

/*
* blendet die Tooltip Box für die Socialbookmarks ein
*/

function openSocialBookInfoLayer(element)
{
	
	jQuery('#tooltip_box').css('top', (jQuery(element).offset().top + 14));
	jQuery('#tooltip_box').css('margin-left', 100);
	jQuery('#tooltip_box').show(); 

}

/*
* blendet die Tooltip Box für die Socialbookmarks aus
*/

function hideSocialBookInfoLayer() {
	jQuery('#tooltip_box').hide();

}

//## Layer Funktionen ##

function closeLayer(layerID) {
	$('#'+layerID).fadeOut('slow',function(){$('#'+layerID).html('');$('#'+layerID).css('display','none');});
	if ($("#glas_bg").length > 0){
		$('#glas_bg').fadeOut('slow',function(){$('#glas_bg').css('width',0);$('#glas_bg').css('height',0);});
	}
}

function writeLayer(layerID, content, layl, layt, layto) {
	$('#'+layerID).html(content); //Das Layer mit dem Inhalt füllen
	if(layt == "center") { //Vertikal zentrieren
		$('#'+layerID).css('top',getPositionCenter($('#'+layerID).height())); 
	}
	if(layl == "center") { //Horizonal zentrieren
		$('#'+layerID).css('left','50%');
		var marginleft = -($('#'+layerID).width()/2);
		$('#'+layerID).css('margin-left',marginleft+'px');
	}
	
	//Den gläserne/abgedunkelte Hintergrund erstellen und Größe an Fenstergröße anpassen
	if ($("#glas_bg").length > 0){
		var width = $(document).width();
		$('#glas_bg').css('width',width);
		$('#glas_bg').css('left',-((width-960)/2));
		$('#glas_bg').css('height',$(document).height());
		
		$(window).bind("resize",function(){
			var width = $(document).width();
			$('#glas_bg').css('width',width);
			$('#glas_bg').css('left',-((width-960)/2));
			});
		
		//Hintergrund + Layer einblenden
		$('#glas_bg').fadeIn('fast',function(){$('#'+layerID).fadeIn('fast');});
	} else {
		$('#'+layerID).fadeIn('fast');
	}
	//Falls Timeout angegeben, blende Layer nach definierter Zeit wieder aus
	if(layto != null && layto > 0) {
		timer = window.setTimeout(function(){closeLayer(layerID);},layto);
	}
}

function getPositionCenter(elementHeight) {
	return $(window).height()/2 - elementHeight/2;;
}

function switchCouponForm() {
	$("#coupon_link").fadeOut(250,function() {$("#coupon_form").fadeIn(300);});
	$("#coupon_block").animate({width:"335px",height:"45px"},300);
	$("#coupon_block").css("cursor","auto");
	
}
function showError(i) {
	$("#CouponError"+i).delay(500).slideDown("slow");
}
//Beim Laden der Seite soll das Coupon-Feld eingeblendet werden.
//Während des A/B-Tests sollen nur JS-User das Formular sehen können.
$(document).ready(function () {
	$("#coupon_block").css("display","block");
	$("#coupon").css("display","block");
	$("#coupon_block").click(function() {switchCouponForm();});
	$("#coupon_submit").click(function() {showError(1); return false;});
	$("#coupon_submit2").click(function() {showError(2); return false;});
});

/*******************************
** handling externer JS-Aufrufe(load am ende der Datei)
*******************************/
if (!this.extJSData){
	extJSData = {
		//datenpool speichert methoden und parameter object
		dataQueue : new Object(),
		debug : false,
		
		//füge eine methode und deren parameter zum Daten-Pool hinzu
		addExternalMethod: function(functionName,params){
			//if(extJSData.debug)console.log("add: "+functionName);
			extJSData.dataQueue[functionName]=params;
		},
		//lade am ende der Seite die zuvor geadded methoden
		loadExternalMethods: function(){
			$(document).ready(function() {
				for (var functionName in extJSData.dataQueue) {
	  				$.globalEval(functionName+"();");
	  				//if(extJSData.debug)console.log("loaded "+functionName+"();");
				}
			});
			
		},
		//liefert für jede methode die zuvor geadded wurde das parameter object
		getParamsForMethod: function(key){
			return extJSData.dataQueue[key];
		}
	}
}

extJSData.loadExternalMethods();