var bChecking = false
var arrFoo = new Array()
var arrPlaatsenPrev = new Array()
var Plaatsen = new Array()
var arrPlaatsen = new Array()
var arrIDs = new Array()
var arrKeywords = new Array()
var oXMLHTTP
var sTypedValue = ''
var bBrowserOk = window.ActiveXObject || window.XMLHttpRequest
var MAC = ( navigator.appVersion.indexOf("Macintosh") != -1 )
var IE = ( navigator.appVersion.indexOf("MSIE") != -1 )
var IE50 = ( navigator.appVersion.indexOf("MSIE 5.0") != -1 )

sLanguage= 'en'
sZoek = '';
bShow = false
var nBreedte
var nHeight = 0
nHover = -1
bHover = false
bCancelEnterSubmit = false
bEnabled = true
bFocused = true
sVorige = ''
var oInput
var VorigeLetter = ''
var arrPlaatsenOrigineel
var arrIDsOrigineel
var arrKeywordsOrigineel
var sWidth1, sWidth2, sWidthList
var AccountID

//Timing
var StartOphalenTijd
var EindOphalenTijd
var StartProcessingTijd
var EindProcessingTijd
var blnInitialising = true;

onlocationselected =  function( sDescription, intID ) { }

function ShowInput( oForm, sInput, sValue, nWidthFrame, nWidthList, sExtra, bAan, intAccountID, blnSetFocus, strZoek, strLanguage)
{
	if(strLanguage != '')
	{
		if(strLanguage.toLowerCase() == 'vl')
    { 
			sLanguage = 'nl';
    }
    else
    {
			sLanguage = strLanguage.toLowerCase();
    }
	}
	
	sZoek = strZoek;
	AccountID = intAccountID
	if ( document.getElementById && !( MAC && IE ) )
	{
		sWidth1 = nWidthFrame + 'px'
		sWidth2 = (nWidthFrame+2) + 'px'
		sWidthList = nWidthList + 'px'
		sWidth4 = sWidth2
		document.getElementById('DefaultInput').innerHTML = ''
		if ( IE )
		{
			//sWidth1 = '100%'
			sWidth2 = '100.4%'
			document.write('<div style="z-index: 999; position:relative; padding-bottom:0px; width:' + sWidth1 + ';">')
			document.write('	<div style="z-index: 999; position:absolute; left:0px; top:23px; width:' + sWidth1 + '; height:100px; ">')
			if ( !IE50 )
			{
				document.write('		<div id="FrameContainer" style="z-index: 999; position:absolute; left:0px; top:0px; width:' + sWidth2 + '; height:100%;">')
				document.write('			<iframe id="iFrame" style="z-index: 999; width:' + sWidth2 + '; height:0px;"></iframe>')
				document.write('		</div>')
			}
			document.write('		<div style="z-index: 999; position:absolute; left:0px; top:0px;width:' + sWidthList + ';">')
			document.write('			<div id="Lijst" style="width:' + sWidthList + ';" onmouseout="MouseOutLijst()"></div>')
			document.write('		</div>')
			document.write('	</div>')
			document.write('	<input type="text" class="input_enabled" id="' + sInput + '" style="width:' + sWidth2 + ';" name="' + sInput + '" value="' + sValue + '" autocomplete="off" onfocus="Focused(true)" onblur="Focused(false)" onkeyup="Check(event)" /><br/>')
		}
		else
		{
			sWidth1 = '19.9em'
			sWidth2 = '20.4em'
			sWidth3 = '20.3em'
			document.write('<div style="z-index: 999;position:relative; padding-bottom:0px; width:' + sWidth1 + ';">')
			document.write('	<input class="autocomplete" autocomplete="off" onfocus="Focused(true)" onblur="Focused(false)" onkeyup="Check(event)" id="' + sInput + '" +  name="' + sInput + '" value="' + sValue + '" style="width:' + sWidth1 + ';"><br/>')
			document.write('	<div id="Lijst" style="position:absolute; width:' + sWidthList + ';" onmouseout="MouseOutLijst()"></div>')
		}
		document.write('	<div id="Message" style="position:absolute; width:' + sWidth2 + ';" onmouseout="MouseOutLijst()"></div>')
		document.write('	<div style="width=200px; left: 300px; top=200px; position:absolute;"><input type="hidden" id="DropDownLocationID" value="0" /></div>')
		document.write('	<div style="top=230px; position:absolute;"><input style="width=300px;" type="hidden" id="DropDownLocationName" value="" /></div>')
		document.write('	<div style="width=200px; top=300px; left=200px; position:absolute;"><input type="hidden" id="OutputText" value="" /></div>')
		
		document.write('	<input type="hidden" id="test" style="width:100;position: absolute; left: 100px; top: 100px;" name="test"/>')
		
		document.write('</div>')
		oInput = oForm[sInput]
		if(blnSetFocus)
		{
			//oInput.focus();
		}
		document.onclick	= DocumentClick
		document.onkeyup	= KeyUp
		document.onkeydown	= KeyDown			
		nBreedte			= nWidthFrame
	}
}

