/* (C) 2008 Musikhaus Thomann. Do not even think about copying, stealing or changing the code. Branntwein dunnit. */

var spURL = "sp.html";

var searchFormName, searchFieldName, searchPreviewSpan;
var mySpan, myDebugSpan, spInputField;

var LastSPQuery;
var spInitivalValue;
var spRequest;

var spActive = true;
var spDebug = false;

var trHighlighted = 0; 
var fadeInTimer, currentFadePos = 0; currentlyFading = false;

var trURL = new Array(100);
var spCache = new Array(100), spCacheSWord = new Array(100), spMaxCache = 100, spCacheWritePointer = 0; 

var numResults;
var lastCharWasCursor = false;
var keyPressCounter = 0;
var cursorTimeoutID;

var cBrw = navigator.userAgent;
var cBrwVStr = navigator.appVersion;
var cBrwV, cBrwOS;

function spInit(searchFormName, searchFieldName, searchPreviewSpan, debugSpan, searchPreviewHost)
{

	if (/MSIE (\d+\.\d+);/.test(cBrw)) { cBrwV=Number(RegExp.$1); cBrw="msie"; }
	else if (/Firefox[\/\s](\d+\.\d+)/.test(cBrw)) { cBrwV=Number(RegExp.$1); cBrw="firefox"; }
	else if (/Opera[\/\s](\d+\.\d+)/.test(cBrw)){ cBrwV=Number(RegExp.$1); cBrw='opera'; }

	mySpan=searchPreviewSpan;

	myDebugSpan=debugSpan;
	if (spDebug==true) document.getElementById(debugSpan).style.display='';

	spURL=searchPreviewHost;

	spInputField = document[searchFormName][searchFieldName];
	
	spInitivalValue=spInputField.value;

        spInputField.onfocus = spGotFocus;
	spInputField.onblur= spHidePreview;
        spInputField.onkeydown = spKeyPressHandler;
	spInputField.onkeyup = spKeyUpHandler;
	
}

function spGotFocus()
{
	if (!spActive) return;
	if (spInputField.value == '') return;
	LastSPQuery = spInputField.value;
	callMama();
	spShowPreview();
}

function spShowPreview()
{
	if (!spActive) return;
	if (spInputField.value == '' || spInputField.value != LastSPQuery) return;
	if (document.getElementById(mySpan).style.display=='' && currentFadePos>=100) return;
	if (currentlyFading == true) return;

	currentFadePos=5;
	spFadeIn();
	document.getElementById(mySpan).style.display='';
}

function spFadeIn()
{
	var oMySpan;

	if (cBrw == "msie" && cBrwV < 7) {currentFadePos=100; currentlyFading=false; return; }

	if (document.getElementById(mySpan).innerHTML == '') return;

	oMySpan = document.getElementById('mySPTable').style;
	
	currentFadePos=currentFadePos+18; if (currentFadePos > 100) { currentFadePos=100; }

	oMySpan.opacity = (currentFadePos / 100);
	oMySpan.MozOpacity = (currentFadePos / 100);
	oMySpan.KhtmlOpacity = (currentFadePos / 100);
	oMySpan.filter = "alpha(opacity='+currentFadePos+')"; 	

	if(currentFadePos>=100) { currentlyFading=false; return; }

	currentlyFading=true;
	fadeInTimer=setTimeout("spFadeIn()",25);
}

function spHidePreview() 
{
	document.getElementById(mySpan).style.display='none';
	highlightTR(0);
	currentFadePos=100;
}

function highlightTR(spanID)
{
	if (trHighlighted!=0) { document.getElementById('tr'+trHighlighted).style.background=''; }
	if (spanID!=''){ document.getElementById('tr'+spanID).style.background='#BAA868'; } 

	trHighlighted=spanID;
}

function spKeyPressHandler(spEvent)
{

	var trToHighlight; var oldResult;
	spEvent=(spEvent) ? spEvent : ((event) ? event : null);
        var keyCode = spEvent.keyCode;
        
	if (keyCode == 38 || keyCode == 40)
	{
		if (keyCode == 38) { trToHighlight=trHighlighted-1; if (trToHighlight<1) trToHighlight=numResults; }
		if (keyCode == 40) { trToHighlight=trHighlighted+1; if (trToHighlight>numResults) trToHighlight=1; }
		if (numResults>0) highlightTR(trToHighlight);
		oldResult=spInputField.value;spInputField.value=""; spInputField.focus(); spInputField.value=oldResult;
		lastCharWasCursor=true; return false;
	}
	else if (keyCode == 27)
	{
		lastCharWasCursor=false;
		spHidePreview();
		return true;
	}
	else if (keyCode == 13)
	{
		if (lastCharWasCursor==true && trHighlighted>0 && trURL[trHighlighted]!='')
		{
			document.getElementById(mySpan).style.display='none';
			javascript:document.location.href=trURL[trHighlighted];
			return false;
		}
	}

	lastCharWasCursor=false;
	return true;

}

