/*
@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
 });
}



/**********************
** Globale AJAX-Funktion.
** @return req
***********************/
function getAjaxReq() {
	var req;
	if( window.XMLHttpRequest ) {
	      return req = new XMLHttpRequest();
	    } else if( window.ActiveXObject ) {
	      return req = new ActiveXObject( "Microsoft.XMLHTTP" );
	    } else {
	      return null;
	    }
}

/* <![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 false;
}

/*
Katalogbestellformular

übernehme Daten des kleinen Katalogbestellformulars wenn auf weitere Produkte geklickt wurde
@param modifier
*/
function getOrderNumbers(modifier){

	//artikel 1
	if(document.getElementById( 'f1'+modifier ).value.match(/[0-9]+/) && document.getElementById( 'f2'+modifier ).value.match(/[0-9]+/)){
		document.getElementById( 'cat'+modifier ).href += '&f1='+document.getElementById( 'f1'+modifier ).value+'&f2='+document.getElementById( 'f2'+modifier ).value;
	}

	//artikel 2
	if(document.getElementById( 'f3'+modifier ).value.match(/[0-9]+/) && document.getElementById( 'f4'+modifier ).value.match(/[0-9]+/)){
		document.getElementById( 'cat'+modifier ).href += '&f3='+document.getElementById( 'f3'+modifier ).value+'&f4='+document.getElementById( 'f4'+modifier ).value;
	}

}

/*
Counter für Linkcatalog
*/

function textlimit(Obj,maxcount,counter)
{
    function c_len(){
        if(this.value.length > this.maxcount && this.maxcount != 0)
            return false;
        update_count(this);
    }

    function upd_count(){    update_count(this);}

    function update_count(elem){
        if(elem.counter != null){
            cnt = getObj(elem.counter);
            cnt.innerHTML = elem.value.length
    }}

    function check(){
        if (this.value.length  > this.maxcount && this.maxcount != 0)
            this.value = this.value.substr(0,this.maxcount);
        update_count(this);
    }

    Obj.counter   = counter;      Obj.maxcount  = maxcount;
    Obj.onkeypress= c_len;        Obj.onkeydown = upd_count;
    Obj.onkeyup   = check;        Obj.onfocus   = check;
    Obj.onblur    = check;
    Obj.onmouseup = check;

    update_count(Obj);

/*************** OTHER USED / NEEDED FUNCTIONS ***************************/
function getObj( ref ) { if( document.getElementById( ref ) != null )//W3C/
return document.getElementById(ref); else if(document.all[ref]!=null)//IE5/
return document.all[ ref ]; else if( document.layers[ ref ] != null )//NN4/
return document.layers[ref]; else alert('Object "'+ref+'" not Found')//ERR/
}/************************************************************************/
}

/*
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;
				}
			}
			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;
			}
		}
	}
}


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;
}



/*
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");
	}
	var iZeichen = max - obj.value.length;

    $("#"+leftId).html(iZeichen >= 0 ? iZeichen : 0);
}


/**
Speicherbarer Warenkorb - Daten aus dem Cookie holen
**/
function getStorableCartData(){
	requestAjax('/index.html?f=cart.add&mode=sc','GET',[],callbackStorableCart,true,null,null);
}

/*
 Speicherbarer Warenkorb - Setzen der Anzeige Artikel im Warenkorb
 */
function callbackStorableCart(data) {
	data = $.trim(data);
	var cart_size=0;
	if (data) {

		//console.log('callbackSK if', '--' + data + '--');

		var 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];
				}
			}

			cart_size = values[0];
		}
	} else {
		//console.log('callbackSK else');
		document.getElementById("set_aiw").innerHTML = "0";
	}
	if (((window.location.href.indexOf('p=cart.') != -1 
		|| window.location.href.indexOf('f=cart.') != -1)
		&& window.location.href.indexOf('order.save') == -1)
		|| (window.location.href.indexOf('order.save') != -1 && cart_size >= 1)){
		window.location.href=window.location.href = getURLBase() + '?p=cart.wk';
	}
}