function ShowMessageDiv(strMessage)
{
	document.getElementById('Message').style.display = 'block';
	document.getElementById('Message').style.visibility = 'visible';
	document.getElementById('Message').innerHTML = strMessage;
}

function HideMessageDiv()
{
	document.getElementById('Message').style.display = 'none';
	document.getElementById('Message').style.visibility = 'hidden';
	document.getElementById('Message').innerHTML = ''
}

function Focused(b)
{
	bFocused = b;
	
	if(b)
	{
		oInput.select();
	}
}

function Focus()
{
	bFocus = true;
	oInput.focus();
}

function Blur()
{
	bFocus = false
}

function CopyArray(aArray)
{
	var Nieuw = new Array()
	for(i=0;i<aArray.length;i++)
	{
		Nieuw[i] = aArray[i]
	}
	return Nieuw
}

function FilterPlaatsen(sString)
{
	if (oInput.value.length >= 3)//Dan pas gaan weergeven/zoeken
	{
		sString				= sString.toLowerCase()
		var intStringLength	= sString.length;
		
		if(arrPlaatsenOrigineel)//Is er resultaat?
		{
			//Originele arrays in tact laten
			arrPlaatsen = CopyArray( arrPlaatsenOrigineel )
			arrIDs		= CopyArray( arrIDsOrigineel )
			arrKeywords = CopyArray( arrKeywordsOrigineel )
		}
		
		for (intI = arrPlaatsen.length-1; intI > -1; intI--)//Van achter naar voren door de plaatsen lopen
		{
			var strID	= '#' + arrIDs[intI];

			if(arrKeywords[intI] != null && arrKeywords[intI] != undefined)
			{
				var blnExistsInPlaats	= ( arrPlaatsen[intI].toLowerCase().substring(0,intStringLength) == sString);
				var blnExistsInKeyWord	= ( arrKeywords[intI].toLowerCase().indexOf(sString) != -1 );
				
				if(!blnExistsInKeyWord)
				{
					if(!blnExistsInPlaats)//Geen match (meer, verwijderen uit tijdelijke array)
					{
						if (oInput.value.length == 3)
						{
							arrPlaatsen[intI] += strID;
							
						}
						else
						{
							DeleteItem(arrPlaatsen, arrIDs, arrKeywords, intI);
						}
					}
					else
					{
						arrPlaatsen[intI] += strID;
					}
				}
				else
				{
					if(blnExistsInPlaats)
					{
						arrPlaatsen[intI] += strID;
					}
					else
					{
						var arrKeywordsForThisPlaats	= arrKeywords[intI].split(',');//Een plaats kan meerdere keywords bevatten
						var blnFoundOne					= false;//Alleen de eerste weergeven
						var strPlaats					= arrPlaatsen[intI];
						
						for(intY = 0; intY < arrKeywordsForThisPlaats.length; intY++)
						{
							var blnMatch		= arrKeywordsForThisPlaats[intY].toLowerCase().substring(0,intStringLength) == sString;

							var strKeyword		= arrKeywordsForThisPlaats[intY];
							var strKeywordCap	= strKeyword.substring(0,1).toUpperCase() + strKeyword.substring(1,999);
							
							if(blnMatch)
							{
								var strPlaatsWithKeywordAndID	= strKeywordCap + '  [' + strPlaats + ']' + strID;

								if(blnFoundOne)//Dan toevoegen aan de array
								{
									arrPlaatsen[arrPlaatsen.length]	= strPlaatsWithKeywordAndID;//Het keyword weergeven
								}
								else//Bestaand item aanpassen
								{
									arrPlaatsen[intI]	= strPlaatsWithKeywordAndID;//Het keyword weergeven
									blnFoundOne			= true;
								}
							}
						}
					}
				}
			}
			else
			{
				arrPlaatsen[intI] += strID;
			}
		}
	}
	
	arrPlaatsen.sort();//Alfabetisch sorteren
	RebuildArrIDs();//Vanwege het sorteren en toevoegen extra keyword plaatsen deze array opnieuw builden
	SetLijst()
}

