var preselectedTown = 0;
var imageCount = 1;
var selectedImage = 0;
var doTownRegionLookup = true;

function disableTownRegionLookup() {
	doTownRegionLookup = false;
}

function enableTownRegionLookup() {
	doTownRegionLookup = true;
}

function lookup(evt, str, contextPath) {

	if (doTownRegionLookup) {
		var kCode;
		if (!evt) {
			evt = window.event;
		}
		if (evt.keyCode) {
			kCode = evt.keyCode;
		} else {
			if (evt.which) {
				kCode = evt.which;
			}
		}
		if (kCode==8 || kCode==32 || kCode==46 || (kCode>47 && kCode<112)) {
		
			var delimCharPos = str.indexOf("&");
			if(delimCharPos!=-1)
				searchStrLen = delimCharPos;
			else
				searchStrLen = str.length;
				
			if (searchStrLen > 2) {
				var url = contextPath + "/travelSubmit.do?actionCmd=lookup&searchString=" + str;
				// Set preselected town to minus1, so that the first down arrow
				// selects the item in position 0
				preselectedTown = -1;
				retrieveURL(url, "travelForm", "POST");
			} else {
				document.getElementById("ajax").innerHTML = "";
			}
		}
	}
}


function selectTown(str) {
	if (document.getElementById("townSearchString").style.visibility == "visible") {
		document.getElementById("townSearchString").value = str.replace(/^\s+|\s+$/g,"");
	} else if (document.getElementById("regionSearchString").style.visibility == "visible") {
		document.getElementById("regionSearchString").value = str.replace(/^\s+|\s+$/g,"");
	}
	document.getElementById("ajax").innerHTML = "";
}

function preselectTown(id) {
	if (preselectedTown == id) {
		document.getElementById("ls_" + id).style.backgroundColor = "#FFE300";
	} else {
		if (document.getElementById("ls_" + id)) {
			// If we have a preselected town, turn it back to white
			if (preselectedTown >= 0) {
				document.getElementById("ls_" + preselectedTown).style.backgroundColor = "white";
			}
			document.getElementById("ls_" + id).style.backgroundColor = "#FFE300";
			preselectedTown = id;
		}
	}
}

var scrollLeeway = 0; // From the top of the list box
var maxScrollLeeway = 4;
var scrollAmount = 1; // we will do a page up, page down for IE6

//document.onkeydown = handleKeyPress;
function handleKeyPress(evt, pageType) {
	var kCode;
	if (!evt) {
		evt = window.event;
	}
	if (evt.keyCode) {
		kCode = evt.keyCode;
	} else if (evt.which) {
		kCode = evt.which;
	}
	if (kCode == 38) {
		// Up arrow.
		evt.cancelBubble = true;
		if (evt.stopPropagation) {
			evt.stopPropagation();
		}
		scrollUpList(preselectedTown);
	} else if (kCode == 40) {
		// Down arrow.
		evt.cancelBubble = true;
		if (evt.stopPropagation) {
			evt.stopPropagation();
		}
		scrollDownList(preselectedTown);
	}	else if (kCode == 13) {
		// Enter.
		if (document.getElementById("ls_" + preselectedTown)) {
			selectTown(document.getElementById("ls_" + preselectedTown).innerHTML);
			evt.cancelBubble = true;
			if (evt.stopPropagation) {
				evt.stopPropagation();
			}
			updateRegion(pageType);
		}
	} else if (kCode == 9) {
		// Tab.
		if (document.getElementById("ls_" + preselectedTown)) {
			selectTown(document.getElementById("ls_" + preselectedTown).innerHTML);
			evt.cancelBubble = true;
			if (evt.stopPropagation) {
				evt.stopPropagation();
			}
		}
	} else if (kCode == 39) {
		// RightArrow.
		if (document.getElementById("ls_" + preselectedTown)) {
			selectTown(document.getElementById("ls_" + preselectedTown).innerHTML);
			evt.cancelBubble = true;
			if (evt.stopPropagation) {
				evt.stopPropagation();
			}
		}
	}
	return true;
}

function scrollDownList(preselectedTown) {
	preselectTown(preselectedTown + 1);
	if (scrollLeeway >= maxScrollLeeway) {
		if (document.getElementById("ls_" + (preselectedTown - scrollLeeway)) != undefined) {
			var newLocation = document.getElementById("ls_" + (preselectedTown - scrollLeeway)).offsetTop;
			document.getElementById("liveSearch").scrollTop = newLocation;
		}
	} else {
		scrollLeeway++;
	}
}