//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 = "";

	if( window.XMLHttpRequest) {
		req = new XMLHttpRequest();
	} else if( window.ActiveXObject ) {
		req = new ActiveXObject( "Microsoft.XMLHTTP" );
	} else {
		return;
	}

	// Leerzeichen mitnehmen (request::trustnoone umgehen)
	var s_searchPhrase = searchPhrase.replace(/ /g, "###");

	req.open( "GET", '/index.html?f=search.getsuggestions&q='+encodeURIComponent(s_searchPhrase), true );
	//hole daten
	req.onreadystatechange = function(){getSuggestionBox(width,suggestDiv,searchPhrase,textFieldId,activeColor,inactiveColor);};
	req.send( null );
}

/*
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(width,suggestDiv,searchPhrase,searchBox,activeColor,inactiveColor){

	if( 4 == req.readyState ) {

	 	if (200 == req.status){
			jsonData = JSON.parse(req.responseText);
			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;top:52px;left:144px;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=\"text08\">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 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 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;
	}
}


/*
 * Holt die formatierte SuchURL
 */
function getSearchURL(formObject){

	if( window.XMLHttpRequest) {
		req = new XMLHttpRequest();
	} else if( window.ActiveXObject ) {
		req = new ActiveXObject( "Microsoft.XMLHTTP" );
	}

	if (req){
		var uri = '/index.html?f=search.getsearchurl&q='+encodeURIComponent(formObject.q.value);

		try {
			if (formObject.tt.value != ""){
				uri += '&tt=' + encodeURIComponent(formObject.tt.value)
			}
		}
		catch (e){}
		try {
			if (formObject.fc.value != ""){
				uri += '&fc=' + encodeURIComponent(formObject.fc.value)
			}
		}
		catch (e){}
		try {
			if (formObject.qt.value != ""){
				uri += '&qt=' + encodeURIComponent(formObject.qt.value)
			}
		} catch (e){}
		try {
			if (formObject.ts.value != ""){
				uri += '&ts=' + encodeURIComponent(formObject.ts.value)
			}
		}
		catch (e){}
		req.open( "GET", uri, true );
		//hole daten
		req.onreadystatechange = function(){
			if	( req.readyState == 4 ){
				if (req.status == 200){
					if (req.responseText != ""){
						window.location.href=req.responseText;
					} else {
						formObject.q.value = "";
						formObject.submit();
					}
				} else {
					formObject.submit();
				}
			}
		}
		req.send( null );
	} else {
		formObject.submit();
	}
}

function generateSortSearchURL(url, sortvalue){
	if (url.match(/[&?]st=/)){
		url = url.replace(/st=[0-9]*/,"st="+sortvalue);
	} else if (url.match(/\?/)) {
		url += "&st="+sortvalue
	} else {
		url += "?st="+sortvalue
	}
	return url;
}


/*******************************
** Tracking
*******************************/
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,jurl){

		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);
			}
			// wenn eine URL übergeben wurde (z.B. Interaktionsflaechen), dann weiterleiten
			if (jurl !== undefined && jurl != 0) {
				window.location.href = jurl;
			}
		}
	}

	//Aufruf Function-Controller für Search Loganalyzer
	function searchTrackLogging(id,qed){
		 requestAjax('/index.html?f=search.track&qed='+qed+'&rand='+Math.random(),'GET',[],null,false);
	}


	/**
	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
		};

}();

/*******************************
** add-to-cart-layer (featuring jQuery)
*******************************/
var hTimer;
function atcOpenClose(b,r,cat) {
	var req = getAjaxReq();
	//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
	req.open( "GET", "?f=cart.ajaxsearcharticle&mode=atclayer&b="+b+"&cat="+cat, true );
	req.onreadystatechange = function(){callBackAtcOpenClose(req,b,r);};
	req.send( null );

}