function RebuildArrIDs()
{
	var intLength	= arrPlaatsen.length;
	arrIDs.length	= 0;
	arrIDs.length	= intLength;
	
	for (intI = 0; intI < intLength; intI++)
	{
		var intIndexOfHekje	= arrPlaatsen[intI].indexOf('#');
		var intPlaatsLength	= arrPlaatsen[intI].length;
		var intID			= arrPlaatsen[intI].substring(intIndexOfHekje + 1, intPlaatsLength);
		
		arrIDs[intI]		= intID;
		
		arrPlaatsen[intI]	= arrPlaatsen[intI].substring(0, intIndexOfHekje);
	}
}
	


function DeleteItem(arrPlaatsen, arrIDs, arrKeywords, intI)
{
	for(intN = intI; intN < arrPlaatsen.length-1; intN++)
	{
		arrPlaatsen[intN]	= arrPlaatsen[intN + 1];
		arrIDs[intN]		= arrIDs[intN + 1];
		arrKeywords[intN]	= arrKeywords[intN + 1];
	}
	
	arrPlaatsen.length--
	arrIDs.length--
	arrKeywords.length--
}

function clearArrays()
{
	arrPlaatsen.length	= 0;
	arrIDs.length		= 0;
	arrKeywords.length	= 0;
	
	document.getElementById('OutputText').value = 'geen 3;' + arrPlaatsen.length;
}