function spKeyUpHandler(spEvent)
{

	keyPressCounter=keyPressCounter+1;

	spEvent=(spEvent) ? spEvent : ((event) ? event : null);
        var keyCode = spEvent.keyCode;

	if (spInputField.value=="")
	{
		LastSPQuery='';
		spHidePreview();
	}

	if (LastSPQuery != spInputField.value)
	{
		LastSPQuery = spInputField.value;
		callMama();
	}

	spInputField.focus();
	return true;

}

function callMama()
{

	if (spInputField.value == spInitivalValue && keyPressCounter==0) return;
	if (!spActive) return;
	
	var fromSPCache, currentSWord;

	currentSWord=mytrim(spInputField.value);
	
	debugSpan='call';

	fromSPCache=checkCache(currentSWord);
	if (fromSPCache!='')
	{
		parseResults(fromSPCache,true);
		return;
	}

	var requestURL = spURL + "?query=" + escape(currentSWord)+'&lanid=1&rnd='+Math.random()*100000;
	debugOut(requestURL);

	try
	{
		if(window.XMLHttpRequest) { spRequest = new XMLHttpRequest(); }
		else if(window.ActiveXObject) { spRequest = new ActiveXObject("Microsoft.XMLHTTP"); }
	
		spRequest.open("GET",requestURL,true);
		spRequest.onreadystatechange=mamaCallBack;
		spRequest.send(null);
	}

	catch(spEx)
	{
		if (spDebug == true) { alert("Error: "+spEx.getmessage); }
	}

}

function mamaCallBack()
{

	if (spRequest.readyState == 4)
	{
		if (spRequest.status == 200)
		{
			parseResults(spRequest.responseText,false);
                }
		else
		{
			// spHidePreview();
		}
        }	
}

function checkCache(mySWord)
{

	var i;

	i = spCacheWritePointer-1;
	if (i<0) i=spMaxCache-1;

	while(i!=spCacheWritePointer)
	{
		if (spCacheSWord[i]==mySWord) return spCache[i];
		i=i-1; if (i<0) i=spMaxCache-1;
	}
	return '';
}

function debugOut(myText)
{
	var localDate = new Date(); 
	var localTime=localDate.getHours()+':'+localDate.getMinutes()+':'+localDate.getSeconds();
	if (spDebug)
	{
		document.getElementById(myDebugSpan).innerHTML='<table border=0 cellpadding=3 cellspacing=0 bgcolor=white><tr><td><font color=red><B>'+localTime+' - '+myText+'</B></font></td></tr></table>';
	}
}

function mytrim(trimstring) {
	return trimstring.replace(/^\s+|\s+$/g,"");
}