function callBackAtcOpenClose(req,b,r) {

	//Initialisierung von benötigten Variablen
	var atcBox = $("#wkbginner");
	var warenkorb = $(".warenkorb");
	var view = $(window);
	var viewTop;
	var originalPosition = 0;


	//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)) {
//		warenkorb.css('top', viewTop + "px");
		// Schalte die Klassen um (absolut -> fixiert)
		warenkorb
			.removeClass( "addToCartFading-absolute" )
			.addClass( "addToCartFading-fixed" )
		;

	}

	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)
				warenkorb.css('top', viewTop + "px");
			// Prüfe ob gescrollt wurde und nicht schon die fixierte Box angezeigt wird
			if ((viewTop > originalPosition) && !warenkorb.is( ".addToCartFading-fixed" )) {

				// Schalte die Klassen um (absolut -> fixiert)
				warenkorb
					.removeClass( "addToCartFading-absolute" )
					.addClass( "addToCartFading-fixed" )
				;

			// Überprüfe ob zurückgescrollt wurde
			} else if ((viewTop <= originalPosition) && warenkorb.is( ".addToCartFading-fixed" )) {
				// Schalte die Klassen um (fixiert -> absolut)
				warenkorb
					.removeClass( "addToCartFading-fixed" )
					.addClass( "addToCartFading-absolute" )
				;
				$('.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( 4 == req.readyState ) {
		if (200 == req.status) {
			if (req.responseText != '0') {

				var result = JSON.parse(req.responseText);
				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')) {
						if (viewTop > originalPosition) {
							warenkorb.animate({"top": viewTop}, "slow");
						}
						atcBox.slideDown(600);
					}

					hTimer = window.setTimeout(function(){
						closeWkLayer(atcBox,warenkorb,view,r);
					}, 3000);

					$("#wkclose").click(function() {
						closeWkLayer(atcBox,warenkorb,view,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,warenkorb,view,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)();
					}
				}
			}
		}
	}
}

function atcInit(result) {
	// falls kein Autor übergeben wurde, Feld ausschalten (Feld muss in der Funktion closeWkLayer wieder aktiviert werden)
	if (result.persons == undefined || result.persons.author == undefined || result.persons.author.members == undefined) {
		$('.atcArticleAuthor').css('display', 'none');
	} else {
		$('.atcArticleAuthor').html(result.persons.author.members);
	}
	$('.atcArticleTitle').html(result.long_title);
	$('.atcArticlePrice').html(result.prices.current.format);
	$('#atcArticleImage').attr('alt',result.long_title);
	wkValue = $('#set_aiw');
	wkValue.html(parseInt(wkValue.html())+1);
	var myImg = "/media";
	if (result.product_img == null) {
		myImg += '/ab/4/dummy-product-image-jo.gif';
	} else {
		myImg += result.product_img;
	}
	$("#atcArticleImage").attr('src',myImg);
	$("#wklinks").css('display','none');
	$(".wk_additional_text").css('display','none');
	$("#wkclose").css('display','block');
}

function closeWkLayer(atcBox,warenkorb,view,r) {
	atcBox.slideUp(600,function() {
		$("#wkclose").css('display','none');
		$("#wklinks").css('display','block');
		$(".wk_additional_text").css('display','block');
		$('.atcArticleAuthor').css('display', 'block');
		if( window.location.href.indexOf('cart.wk') != -1 ||  window.location.href.indexOf('cart.lwk') != -1
			|| window.location.href.indexOf('cart.change') != -1) {
			//"Reload" bedeutet Anzeige des Warenkorbs :-)
			window.location.href = getURLBase() + '?p=cart.wk';
		}
	});
	warenkorb.animate({"top": "0"}, "slow");
	view.unbind("scroll resize");
}

function highlight_rating($count) {

	// deaktiviere alle links
	 $("#rate_5").removeClass('radiobox_aktiv').addClass('radiobox');
	 $("#rate_4").removeClass('radiobox_aktiv').addClass('radiobox');
	 $("#rate_3").removeClass('radiobox_aktiv').addClass('radiobox');
	 $("#rate_2").removeClass('radiobox_aktiv').addClass('radiobox');
	 $("#rate_1").removeClass('radiobox_aktiv').addClass('radiobox');

	  $("#rate_"+$count).addClass('radiobox_aktiv');

}