function Check(event)
{
	if(event.keyCode == 27 || (event.keyCode == 8 && oInput.value.length < 3))//Escape of backspace; close message
	{	
		HideMessageDiv();
	}
	
	if(!bBrowserOk || bEnabled == false || bChecking != false)
	{
		return;
	}

	if(event)
	{
		if(event.keyCode == 13) return
		if(event.keyCode == 34) return
		if(event.keyCode == 33) return
		if(event.keyCode == 40) return
		if(event.keyCode == 38) return
	}

	if ( oInput.value.length < 3 )
	{
		Hide();
		HideMessageDiv();
		clearArrays();
		return;
	}
	
	document.getElementById('OutputText').value = 'wel 3:    ' + arrPlaatsen.length;
	
	ShowMessageDiv('Searching, please wait....');
	
	sTypedValue = oInput.value
	Letter		= oInput.value.substring(0,3)
	sVorige		= oInput.value
	
	if(VorigeLetter == Letter)
	{
		FilterPlaatsen(oInput.value)
		return
	}
	
	VorigeLetter	= Letter
	bChecking		= true
	
	oXMLHTTP = false
	// ActiveXObject voor IE, XMLHttpRequest voor firefox
	if ( window.ActiveXObject ) oXMLHTTP = new ActiveXObject("Microsoft.XMLHTTP")
	if ( window.XMLHttpRequest ) oXMLHTTP = new XMLHttpRequest()
	//oXMLHTTP = new XMLHTTP()
	//oXMLHTTP.onerror = function(description) { alert('Error: ' + description) }


	if ( !oXMLHTTP )
	{
		// antieke browsers
		arrPlaatsen = ''
	}
	else
	{
		oXMLHTTP.onreadystatechange = function()
		{
			if (oXMLHTTP.readyState == 4)
			{
				EindOphalenTijd = new Date()

				StartProcessingTijd = new Date()
				arrFoo = oXMLHTTP.responseText
				
				//window.clipboardData.setData('text', arrFoo);
				
				//var x = oXMLHTTP.responseText;
				//window.clipboardData.setData('Text',x);
				//alert('copied');

				sHeader = '<plaatsen>'
				sFooter = '</plaatsen>'
				arrFoo = arrFoo.substring(sHeader.length, arrFoo.length - sFooter.length)
				
				arrFoo = arrFoo.split( ';' )

				for( i = 0; i < arrFoo.length; i++ )
				{
					strItem = arrFoo[ i ]
					tempArr = strItem.split( '|' )
					
					arrPlaatsen[ i ]	= tempArr[ 0 ]
					arrIDs[ i ]			= tempArr[ 1 ]
					arrKeywords[ i ]	= tempArr[ 2 ]
				}
				
				arrPlaatsenOrigineel	= CopyArray( arrPlaatsen )
				arrIDsOrigineel			= CopyArray( arrIDs )
				arrKeywordsOrigineel	= CopyArray( arrKeywords )
				SetLijst()
				FilterPlaatsen(oInput.value)


				EindProcessingTijd = new Date()
				//alert( EindProcessingTijd.getTime() - StartProcessingTijd.getTime() )
			}
		}

		//oXMLHTTP.open("GET", sZoek + Letter , true) oInput.value
		StartOphalenTijd = new Date()
		
		//TODO:Ombouwen proxy ook moduleid mee kan geven ipv account id
		//voorlopig 611 hardcoded
		AccountID = "13504";

	    var search;
	    if(document.getElementById('ProductType')!=null)
	    {
				if (document.getElementById('ProductType').value!='')
				{
					search =  sZoek + oInput.value + '&accountid=' + AccountID + '&language=' + sLanguage + '&producttype=' + document.getElementById('ProductType').value;
				}
				else
				{
					search =  sZoek + oInput.value + '&accountid=' + AccountID + '&language=' + sLanguage;
				}
	    }
	    else
	    {
		    search =  sZoek + oInput.value + '&accountid=' + AccountID + '&language=' + sLanguage;
	    }
	    
		oXMLHTTP.open("GET",search) 
		oXMLHTTP.send(null)
	}
}

function Hide()
{
	bShow = false
	document.getElementById('Lijst').style.display = 'none'
	if ( IE && !IE50 ) document.getElementById('FrameContainer').style.display = 'none'
}

function ShowLijst()
{
	document.getElementById('Lijst').style.display = 'block'
	if ( IE && !IE50 ) document.getElementById('FrameContainer').style.display = 'block';
}