function scrollUpList(preselectedTown) {
	preselectTown(preselectedTown - 1);
	if (scrollLeeway <= 0 || maxScrollLeeway == 0) {
		if (document.getElementById("ls_" + (preselectedTown - scrollLeeway)) != undefined) {
			var newLocation = document.getElementById("ls_" + (preselectedTown + scrollLeeway)).offsetTop;
			document.getElementById("liveSearch").scrollTop = newLocation;
		}
	} else {
		scrollLeeway--;
	}
}

/** Eventy handlers for the bodgied up and down arrows which will only appear in IE6 **/
function handleIeListUpButton() {
	// If we use these functions, then we are using IE6 which will have a smaller scroll area
	maxScrollLeeway = 0;
	scrollAmount = 4;
	scrollUpList(preselectedTown - scrollAmount <= 0 ? 1 : preselectedTown - scrollAmount);
}

function handleIeListDownButton() {
	// If we use these functions, then we are using IE6 which will have a smaller scroll area
	maxScrollLeeway = 0;
	scrollAmount = 4;
	scrollDownList(preselectedTown + scrollAmount);
}

document.onkeyup = handleKeyUp;
function handleKeyUp(evt)
{
	var kCode;
	if (!evt) {
		evt = window.event;
	}
	if (evt.keyCode) {
		kCode = evt.keyCode;
	} else {
		if (evt.which) {
			kCode = evt.which;
		}
	}
	if (kCode == 9)
	{
		// Tab
		if (document.getElementById("ls_" + preselectedTown))
		{
			if (document.getElementById("ls_" + preselectedTown).innerHTML)
			{
				selectTown(document.getElementById("ls_" + preselectedTown).innerHTML);
				evt.cancelBubble = true;
				if (evt.stopPropagation)
				{
					evt.stopPropagation();
				}
		  }
		}
	}
}

function trapEnterForSubmit(evt, pageType) {
	var kCode;
	if (!evt) {
		evt = window.event;
	}
	if (evt.keyCode) {
		kCode = evt.keyCode;
	} else if (evt.which) {
		kCode = evt.which;
	}
	if (kCode == 13) {
		// Enter.
		evt.cancelBubble = true;
		if (evt.stopPropagation) {
			evt.stopPropagation();
		}
		enableGo();
		updateRegion(pageType);			
	}
}



function updateRegion(pageType) 
{
/**
	if (document.getElementById("searchString").value)
	{
		var str = document.getElementById("searchString").value;
		var url = "travelSubmit.do?actionCmd=go&searchString=" + str;
		retrieveURL(url, "travelForm", "POST");		
	}
**/
	if (pageType == null || pageType == "null") {
		pageType = "";
	}
	document.getElementById("actionCmd").value = "go_" + pageType;
	var form = document.getElementById("travelForm");
	form.submit();
}

function updateRegionNoSubmit(pageType) 
{
	var form = document.getElementById("travelForm");

	if (pageType == null || pageType == "null") {
		pageType = "";
	}
	form.elements["actionCmd"].value = "go_" + pageType;
}

function updateRegionSearch(pageType, searchString) 
{
	if (document.getElementById("regionSearchString").value && pageType == "region")
	{
		document.getElementById("regionSearchString").value = searchString;
	}
	if (document.getElementById("townSearchString").value && pageType == "town")
	{
		document.getElementById("townSearchString").value = searchString;
	}

	if (pageType == null || pageType == "null") {
		pageType = "";
	}
	document.getElementById("actionCmd").value = "go_" + pageType;
	var form = document.getElementById("travelForm");
	form.submit();
}