var recommend_form = null;
function  socialnetworks(network,wb_url,wb_title) {

	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');
		 $("#delicious").removeClass('reclink_active').addClass('reclink');
		 $("#myspace").removeClass('reclink_active').addClass('reclink');
		 $("#studivz").removeClass('reclink_active').addClass('reclink');
		 $("#google").removeClass('reclink_active').addClass('reclink');
		 $("#facebook").removeClass('reclink_active').addClass('reclink');
		 $("#twitter").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 "google":
				    url=$("#"+network).attr('href');
				    $("#google").addClass('reclink_active');
				    message = 'Google';
				    popup_width = 920;
				    popup_height = 460;
				    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;
		}

		windowOpenCenter(url,network,popup_width,popup_height,"yes");
}

function  socialnetworks_page (network,wb_url,wb_title) {

	var popup_width= null;
	var popup_height= null;
	var url='';

	  	switch (network) {
		  case "facebook":
			    	url=$("#"+network).attr('href');
			    	popup_width = 790;
			    	popup_height = 320;
			    	break;
		  case "twitter":
			      	url=$("#"+network).attr('href');
			      	popup_width = 780;
			      	popup_height = 465;
			    	break;
		  case "google":
				    url=$("#"+network).attr('href');
				    popup_width = 920;
				    popup_height = 460;
				    break;
		  case "myspace":
				    url=$("#"+network).attr('href');
				    popup_width = 420;
				    popup_height = 450;
				    break;
		  case "delicious":
			    	url=$("#"+network).attr('href');
			     	popup_width = 550;
			     	popup_height = 550;
			    	break;
		  case "studivz":
			     	url=$("#"+network).attr('href');
			     	popup_width = 870;
			     	popup_height = 720;
		    	 	break;
		  case "yahoo":
				    url=$("#"+network).attr('href');
			     	popup_width = 888;
			     	popup_height = 550;
		    		break;
		  case "digg":
			   	 	url=$("#"+network).attr('href');
			    	popup_width = 965;
			    	popup_height = 450;
			   		break;
		  case "myspace":
			    	url=$("#"+network).attr('href');
			     	popup_width = 420;
			     	popup_height = 450;
			    	break;
		  case "misterwong":
		    	 	url=$("#"+network).attr('href');
		      		popup_width = 1030;
		     		popup_height = 760;
		    		break;
		}

		windowOpenCenter(url,network,popup_width,popup_height,"yes");
}

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;
}

/*******************************
** 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();


/*
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);
			var formErrors = jsonData.form_errors;
			var fieldErrors = jsonData.field_errors;
			var specialCase = jsonData.special_case;
			var hasHighlighting = jsonData.highlighting;

			var errorContainerSelector = '.form_error_container';


			// Falls keine Fehler auftreten zum nächsten Step weiterleiten:
			if ((!formErrors || formErrors == '') && (!fieldErrors || fieldErrors == '')) {
				// 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';
				}
				window.location.href = urlbase + '?p=' + jsonData.page + ajaxsslswitch;

			// Ansonsten Fehler aufbereiten und ausgeben:
			} else {
				var openTags = 	'<div class="error_box">';
				var closeTags = '</div>';
				var snippet = '';
				var container;

				//erstmal alte Feldfehlerhighlightings entfernen
				$(document.forms).find('*').removeClass('input_highlight');
				$(document.forms).find(errorContainerSelector).html('');


				// durchlaufe Ergebnislisten aus JSON - Feldfehler:
				if (fieldErrors && fieldErrors != '') {
					for(var i = 0; i < fieldErrors.length; i++){
						snippet += '<p>' + fieldErrors[i].message + '</p>';

						//Field Highlighting
						if(hasHighlighting){
							highlightField(formobj, fieldErrors[i].field_name);
						}
					}
				}


				// durchlaufe Ergebnislisten aus JSON - Formularfehler:
				if (formErrors && formErrors != '') {
					for(i = 0; i < formErrors.length; i++){
						snippet += '<p>' + formErrors[i].message + '</p>';
					}

				}


				if (snippet != '') {
					container = $(formobj).find(errorContainerSelector);
					snippet = openTags+snippet;
					snippet += closeTags;
					container.html(snippet);
				}else{
					container.html('');
				}

				//specialcases
				if(specialCase){
					for(i=0; i < specialCase.length; i++){
						if(hasHighlighting){
							highlightField(formobj, specialCase[i].field);
						}
					}
				}
			}
		},
		true,
		null,
		null
	);
}

function showErrors(container, content){
	if(container){
		if($.browser.msie && $.browser.version.charAt(0) == '7'){
			container.html(content);
		} else{
			container.slideUp(300, function(){
				$(this).html(content).slideDown(600);
			});
		}
	}
}

/**
 * Searches an inputfield with jquery and sets the highlighting class
 *
 * @param form formobject where the field can be found
 * @param fieldData data object containing name (not id!) and message
 */