function SetLijst()
{
	document.getElementById('Lijst').innerHTML = ''
	nAantal = arrPlaatsen.length > 150 ? 150 : arrPlaatsen.length
	n = 2 + 16 * nAantal
	if ( n > 120 ) n = 120
	nHeight = 73 - n
	if ( navigator.userAgent.indexOf("Firefox")>0 ) nHeight += 16
	
	nHeight = nHeight < 0 ? 0 : nHeight
	
	if ( arrPlaatsen[0] != '' )
	{
		nHover = -1
		s = '<table cellpadding=0 cellspacing=0 style="width:' + sWidthList + ';">'
		for( i = 0; i < nAantal; i++ )
		{
			sPlaats = arrPlaatsen[i]
							
			sPlaatsSlash = sPlaats.replace( '\'', '\\\'' )
			s += '<tr class="gewoon" id="Link' + i + '" onmouseover="MouseOverLink(' + i + ')" onclick="CheckAutocompleteSubmit()">'
			s += '<td class="plaats" title="' + sPlaats + '">' + sPlaats + '</td>'
			s += '</tr>'
		}
		s += '</table>'
		document.getElementById('Lijst').innerHTML += s
		
		bShow = true

		var MaxItems = 30;
		
		if(arrPlaatsen.length > MaxItems)
		{
			HideMessageDiv();
			//document.getElementById('Lijst').style.height = (MaxItems * 13) + 2;
		}
		else
		{
			HideMessageDiv();
			//document.getElementById('Lijst').style.height = (arrPlaatsen.length * 13) + 2;
		}
		ShowLijst();
	}
	else
	{
		Hide()
	}
	if ( IE && !IE50 ) document.getElementById('iFrame').style.height = (document.getElementById('Lijst').clientHeight+2) + 'px'
	if ( nAantal == 0 ) Hide()
	bChecking = false

	if ( nAantal == 0 ) 
	{
	ShowMessageDiv('No results found.');
	var1 = document.getElementById('pickuplocation_ac').value;
	var2 = document.getElementById('languagecode').value;
	var href = document.location.href;
	var path = href.substring(0,href.indexOf("://")+3);
	var domain = path + window.location.hostname;
	var itemhtml = getItemContent(domain + "/back/WriteLog.aspx?searchfield="+var1+"&userlanguage=" + var2);
	item.innerHTML = itemhtml;
	}
	
	//Controleren of het zoekresultaat aan de hand van de url parameter gelijk is aan 1.
	//Zo ja, het enige zoekresultaat weergeven in "pickuplocation_ac"
	if (getLocation("location") !== "" && nAantal == 1)
	{			
		document.getElementById('pickuplocation_ac').value = TrimString(arrPlaatsen[0].toString());
		document.getElementById('pickuplocation').value = TrimString(arrPlaatsen[0].toString());
		document.getElementById('pickuplocationId').value = TrimString(arrIDs[0].toString());
		document.getElementById('dropofflocationId').value = TrimString(arrIDs[0].toString());						
		Hide();
			
					
	}
	
}

function CheckAutocompleteSubmit()
{
	var intChosenLocationID		= document.getElementById('DropDownLocationID').value;
	var strChosenLocationName	= document.getElementById('DropDownLocationName').value;
	
	//Loop door de originele plaatsen en zoek de origele plaats op
	for(intX = 0; intX < arrIDsOrigineel.length - 1; intX++)
	{
		if(intChosenLocationID == arrIDsOrigineel[intX])
		{
			strChosenLocationName = arrPlaatsenOrigineel[intX];
		}
	}

	Hide()
	onlocationselected(strChosenLocationName, intChosenLocationID);
	bCancelEnterSubmit = false
	return false
}

//Functie die de url parameter als string ophaalt
function getLocation(strParamName)
{
	var strReturn	= "";
	var strHref		= document.location.href;
	  
	if (strHref.indexOf("?") > -1)
	{
		var strQueryString	= strHref.substring(strHref.indexOf("&")).toLowerCase();
		var aQueryString	= strQueryString.split("&");
	    
		for (var iParam = 0; iParam < aQueryString.length; iParam++)
		{
			if (aQueryString[iParam].indexOf(strParamName + "=") > -1)
			{
				var aParam	= aQueryString[iParam].split("=");
				strReturn	= aParam[1];
				break;
			}
		}
	}
	return strReturn;
}


function MouseOverLink(i)
{
	if ( nHover > -1 )
	{
		if ( document.getElementById('Link' + nHover) ) document.getElementById('Link' + nHover).className = 'gewoon'
	}
	nHover = i
	if ( i != -1 )
	{
		if ( document.getElementById('Link' + i) ) document.getElementById('Link' + i).className = 'LinkHover'
	}
	if(i > -1)
	{
		document.getElementById('DropDownLocationID').value = arrIDs[i];
		document.getElementById('DropDownLocationName').value = arrPlaatsen[i];
	}
}

function KeyDownLink(i)
{
	if ( parseInt(document.getElementById('Lijst').scrollTop) < -36 + i*16 ) document.getElementById('Lijst').scrollTop = -36 + i*16
	if ( parseInt(document.getElementById('Lijst').scrollTop) > i*16 ) document.getElementById('Lijst').scrollTop = i*16

	MouseOverLink(i)
}

function MouseOutLijst()
{
	//nHover = -1
}

function SetCapitalArray(a)
{
	for(i=0;i<a.length;i++)
	{
		a[i] = SetCapitals(a[i])
	}
}