function parseResults(mamaResponse, isCached)
{

	debugOut('ParseResult '+mamaResponse.length);

	var dummy, spTitle, spLinkURL;
	var newCode;
	var spType='', spTypeHeader='', lastspType='';
	var spHits='';

	var ulStartCode = '<span style=\"color:#283B7F;text-decoration:none; border-bottom: 1px dashed green;\"><B>';
	var ulEndCode = '</B></span>';

	var bulbcode='<img src=\"http://images6.thomann.de/pics/modpics/search_preview_smbulb2.gif\" align=top width=16 height=14>';
	var akResultID = 0;
	var ajaxSword;

	if (cBrw == "msie" && cBrwV < 7) {ulStartCode='<span style=\"color:#283B7F;text-decoration:none;\"><B>';}

	newCode='<table border=0 cellpadding=0 cellspacing=0 id=\"mySPTable\" width=360 onMouseOut=\"javascript:highlightTR(0);\" style=\"border: medium solid black; border-width: 1px; background-color:#F9F4E3; filter:alpha(opacity='+(currentFadePos)+');-moz-opacity:'+(currentFadePos / 100)+';opacity:'+(currentFadePos / 100)+';\">';
	newCode=newCode+'<tr bgcolor=#6D550D><td><img src=\"http://images6.thomann.de/pics/n.gif\" width=1 height=1></td></tr>';
	newCode=newCode+'<tr bgcolor=#5F4701><td><table border=0 cellpadding=0 cellspacing=0 width=100% background=\"http://images6.thomann.de/pics/modpics/search_preview_headerbackground.gif\" style=\"font-family:verdana,tahoma,arial,helvetica; font-size:11px; color:white;padding:5px\"><tr><td><B>Vorschläge zu Ihrer Suche</B></td><td align=right><img src="http://images6.thomann.de/pics/modpics/search_preview_smclosex.gif" width=11 height=10 border=0 alt="Suchvorschläge abschalten" title="Suchvorschläge abschalten" onMouseDown=\"javascript:disableMe();\"></td></tr></table></td></tr>';
	newCode=newCode+'<tr bgcolor=#6D550D><td><img src=\"http://images6.thomann.de/pics/n.gif\" width=1 height=1></td></tr>';
	newCode=newCode+'<tr bgcolor=black><td><img src=\"http://images6.thomann.de/pics/n.gif\" width=1 height=1></td></tr>';
	newCode=newCode+'<tr bgcolor=#CFD4D7><td><img src=\"http://images6.thomann.de/pics/n.gif\" width=1 height=1></td></tr>';
	
	newCode=newCode+'<tr><td><table border=0 cellpadding=4 cellspacing=0 width=100% style=\"font-family:tahoma,arial,helvetica;font-size:11px;line-height: 1.25;color:#222222;\">';

	spResults = new Array();
        spResults = mamaResponse.split("\n");
	spResult = new Array();

	trHighlighted=0;

	for (var t in spResults) 
	{
		spResult=spResults[t].split("\t");
		if (spResult[0].length != 0)
		{

			if (spResult[2].charAt(0)=='S')
			{
				ajaxSword=spResult[0];
			}
			else
			{
				spType=''; spTypeHeader=''; akResultID=akResultID+1;
				if (spResult[2].charAt(0)=='P') { spType='Produkt'; spTypeHeader='Produkte'; }
				if (spResult[2].charAt(0)=='H') { spType='Hersteller'; spTypeHeader='Hersteller'; }
				if (spResult[2].charAt(0)=='W') { spType='Kategorie'; spTypeHeader='Kategorien'; }
				if (spResult[2].charAt(0)=='C') { spType='Auswahl'; spTypeHeader='Artikelauswahl';}

				spHits=spResult[3]+'&nbsp;Produkte'; if (spResult[3]==1) spHits=spResult[3]+'&nbsp;Produkt';
				if (spResult[2].charAt(0)=='P') spHits='Produktseite';

				if (spType != lastspType) { newCode=newCode+'<tr><td colspan=2><table border=0 cellpadding=3 cellspacing=1 width=100% bgcolor=#F1E6BF style=\"font-size:10px;color:#888888;font-family:verdana,tahoma,arial,helvetica;\"><tr><td><B>'+spTypeHeader+'</B></td></tr></table></td></tr>'; }

				spTitle=spResult[0];
				while (spTitle.indexOf('<U>') >= 0) spTitle=spTitle.replace('<U>',ulStartCode);
				while (spTitle.indexOf('</U>') >= 0) spTitle=spTitle.replace('</U>',ulEndCode);
				while (spTitle.indexOf('<BU>') >= 0) spTitle=spTitle.replace('<BU>',bulbcode);

				spLinkURL=spResult[1];
				/* spLinkURL='http://www.thomann.de/de/'+spLinkURL; */
				if (jsNCTrackingSID !='')
				{	
					if (spLinkURL.indexOf('?') >= 0) { spLinkURL=spLinkURL+'&sid='+jsNCTrackingSID; } else { spLinkURL=spLinkURL+'?sid='+jsNCTrackingSID; }
				}

				trURL[akResultID]=spLinkURL;
				newCode=newCode+'<tr id=\"tr'+akResultID+'\" style=\"cursor:hand\" onMouseMove=\"javascript:highlightTR('+akResultID+')\" onMousedown=\"javascript:document.location.href=\''+spLinkURL+'\'\"><td>'+spTitle+'&nbsp;</td><td align=right valign=top><span style=\"font-family:tahoma,arial,helvetica;color:#808080;\">'+spHits+'</span></td></tr>';
				lastspType=spType;
			}
		}
        }
	

	newCode=newCode+'</table></td></tr></table>';

	if (numResults>0 && cBrw == "msie" && cBrwV < 7)
	{ 
		newCode=newCode+'<iframe src=\"http://images6.thomann.de/pics/n.gif\" frameborder=0 style=\"display:none;display:block;position:absolute;top:0;left:0;z-index:-1;filter:mask();width:2000px;height:3000px\"></iframe>';
	}

	document.getElementById(mySpan).innerHTML=newCode;

	numResults=akResultID; if (numResults>0) { spShowPreview(); } else { spHidePreview(); }

	if (!isCached)
	{
		spCache[spCacheWritePointer]=mamaResponse; spCacheSWord[spCacheWritePointer]=ajaxSword;
		spCacheWritePointer=spCacheWritePointer+1; if (spCacheWritePointer>=spMaxCache) spCacheWritePointer=0;
	}

}

function disableMe()
{

	var alerttext='Die Suchvorschläge wurden deaktiviert. Sie können sie über die Seite "erweiterte Suche" jederzeit wieder einschalten.';

	spHidePreview();
	spActive=false;
	spLinkURL='search_spdisable.html'
	if (jsNCTrackingSID !='') { spLinkURL=spLinkURL+'?spturnoff=1&sid='+jsNCTrackingSID; }
	frames['spdisableiframe'].location.href = spLinkURL;
	if (alerttext!='') alert(alerttext);
}
