	/************************************************************************************************************
	(C) www.dhtmlgoodies.com, April 2006

	This is a script from www.dhtmlgoodies.com. You will find this and a lot of other scripts at our website.

	Terms of use:
	You are free to use this script as long as the copyright message is kept intact. However, you may not
	redistribute, sell or repost it without our permission.

	Thank you!

	www.dhtmlgoodies.com
	Alf Magne Kalleland

	************************************************************************************************************/

	var ajaxBox_offsetX = 0;
	var ajaxBox_offsetY = 0;
	var  ajaxBox_width = 300;
	
	var ajax_list_externalFile = '/ajax_postcode_lookup.asp';	// Path to external file
	var ajax_list_letters_name = 'letters';
	var ajax_list_append = '';
	var minimumLettersBeforeLookup = 2;	// Number of letters entered before a lookup is performed.
	var ajax_list_skip_fields = 0;

	var ajax_list_objects = new Array();
	var ajax_list_cachedLists = new Array();
	var ajax_list_activeInput = false;
	var ajax_list_activeItem;
	var ajax_list_optionDivFirstItem = false;
	var ajax_list_currentLetters = new Array();
	var ajax_optionDiv = false;
	var ajax_optionDiv_iframe = false;

	var ajax_list_MSIE = false;
	if (navigator.userAgent.indexOf('MSIE')>=0 && navigator.userAgent.indexOf('Opera')<0)ajax_list_MSIE=true;

	var currentListIndex = 0;


	//*************************************
	//ajax_getTopPos
	//*************************************
	function ajax_getTopPos(inputObj)
	{
	  var returnValue = inputObj.offsetTop;
	  while((inputObj = inputObj.offsetParent) != null){
	  	returnValue += inputObj.offsetTop;
	  }
	  return returnValue;
	}
	
	//*************************************
	//ajax_list_cancelEvent
	//*************************************
	function ajax_list_cancelEvent()
	{
		return false;
	}

	
	
	
	//*************************************
	//ajax_getLeftPos
	//*************************************
	function ajax_getLeftPos(inputObj)
	{
		var returnValue = inputObj.offsetLeft;
		while((inputObj = inputObj.offsetParent) != null) {
			returnValue += inputObj.offsetLeft;
		}

		return returnValue;
	}

	//*************************************
	//ajax_option_setValue
	//*************************************
	function ajax_option_setValue(e,inputObj)
	{
//alert('ajax_option_setValue');	
		if(!inputObj)inputObj=this;
		var tmpValue = inputObj.innerHTML;
		if(ajax_list_MSIE)tmpValue = inputObj.innerText;else tmpValue = inputObj.textContent;
		if(!tmpValue)tmpValue = inputObj.innerHTML;
		ajax_list_activeInput.value = tmpValue;


		if (document.getElementById(ajax_list_activeInput.name + '_hidden')) {
		  document.getElementById(ajax_list_activeInput.name + '_hidden').value = inputObj.id;
		}

//alert(inputObj.id+'\n\n'+tmpValue);
		if (document.getElementById(ajax_list_activeInput.name + '_moniker_hidden')) {		
//alert('set id to /'+inputObj.id+'/');		
		  document.getElementById(ajax_list_activeInput.name + '_moniker_hidden').value = inputObj.id;

  		  if (document.getElementById(ajax_list_activeInput.name + '_hidden')) {
		    document.getElementById(ajax_list_activeInput.name + '_hidden').value = tmpValue;
		  }
		}

//brs  		var f1=setTimeout('ajax_list_activeInput.focus()',1);
//brs  		var f2=setTimeout('ajax_list_activeInput.value = ajax_list_activeInput.value',1);

		ajax_options_hide();

//ST 
		if (document.getElementById(ajax_list_activeInput.name)) {
			document.getElementById(ajax_list_activeInput.name).focus();
			document.getElementById(ajax_list_activeInput.name).blur();  			
		}
		
	}

	
	//*************************************
	//ajax_options_hide
	//*************************************
	function ajax_options_hide()
	{
//	alert('hide!');
		if(ajax_optionDiv)ajax_optionDiv.style.display='none';
		if(ajax_optionDiv_iframe)ajax_optionDiv_iframe.style.display='none';
	}

	
	//*************************************
	//ajax_options_rollOverActiveItem
	//*************************************
	function ajax_options_rollOverActiveItem(item,fromKeyBoard)
	{
		if(ajax_list_activeItem)ajax_list_activeItem.className='optionDiv';
		item.className='optionDivSelected';
		ajax_list_activeItem = item;

		if(fromKeyBoard){
			if(ajax_list_activeItem.offsetTop>ajax_optionDiv.offsetHeight){
				ajax_optionDiv.scrollTop = ajax_list_activeItem.offsetTop - ajax_optionDiv.offsetHeight + ajax_list_activeItem.offsetHeight + 2 ;
			}
			if(ajax_list_activeItem.offsetTop<ajax_optionDiv.scrollTop)
			{
				ajax_optionDiv.scrollTop = 0;
			}
		}
	}

	
	//*************************************
	//ajax_option_list_buildList
	//*************************************
	function ajax_option_list_buildList(letters,paramToExternalFile)
	{
		ajax_optionDiv.innerHTML = '';
		ajax_list_activeItem = false;
		if(ajax_list_cachedLists[paramToExternalFile][letters.toLowerCase()].length <= 1) {
			ajax_options_hide();
			return;
		}

		ajax_list_optionDivFirstItem = false;
		var optionsAdded = false;

		for(var no=0;no<ajax_list_cachedLists[paramToExternalFile][letters.toLowerCase()].length;no++){
			if(ajax_list_cachedLists[paramToExternalFile][letters.toLowerCase()][no].length==0)continue;
			optionsAdded = true;
			var div = document.createElement('DIV');		
			
			if (ajax_list_skip_fields>0 && no==0) {
			    var tabs = ajax_list_cachedLists[paramToExternalFile][letters.toLowerCase()][no].split('\t');
			    if (tabs.length>=ajax_list_skip_fields) {
			        ajax_list_cachedLists[paramToExternalFile][letters.toLowerCase()][no] = tabs[ajax_list_skip_fields];
			    }
			}
			
			var items = ajax_list_cachedLists[paramToExternalFile][letters.toLowerCase()][no].split(/###/gi);

			if(ajax_list_cachedLists[paramToExternalFile][letters.toLowerCase()].length==1 && ajax_list_activeInput.value == items[0]){
				ajax_options_hide();
				return;
			}

			// brs, for QAS, split moniker (60 characters) into ID and the rest into content
			if (items.length == 1) {
			    var temp = items[0];
			    if (temp.length > 60) {
			    	items[0] = temp.substr(0,60);
			    	items[1] = temp.substr(60);
//alert(temp);			
//alert('[0]: '+items[0]+'\n[X]: '+items[items.length-1]);			
			    }
			}

//alert(items.length-1);			
//alert('[0]: '+items[0]+'\n[X]: '+items[items.length-1]);			
			div.innerHTML = items[items.length-1];
			div.id = items[0];
			div.className='optionDiv';
			div.onmouseover = function(){ ajax_options_rollOverActiveItem(this,false) }
			div.onclick = ajax_option_setValue;
			
			if(!ajax_list_optionDivFirstItem)ajax_list_optionDivFirstItem = div;
			ajax_optionDiv.appendChild(div);
						
		}
		if(optionsAdded){
			
			ajax_optionDiv.style.display='block';
			if(ajax_optionDiv_iframe)ajax_optionDiv_iframe.style.display='';
			ajax_options_rollOverActiveItem(ajax_list_optionDivFirstItem,true);
		}

	}

	
	//*************************************
	//ajax_option_list_showContent
	//*************************************
	function ajax_option_list_showContent(ajaxIndex,inputObj,paramToExternalFile,whichIndex)
	{
		if(whichIndex!=currentListIndex)return;
		var letters = inputObj.value;
		var content = ajax_list_objects[ajaxIndex].response;
		var elements = content.split('|');

		ajax_list_cachedLists[paramToExternalFile][letters.toLowerCase()] = elements;
		ajax_option_list_buildList(letters,paramToExternalFile);

	}

	
	//*************************************
	//ajax_option_resize
	//*************************************
	function ajax_option_resize(inputObj)
	{
		ajax_optionDiv.style.top = (ajax_getTopPos(inputObj) + inputObj.offsetHeight + ajaxBox_offsetY) + 'px';
		ajax_optionDiv.style.left = (ajax_getLeftPos(inputObj) + ajaxBox_offsetX) + 'px';
		
		if (ajaxBox_width != 0) ajax_optionDiv.style.width = ajaxBox_width + 'px';	
				
		if(ajax_optionDiv_iframe){
			ajax_optionDiv_iframe.style.left = ajax_optionDiv.style.left;
			ajax_optionDiv_iframe.style.top = ajax_optionDiv.style.top;
		}

	}

	//*******************************************
	// ajax_showOptions_createDiv
	//--------------------------------------------
	//* brs, moved into a separate function (to be called onload in the body now)
	//       as it was causing certain versions of IE6 to lose focus while typing
	//********************************************
	function ajax_showOptions_createDiv() {	
		if(!ajax_optionDiv){
						
			ajax_optionDiv = document.createElement('DIV');
			ajax_optionDiv.id = 'ajax_listOfOptions';			
			document.body.appendChild(ajax_optionDiv);

			if(ajax_list_MSIE){
				ajax_optionDiv_iframe = document.createElement('IFRAME');
				ajax_optionDiv_iframe.border='0';
				ajax_optionDiv_iframe.style.width = ajax_optionDiv.clientWidth + 'px';
				ajax_optionDiv_iframe.style.height = ajax_optionDiv.clientHeight + 'px';				
				ajax_optionDiv_iframe.id = 'ajax_listOfOptions_iframe';

				document.body.appendChild(ajax_optionDiv_iframe);
			}

			
			var allInputs = document.getElementsByTagName('INPUT');
			for(var no=0;no<allInputs.length;no++){
				if(!allInputs[no].onkeyup)
				if(!allInputs[no].onfocus) //PI - DONT OVERRIDE ONFOCUS EVENTS IF THEY EXIST!!!
				  allInputs[no].onfocus = ajax_options_hide; 
			}

			
			var allSelects = document.getElementsByTagName('SELECT');
			
			for(var no=0;no<allSelects.length;no++){
				if(!allInputs[no].onfocus)
				allSelects[no].onfocus = ajax_options_hide;
			}

			var oldonkeydown=document.body.onkeydown;
			if(typeof oldonkeydown!='function'){
				document.body.onkeydown=ajax_option_keyNavigation;
			}else{
				document.body.onkeydown=function(){
					oldonkeydown();
				ajax_option_keyNavigation() ;}
			}

			ajax_options_hide();			
		}
	}
	
	//*************************************
	//ajax_showOptions
	//*************************************
	function ajax_showOptions(inputObj,paramToExternalFile,e)
	{
		if(e.keyCode==13 || e.keyCode==9) return;
		
		if(ajax_list_currentLetters[inputObj.name]==inputObj.value)
			return;
		if(!ajax_list_cachedLists[paramToExternalFile])
			ajax_list_cachedLists[paramToExternalFile] = new Array();
			
		ajax_list_currentLetters[inputObj.name] = inputObj.value;
		
//brs
			var oldonresize=document.body.onresize;
			if(typeof oldonresize!='function'){
				document.body.onresize=function() {ajax_option_resize(inputObj); };
			}else{
				document.body.onresize=function(){oldonresize();
				ajax_option_resize(inputObj) ;}
			}
		
		if(inputObj.value.length<minimumLettersBeforeLookup){
			ajax_options_hide();
			return;
		}


		ajax_optionDiv.style.top = (ajax_getTopPos(inputObj) + inputObj.offsetHeight + ajaxBox_offsetY) + 'px';
		ajax_optionDiv.style.left = (ajax_getLeftPos(inputObj) + ajaxBox_offsetX) + 'px';

		if (ajaxBox_width != 0) ajax_optionDiv.style.width = ajaxBox_width + 'px';	
							
		if(ajax_optionDiv_iframe){
			ajax_optionDiv_iframe.style.left = ajax_optionDiv.style.left;
			ajax_optionDiv_iframe.style.top = ajax_optionDiv.style.top;
		}

		ajax_list_activeInput = inputObj;
		ajax_optionDiv.onselectstart =  ajax_list_cancelEvent;
		currentListIndex++;
		
//--------------------------------------------------------------------
// ST -	Removed the check if input is in cache
//			this will always retrieve from server
//--------------------------------------------------------------------
//		if(ajax_list_cachedLists[paramToExternalFile][inputObj.value.toLowerCase()]){
//			ajax_option_list_buildList(inputObj.value,paramToExternalFile,currentListIndex);
//		}else{
			var tmpIndex=currentListIndex/1;
			ajax_optionDiv.innerHTML = '';
			var ajaxIndex = ajax_list_objects.length;
			ajax_list_objects[ajaxIndex] = new sack();

			var url = ajax_list_externalFile + '?' + paramToExternalFile + '=1&'+ajax_list_letters_name+'=' + inputObj.value.replace(" ","+") + ajax_list_append;
//alert(ajax_list_append);
			ajax_list_objects[ajaxIndex].requestFile = url;	// Specifying which file to get			
			ajax_list_objects[ajaxIndex].onCompletion = function(){ ajax_option_list_showContent(ajaxIndex,inputObj,paramToExternalFile,tmpIndex); };	// Specify function that will be executed after file has been found			
			ajax_list_objects[ajaxIndex].runAJAX();		// Execute AJAX function			
//		}

	}

	
	//*************************************
	//ajax_option_keyNavigation
	//*************************************
	function ajax_option_keyNavigation(e)
	{
		if(document.all)e = event;

		if(!ajax_optionDiv)return;
		if(ajax_optionDiv.style.display=='none')return;

		if(e.keyCode==38){	// Up arrow
			if(!ajax_list_activeItem)return;
			if(ajax_list_activeItem && !ajax_list_activeItem.previousSibling)return;
			ajax_options_rollOverActiveItem(ajax_list_activeItem.previousSibling,true);
		}

		if(e.keyCode==40){	// Down arrow
			if(!ajax_list_activeItem){
				ajax_options_rollOverActiveItem(ajax_list_optionDivFirstItem,true);
			}else{
				if(!ajax_list_activeItem.nextSibling)return;
				ajax_options_rollOverActiveItem(ajax_list_activeItem.nextSibling,true);
			}
		}

		if (e.keyCode==13 || e.keyCode==9) {	// Enter key or tab key
			if (ajax_list_activeItem && ajax_list_activeItem.className=='optionDivSelected') {
				ajax_option_setValue(false,ajax_list_activeItem);
			}
			if (e.keyCode==13) {
				return false; 
			} else {
				return true;
			}
		}
		if (e.keyCode==27) {	// Escape key
			ajax_options_hide();
		}
	}

	document.documentElement.onclick = autoHideList;

	
	//*************************************
	//autoHideList
	//*************************************
	function autoHideList(e)
	{
		if (document.all) e = event;

		if (e.target) source = e.target;
			else if (e.srcElement) source = e.srcElement;
			if (source.nodeType == 3) // defeat Safari bug
				source = source.parentNode;
		if (source.tagName.toLowerCase() != 'input' && source.tagName.toLowerCase() != 'textarea') ajax_options_hide();
	}
	