function ToggleLijst()
{
	if ( document.getElementById('Lijst').style.display == 'block' )
	{
		bShow = false
		document.getElementById('Lijst').style.display = 'none'
		if ( IE && !IE50 ) document.getElementById('FrameContainer').style.display = 'none'
	}
	else
	{
		bShow = true
		document.getElementById('Lijst').style.display = 'block'
		if ( IE && !IE50 ) document.getElementById('FrameContainer').style.display = 'block'
	}
	return false
}

function MouseOut()
{
	bHover = false
}

function MouseOver()
{
	bHover = true
}

function SetCapitals(s)
{
	if ( s.indexOf(' ') > -1 || s.indexOf('-') > -1 )
	{
		s = MultipleCapitals(s)
	}
	else
	{
		s = s.substring(0,1).toUpperCase() + s.substring(1,s.length).toLowerCase()
	}
	return s
}

function MultipleCapitals(sInput)
{
	var sSeparators = ' -'
	var sOutput = sInput.substring(0,1).toUpperCase()
	for ( var i=1; i<sInput.length; i++ )
	{
		if ( sSeparators.indexOf(sInput.charAt(i-1)) > -1 )
		{
			sOutput += sInput.substring(i,i+1).toUpperCase()
		}
		else
		{
			sOutput += sInput.substring(i,i+1).toLowerCase()
		}
	}
	return sOutput
}

function DocumentClick()
{
	if ( !bBrowserOk ) return
	if ( bHover == false )
	{
		Hide()
	}
}

function CheckKeypress(event)
{
	if ( !bBrowserOk ) return
	if ( bShow == true )
	{
		if ( event.keyCode == 40 ) return false
		if ( event.keyCode == 38 ) return false
	}
	return true
}

function KeyDown(event)
{
	if ( !bEnabled ) return
	
	if( !event ) {
	    //if the browser did not pass the event information to the
		//function, we will have to obtain it from the event register
		if( window.event ) {
			//Internet Explorer
			event = window.event;
		} else {
			//total failure, we have no way of referencing the event
			return;
		}
	}
	
	if ( event.keyCode == 13 )
	{
		bCancelEnterSubmit = bShow
	}
	else
	{
		bCancelEnterSubmit = false
	}
	if ( event.keyCode == 34 ) GoDown(4)
	if ( event.keyCode == 33 ) GoUp(4)
	if ( event.keyCode == 40 ) GoDown(1)
	if ( event.keyCode == 38 ) GoUp(1)
}

function KeyUp(event)
{
	if ( !bEnabled ) return
	
	if( !event ) {
	    //if the browser did not pass the event information to the
		//function, we will have to obtain it from the event register
		if( window.event ) {
			//Internet Explorer
			event = window.event;
		} else {
			//total failure, we have no way of referencing the event
			return;
		}
	}
	
	if ( event.keyCode == 13 )
	{
		CheckAutocompleteSubmit()
	}
	
	if ( event.keyCode == 27 ) Enter()
	if ( event.keyCode == 9 ) Enter()
}

function Enter(bEnter)
{
	if ( !bBrowserOk ) return
	if ( bShow == true )
	{
		Hide()
		oInput.focus()
	}
}

function GoDown(n)
{
	if(!bBrowserOk || (bFocused == false)) return;
	
	if ( bShow == false ) Check()
	n = nHover + n
	if ( !window.nAantal ) return
	if ( n > nAantal-1 )
	{
		n = 0
	}
	KeyDownLink(n)
}

function GoUp(n)
{
	if(!bBrowserOk || (bFocused == false)) return;
	
	if(bShow == false) Check()
	
	n = nHover - n;
	
	if (n < 0)
	{
		n = nAantal-1;
	}
	KeyDownLink(n);
}

	//Functie die controleert of er een parameter wordt meegegeven aan de url
function showLocations(event)
{
	//Er is wel een parameter meegegeven aan de url
	if(getLocation("location") !== "")
	{
		//Vul de waarde van de parameter in het locatieveld en focus op dit veld
		document.getElementById('pickuplocation_ac').value = (getLocation("location"));
		document.getElementById('pickuplocation_ac').focus();
		
		//Check de parameter met de database en geef de mogelijkheden weer in dropdown			
		Check(event);
		
		
	}
}
