function curry(func,arg){return function(){func(arg);};}
var IXXUS_AutoSuggest=function(){var m_asLabelContainer='quicksearch';var m_asLabelList='ac_list';var m_asLabelIcon='ac_ddicon';var m_asLabelTextbox='ac_textbox';var m_asLabelListDiv='ac_listdiv';var m_asLabelResponseDiv='ac_response';var m_asLabelListHeader='ac_list_header';var m_asLabelSubmitButton='ac_submitbutton';var m_arrNavKeys=[Event.KEY_TAB,Event.KEY_LEFT,Event.KEY_RIGHT,Event.KEY_UP,Event.KEY_DOWN];var m_isLoadingSuggestions=false;var m_suggestListIndexSelected=-1;var m_selectedListItemArrayId=-1;function prepareSearchBox(){var suggestContainer=$(m_asLabelContainer);var acList=suggestContainer.select('.'+m_asLabelList)[0];var acDropDownImage=suggestContainer.select('.'+m_asLabelIcon)[0];var acTextInputBox=suggestContainer.select('.'+m_asLabelTextbox)[0];var acButton=suggestContainer.select('.'+m_asLabelSubmitButton)[0];acList.observe('click',searchListItemClicked);acTextInputBox.observe('blur',hideSuggestListDelayed);acTextInputBox.observe('keydown',onKeyPressActivateAction);acButton.observe('click',searchButtonClicked);}
function searchButtonClicked(e){hideSuggestList();showTextualResponse();}
function searchListItemClicked(e){var acTextInputBox=$(m_asLabelContainer).select('.'+m_asLabelTextbox)[0];acTextInputBox.value=e.element().innerHTML.unescapeHTML();m_selectedListItemArrayId=e.element().id;hideSuggestList();showTextualResponse();}
function hideSuggestList(){var suggestContainer=$(m_asLabelContainer);var acDivList=suggestContainer.select('.'+m_asLabelListDiv)[0];if(acDivList.style.display!='none'){acDivList.style.display='none';}
m_suggestListIndexSelected=-1;var acList=suggestContainer.select('.'+m_asLabelList)[0];var listItems=acList.getElementsByTagName("li");if(listItems){for(var i=0,iMax=listItems.length;i<iMax;i++){listItems[i].style.backgroundColor='#ffffff';}}}
function positionListUnderBox(divList){var suggestContainer=$(m_asLabelContainer);if(!divList){divList=suggestContainer.select('.'+m_asLabelListDiv)[0];}
if(divList.style.display!==''){var acTextInputBox=suggestContainer.select('.'+m_asLabelTextbox)[0];divList.style.position='absolute';divList.style.display='';}}
function hideSuggestListDelayed(){window.setTimeout(hideSuggestList,200);}
function findArrayPosIdForExactMatch(){var acTextInputBox=$(m_asLabelContainer).select('.'+m_asLabelTextbox)[0];if(acTextInputBox){var i;var textboxValue=acTextInputBox.value.toLowerCase();for(i=0;i<progDefLAs.length;i++){if(progDefLAs[i].name.toLowerCase()==textboxValue){return'la_'+i;}}
for(i=0;i<progDefWaves.length;i++){if(progDefWaves[i].name.toLowerCase()==textboxValue){return'wave_'+i;}}
for(i=0;i<progDefRegions.length;i++){if(progDefRegions[i].name.toLowerCase()==textboxValue){return'region_'+i;}}}
return null;}
function showTextualResponse(){var response="";var addedOneToList=false;var arrPosId=m_selectedListItemArrayId;if(!arrPosId){arrPosId=findArrayPosIdForExactMatch();}
if(arrPosId&&(arrPosId.indexOf("_")>=0)){var typeAndPos=arrPosId.split("_");var conceptType=typeAndPos[0].toLowerCase();var pos=parseInt(typeAndPos[1]);if(conceptType=="region"){var regionObj=progDefRegions[pos];response='<p>The following local authorities are in the <a href="'+regionObj.url+'">'+regionObj.name+'</a> region:</p>';response+='<p>';for(var i=0;i<progDefLAs.length;i++){if(progDefLAs[i].region==regionObj.name){if(addedOneToList)response+=', ';if((!progDefLAs[i].url)||(progDefLAs[i].url=="")){response+=progDefLAs[i].name;}
else{response+='<a href="'+progDefLAs[i].url+'">'+progDefLAs[i].name+'</a>';}
addedOneToList=true;}}
response+='</p>';}
else if(conceptType=="wave"){var waveObj=progDefWaves[pos];response='<p>The following local authorities are in <a href="'+waveObj.url+'">'+waveObj.name+'</a>:</p>';response+='<p>';for(var i=0;i<waveObj.las.length;i++){for(var j=0;j<progDefLAs.length;j++){if(progDefLAs[j].name==waveObj.las[i]){if(addedOneToList)response+=', ';if((!progDefLAs[i].url)||(progDefLAs[i].url=="")){response+=progDefLAs[j].name;}
else{response+='<a href="'+progDefLAs[j].url+'">'+progDefLAs[j].name+'</a>';}
addedOneToList=true;break;}}}
response+='</p>';}
else if(conceptType=="la"){var laObj=progDefLAs[pos];var regionLink='';for(var i=0;i<progDefRegions.length;i++){if(laObj.region==progDefRegions[i].name){regionLink='<a href="'+progDefRegions[i].url+'">'+progDefRegions[i].name+'</a> ';break;}}
if(regionLink=='')regionLink=laObj.region;if((!laObj.url)||(laObj.url=="")){response='<p>'+laObj.name;}
else{response='<p><a href="'+laObj.url+'">'+laObj.name+'</a>';}
response+=' local authority is in the '+regionLink+' region and is associated to the following waves:</p>';response+='<p>';for(var j=0;j<progDefWaves.length;j++){for(var k=0;k<progDefWaves[j].las.length;k++){if(progDefWaves[j].las[k]==laObj.name){if(addedOneToList)response+=', ';response+='<a href="'+progDefWaves[j].url+'">'+progDefWaves[j].name+'</a>';addedOneToList=true;break;}}}
response+='</p>';}}
var suggestContainer=$(m_asLabelContainer);var responseDiv=suggestContainer.select('.'+m_asLabelResponseDiv)[0];if(responseDiv){responseDiv.innerHTML=response;responseDiv.setStyle({display:'block'});}}
function onKeyPressActivateAction(e){var key=getKeyCode(e);if(key==Event.KEY_RETURN){Event.stop(e);hideSuggestList();showTextualResponse();}
else if((key==Event.KEY_UP)||(key==Event.KEY_DOWN)){var suggestContainer=$(m_asLabelContainer);var acList=suggestContainer.select('.'+m_asLabelList)[0];var listItems=acList.getElementsByTagName("li");if(listItems){var iMax=listItems.length;if(iMax>0){if((m_suggestListIndexSelected==-1)&&(key==Event.KEY_UP)){m_suggestListIndexSelected=iMax-1;Event.stop(e);}
else if((m_suggestListIndexSelected==-1)&&(key==Event.KEY_DOWN)){m_suggestListIndexSelected=0;}
else if(key==Event.KEY_UP){m_suggestListIndexSelected--;Event.stop(e);if(m_suggestListIndexSelected<0)m_suggestListIndexSelected=iMax-1;}
else if(key==Event.KEY_DOWN){m_suggestListIndexSelected++;if(m_suggestListIndexSelected>=iMax)m_suggestListIndexSelected=0;}
var acTextInputBox=suggestContainer.select('.'+m_asLabelTextbox)[0];acTextInputBox.value=listItems[m_suggestListIndexSelected].innerHTML.unescapeHTML();m_selectedListItemArrayId=listItems[m_suggestListIndexSelected].id;for(var i=0;i<iMax;i++){listItems[i].style.backgroundColor='#ffffff';}
listItems[m_suggestListIndexSelected].style.backgroundColor='silver';}}}
else if(m_arrNavKeys.indexOf(key)==-1){m_selectedListItemArrayId=null;window.setTimeout(loadSuggestions,200);}}
function getKeyCode(e){var key=e.keyCode?e.keyCode:e.which;return key;}
function loadSuggestions(){if(!m_isLoadingSuggestions){m_isLoadingSuggestions=true;var acTextInputBox=$(m_asLabelContainer).select('.'+m_asLabelTextbox)[0];var searchToken=acTextInputBox.value.toLowerCase();if(searchToken.length==0){hideSuggestList();m_isLoadingSuggestions=false;return;}
var listItems='';var listEntryLower='';iMax=progDefWaves.length;for(var i=0;i<progDefWaves.length;i++){listEntryLower=progDefWaves[i].name.toLowerCase();if(listEntryLower.startsWith(searchToken)||(listEntryLower.indexOf(" "+searchToken)>-1)){listItems+='<li id="wave_'+i+'">'+progDefWaves[i].name+'</li>';}}
iMax=progDefRegions.length;for(var i=0;i<progDefRegions.length;i++){listEntryLower=progDefRegions[i].name.toLowerCase();if(listEntryLower.startsWith(searchToken)||(listEntryLower.indexOf(" "+searchToken)>-1)){listItems+='<li id="region_'+i+'">'+progDefRegions[i].name+'</li>';}}
iMax=progDefLAs.length;for(var i=0;i<progDefLAs.length;i++){listEntryLower=progDefLAs[i].name.toLowerCase();if(listEntryLower.startsWith(searchToken)||(listEntryLower.indexOf(" "+searchToken)>-1)){listItems+='<li id="la_'+i+'">'+progDefLAs[i].name+'</li>';}}
var acList=$(m_asLabelContainer).select('.'+m_asLabelList)[0];acList.innerHTML=listItems;if((!listItems)||(listItems==='')){hideSuggestList();}
else{showDictionarySuggestList();}
m_isLoadingSuggestions=false;}}
function showDictionarySuggestList(){var listHeader=$(m_asLabelContainer).select('.'+m_asLabelListHeader)[0];listHeader.innerHTML="suggested matches:";positionListUnderBox();}
return{prepareSearchBox:prepareSearchBox};}();Event.observe(window,'load',IXXUS_AutoSuggest.prepareSearchBox,false);