/*
@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();
	win=window.open(url,name,'"toolbar='+toolbar+',width='+width+',height='+height+',top='+top+',left='+left+',directories=no,status='+status+',scrollbars='+scrollbars+',resize='+resize+'"');
	return false;
}

/*
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 prueft, ob Text der Vorbelegung entspricht --> Text entfernen
sonstige Eingaben nicht loeschen
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);
	}
}

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

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

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

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

		if( window.XMLHttpRequest ) {
          req = new XMLHttpRequest();
        } else if( window.ActiveXObject ) {
          req = new ActiveXObject( "Microsoft.XMLHTTP" );
        } else {
          return;
        }
        
        
	    req.open( "GET", '/index.html?f=cart.add&mode=sc', true );
	    req.onreadystatechange = callbackStorableCart;
	    req.send( null );

}
/*
Speicherbarer Warenkorb - Setzen der Anzeige Artikel im Warenkorb  
*/
function callbackStorableCart() {
	 if( 4 == req.readyState ) 
		if (200 == req.status){
			if (req.responseText != null && req.responseText != "0" && req.responseText != ""){
				values=req.responseText.split("|");
				if (values != null){
					if (values.length > 0)				
				    	if (document.getElementById("set_aiw") != null)
							document.getElementById("set_aiw").innerHTML = values[0];
					if (values.length > 1)
						if (document.getElementById("set_sav") != null)
							document.getElementById("set_sav").innerHTML = values[1];
				}
				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 && values[0] >= 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;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=\"text06\">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 class=\"text18\" style=\"width:96%;padding: 1px 1px 1px 5px;cursor:pointer\" id=\"sug"+i+"\""+
					"onmouseover=\"overOut('sug"+i+"','"+activeColor+"',1)\" onmouseout=\"overOut('sug"+i+"','"+inactiveColor+"',0)\""+
					" onclick=\"fillSearchBox('"+searchBox+"','"+suggestJson[i]+"','"+suggestDiv+"')\" title=\""+suggestJson[i]+"\">"+
					""+search+"</div>";
				}
				html +="<div class='v_top_small'></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;
	}
}

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

/*
Prueffunktion fuer 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 �berpruefen

	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;
	// Pruefsumme 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 fuer die 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;
}
	
	/*
	 * 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 = 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
			};
	}();
	

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


/*******************************
** add-to-cart-layer (featuring jQuery)
 * Funktion wird nur ansatzweise eingeführt, damit das Artikel-in-den-WK-legen über
 * Ajax bei der Aktion "aktuellen Katalog mitbestellen" bei cart.wk möglich ist
 * Funktionalität kann analog den anderen Shops bei Kidoh implementiert werden.
 * Aber die Checkbox im WK beachten und testen (Katalog mitbestellen)!
*******************************/
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(){redirect(req,b,r);};
	req.send( null );
}

function redirect(req,b,r) {
	if( 4 == req.readyState ) {
		if (200 == req.status) {
			if (req.responseText != '0') {
				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';
				}
			}
		}
	}
}

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

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

//Aktiviert alle Checkboxen einer Seite
function aktivateCheckbox(){
	for (i=0;i<document.forms.length;i++){
		for(j=0;j<document.forms[i].length;j++){
			 if (document.forms[i].elements[j].type=='checkbox'){
			    if (document.getElementById(document.forms[i].elements[j].id).checked == false){
					document.getElementById(document.forms[i].elements[j].id).checked=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;
}

/**
 *
 * ruft entsprechendes individuelles Popup auf
 *
 *
*/

var recommend_form = null;
function  socialnetworks(network) {

	if(recommend_form==null) {
		recommend_form = $('#recommend_box').html();
	}
   	 // recommend_message
	var popup_width= null;
	var popup_height= null;
	var url='';

	url=$("#"+network).attr('href');
	popup_width = 790;
	popup_height = 320;
		
	$('#recommend_box').hide();
	windowOpenCenter(url,network,popup_width,popup_height,"yes");
}