function highlightField(form, fieldName){
	var selector = '[name*="[' + fieldName + ']"]';
	$(form).find(selector).addClass('input_highlight');
}



/**
* wandelt alle Formulardaten in eine Query-Format um
* @param 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;
}

/*
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
}

/*
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($('#elem_count').val());
	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++) {
		$('#cat_order_form_'+i).after(
				'\n\n'
			+	'\n<div class="c_l"></div>'
			+	'<div id="cat_order_form_'+(i+1)+'" class="cat_order_form">'
			+	'<img onClick="delLine('+(i+1)+')" id="delete$counter}" src="/lay/jode/x.gif" class="delete_icon b_loeschen-blau" alt="Artikel loeschen" />\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 anz" 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 number"  id="orderNumber'+(i+1)+'"  name="b[]" maxlength="'+field_length_large+'"type="text" />\n'
			+	'<div id="cat_order_title_'+(i+1)+'" class="input title"></div>\n'
			+	'<div id="cat_order_price_'+(i+1)+'" class="input price"></div>\n'
			+	'<div id="cat_order_single_price_'+(i+1)+'" style="display:none;"></div>\n'
			+	'<img id="loader'+(i+1)+'" src="/lay/jolay/loader.gif" class="loader" />\n'
			+	'</div>');

		if ((act_count + add_more) == max_fields) {
			$('#add_more_fields').hide();
		}
	}

	// Anzahl der Bestellfelder anpassen
	$('#elem_count').attr('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(field,count,event,newfields) {
	var kc = '';
	var jump=field+count;
	var elem_count=parseInt($('#elem_count').val());
	kc = event.keyCode ? event.keyCode : event.which ? event.which : event.charCode;
	if (kc == 13) {
	   // alert(jump);
	   if (count <= elem_count){
	   	$('#'+jump).focus();
	   }else{
	       	if (elem_count < 30){
		   		var newnumber='orderNumber'+(parseInt($('#elem_count').val())+1);
				addOrderFields(2, 8, '',newfields);
				$('#'+newnumber).focus();
			}else{
				$('#orderNumber30').focus();
				$('#orderbutton').click();
			}
	   }
	}
}

	/**
	 * 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 lennum = $("#orderNumber"+fieldId).val().length;
		var errorBox = $("#errorbox");
		var orderNumber = $("#orderNumber"+fieldId);

		//Initial alle Felder löschen, bis auf die OrderNumber
		$("#cat_order_single_price_"+fieldId).html('');
		$("#cat_order_price_"+fieldId).html('');
		$("#cat_order_title_"+fieldId).html('');

		//Falls keine Bestellnummer eingegeben ist, oder Anzahl auf 0 gestellt wurde, lösche die ganze Zeile
		if(orderNumber.attr('value') == '' ||
			($("#orderValue"+fieldId).attr('value') <= 0 && $("#orderValue"+fieldId).attr('value') != ''  )
			|| lennum == 0) {
			orderNumber.attr('class', 'input number');
			errorBox.hide();
			delLine(fieldId);
		}

		// Frage Artikelnummer erst dann ab, sobald mindestens 6 Ziffern eingegeben wurden
		if(lennum >= 6) {
			startSearchArticleAjax(orderURL,orderNumber.val(),fieldId,loadnext);
		} else if(lennum > 0 && lennum < 6) {
			errorBox.show();
			orderNumber.attr('class','number 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)
			var result = JSON.parse(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 number';
				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 = 'number 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		= $("#orderValue"+fieldId);
		var oldSinglePrice	= $("#cat_order_single_price_"+fieldId);
		var price			= $("#cat_order_price_"+fieldId);
		var currency		= $("#cat_order_single_currency").html();

		if(orderValue.val() <= 0 || orderValue.val() == '') {
			delLine(fieldId);
		}

		if(price.html() != '') {
			var newPrice = (parseInt(orderValue.val(), 10) * parseInt(oldSinglePrice.html())) / 100;
			if(currency == "EUR") {
				price.html(newPrice.toFixed(2)+" "+currency);
			} else {
				price.html(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	= $("#errorbox");
		var hasEntry = 0;
		var act_count = parseInt($('#elem_count').attr('value'));

		for (fieldNo = 1; fieldNo <=act_count; fieldNo++) {
			if($("#orderNumber"+fieldNo)) {
				var orderNumber = $("#orderNumber"+fieldNo);
					if(orderNumber.attr('value') != '' && orderNumber.attr('value') != 0
						 && orderNumber.attr('class').indexOf('input_highlight') == -1) {
						hasEntry++;
					}
					if(orderNumber.attr('class').indexOf('input_highlight') != -1) {
						delLine(fieldNo);
					}
			}
		}
		if(hasEntry > 0) {
			errorBox.hide();
			return true;
		} else {
			errorBox.show();
			return false;
		}
	}
	/**
	 * Löscht alle Daten einer Zeile
	 * @param fieldId
	 * @return
	 */
	function delLine(fieldId) {
		$("#orderValue"+fieldId).val(function(i, v){return ''});
		$("#orderNumber"+fieldId).val(function(i, v){return ''});
		$("#cat_order_single_price_"+fieldId).html('');
		$("#cat_order_price_"+fieldId).html('');
		$("#cat_order_title_"+fieldId).html('');
		$("#orderNumber"+fieldId).attr('class', 'input number');
	}


