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;
	obtenlistado();
	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;
		obtenlistado();
	}

	spInputField.focus();
	return true;

}

function obtenlistado()
{

	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 = "get_results.php?query=" + escape(currentSWord)+'&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=obtenlistadoCallBack;
		spRequest.send(null);
	}

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

function obtenlistadoCallBack()
{

	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(listado, isCached)
{
	debugOut('ParseResult '+listado.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=\"imagenes2/bombilla.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=\"imagenes2/blanco.gif\" width=1 height=1></td></tr>';
	newCode=newCode+'<tr bgcolor=#5F4701><td><table border=0 cellpadding=0 cellspacing=0 width=100% background=\"imagenes2/fondo_buscador.gif\" style=\"font-family:verdana,tahoma,arial,helvetica; font-size:11px; color:white;padding:5px\"><tr><td><B>Sugerencias de artículo</B></td><td align=right><img src="imagenes2/cerrar.gif" width=11 height=10 border=0 alt="Desconectar sugerencias de búsqueda" title="Desconectar sugerencias de búsqueda" onMouseDown=\"javascript:disableMe();\"></td></tr></table></td></tr>';
	newCode=newCode+'<tr bgcolor=#6D550D><td><img src=\"imagenes2/blanco.gif\" width=1 height=1></td></tr>';
	newCode=newCode+'<tr bgcolor=black><td><img src=\"imagenes2/blanco.gif\" width=1 height=1></td></tr>';
	newCode=newCode+'<tr bgcolor=#CFD4D7><td><img src=\"imagenes2/blanco.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 = listado.split("\n");
	spResult = new Array();

	trHighlighted=0;

	for (var t in spResults) 
	{
		akResultID++;
		spResult=spResults[t].split("\t");
		if (spResult[0] != "...")
		{
			if (spResult[0] != "") {
				spLinkURL="/detalle/"+spResult[0]+"/"+spResult[2];
				newCode=newCode+'<tr id=\"tr'+akResultID+'\" style=\"cursor:hand\" onMouseMove=\"javascript:highlightTR('+akResultID+')\" onMousedown=\"javascript:document.location.href=\''+spLinkURL+'\'\"><td>'+spResult[1]+'</td><td align=right valign=top></td></tr>';
			}
		} else {
			newCode=newCode+'<tr id=\"tr'+akResultID+'\" style=\"cursor:hand\" onMouseMove=\"javascript:highlightTR('+akResultID+')\"><td>(Existen más resultados de los mostrados. Afine la búsqueda)</td><td align=right valign=top></td></tr>';
			}
    }
	

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

	if (numResults>0 && cBrw == "msie" && cBrwV < 7)
	{ 
		newCode=newCode+'<iframe src=\"imagenes2/blanco.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]=listado; spCacheSWord[spCacheWritePointer]=ajaxSword;
		spCacheWritePointer=spCacheWritePointer+1; if (spCacheWritePointer>=spMaxCache) spCacheWritePointer=0;
	}

}

function disableMe()
{

	var alerttext='Las sugerencias de búsqeda han sido desactivadas, Puedes reactivarlas desde la sección de búsqueda ampliada.';

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