/*
	Update images on accommodation details page and accommodation summary list page
*/
function updateImage(imageId, imageUrls, updateValue) {
	
	if (imageId == null || imageUrls == null || updateValue == null) {
		alert("Error has occurred!");
		return;
	} 
	var prev_only_html = "<a class='nagivator_link' href='javascript:updateImage(\"" +imageId+"\",\""+ imageUrls + "\", -1)'><font class='blue_2pt'>previous</font></a>";
	var prev_next_html = "<a class='nagivator_link' href='javascript:updateImage(\""+imageId+"\",\""+ imageUrls +"\", -1)'><font class='blue_2pt'>previous</font></a>" 
					   + "<a class='nagivator_link' id='nextImage' href='javascript:updateImage(\""+imageId+"\",\""+ imageUrls +"\", 1)'><font class='blue_2pt'>next</font></a>";
	var next_only_html = "<a class='nagivator_link' href='javascript:updateImage(\""+imageId+"\",\""+ imageUrls +"\", 1)'><font class='blue_2pt'>next</font></a>";				   

	var oImage = document.getElementById(imageId);
	
	// Calculate the index value
	var index = parseInt(oImage.className) + parseInt(updateValue);
	
	if (parseInt(index) < 0) {
		index = 0;
	} 
	oImage.className = index;
	var imageArray = imageUrls.split(";");
	if (imageArray != null && index < imageArray.length) {
		var oImageNavigator = document.getElementById('imageNavigator'+imageId);
		if (oImageNavigator != 'undefined' && oImageNavigator != null) {
			oImageNavigator.className = '';
			if (index > 0 && index < imageArray.length-1) {
				oImageNavigator.innerHTML = prev_next_html;
			} else if (index == imageArray.length-1) {
					oImageNavigator.innerHTML = prev_only_html;
			} else if (index == 0) {
					oImageNavigator.innerHTML = next_only_html;
					oImageNavigator.className = 'next_only_span';
			}
		}
		
		oImage.src = imageArray[index];
	}
}


function setImageCount(count)
{
  imageCount = count;
}
function previousImage()
{
	if (selectedImage > 0)
	{
	  var oldSelectedImage = selectedImage;
	  selectedImage = selectedImage - 1;
	  var newImage = document.getElementById('imageId_' + selectedImage);
	  newImage.style.display = 'inline';
	  var oldImage = document.getElementById('imageId_' + oldSelectedImage);
	  oldImage.style.display = 'none';	
	  
	  showClickToView(newImage.id);
	}
	resetPrevious();
	resetNext();	
	return;
}
function nextImage()
{
  if (selectedImage < imageCount-1)
  {
	  var oldSelectedImage = selectedImage;  
	  selectedImage = selectedImage + 1;
	  var newImage = document.getElementById('imageId_' + selectedImage);
	  newImage.style.display = 'inline';
	  var oldImage = document.getElementById('imageId_' + oldSelectedImage);
	  oldImage.style.display = 'none';	
	  
	  showClickToView(newImage.id);
	}
	resetPrevious();
	resetNext();
	return;
}

/**
 * Function responsible for displaying text "click to view" above image
 * this function reads the URL of the large image in the onclick attribute of
 * the image tag
 */
function showClickToView(imageId)
{
	// if the 1st character in the largeImageUrl is a " (double quote) this 
	// means that we do not have a large URL
	var clickToViewElement = document.getElementById("clickToView");
	
	if(clickToViewElement == null)
	{
		return;
	}
	 
	if(largeImageExists(imageId))
	{
		clickToViewElement.style.display = 'block'
	}
	else
	{
		clickToViewElement.style.display = 'none'
	}
}


function changeCursor(imageId)
{
	var imageElement = document.getElementById(imageId);
	if(largeImageExists(imageId))
	{
		imageElement.style.cursor = "pointer"
	}
	else
	{
		imageElement.style.cursor = "default";
	}
}


function largeImageExists(imageId)
{
	
	var imageElement = document.getElementById(imageId);
	//alert("imageElement [" + typeof(imageElement.onclick) + "]");
	if(imageElement.onclick == null)
	{
		return false;
	}

	var largeImageUrl = ""+imageElement.onclick;
	
	var prefix = "showImagePopup(\"";
	largeImageUrl = largeImageUrl.substring(largeImageUrl.indexOf(prefix)+prefix.length);
	  
	if(largeImageUrl[0] == '"')
	{
		return false;
	}
	else
	{
		return true;
	}
}

function resetPrevious()
{
	var previous = document.getElementById('previousId');
	if (selectedImage == 0)
	{
		previous.style.cursor = 'arrow';
		previous.style.visibility = 'hidden';
	}
	else
	{
		previous.style.cursor = 'pointer';
		previous.style.visibility = 'visible';
	}
}

function resetNext()
{
	var next = document.getElementById('nextId');
	if (selectedImage == imageCount-1)
	{
		next.style.cursor = 'arrow';
		next.style.visibility = 'hidden';
	}
	else
	{
		next.style.cursor = 'pointer';
		next.style.visibility = 'visible';
	}
}


 