/*
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 ($('#'+id ).attr('value') == value){
		$('#'+id ).attr('value','');
		$('#'+id ).css('color',textstyle);
		return;
	}

	if ($('#'+id ).attr('value') == ''){
		$('#'+id ).attr('value',value);
		$('#'+id ).css('color',textstyle);
		return;
	}
}

// beide Häckchen bei AGB's synchron halten
function setWKB(pos) {
	if (pos == 2)
		if (document.getElementById("f_bestellprozess_ueberblick_agb2").checked == true) {
			document.getElementById("f_bestellprozess_ueberblick_agb").checked = true;
		}
		else {
			document.getElementById("f_bestellprozess_ueberblick_agb").checked = false;
		}
	else if (pos == 1) {
		if (document.getElementById("f_bestellprozess_ueberblick_agb").checked == true) {
			document.getElementById("f_bestellprozess_ueberblick_agb2").checked = true;
		}
		else {
			document.getElementById("f_bestellprozess_ueberblick_agb2").checked = false;
		}
	}
}

/*
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
*/

function inputFieldsChangeValue(textstyle, inputFields, maxLength){
	var finished = 0;
	if(finished == 1){

		return;
	}
	for(var i = 0; i < inputFields.length; i++){
			$("#"+inputFields[i]).val('');
			$("#"+inputFields[i]).css({	'color': textstyle,
										'font-style': 'normal' });
	}

	finished = 1;
}

