var viaCount=0;
var viaCountDropDown=0;
var processingError=false;
var viaLimit=3; // limited to 4
var errorCol = "#fe8600";
var ROUTE_CONFIRMED = false;



      
      

function populateFields(from, to, confFrom, confTo)
{
	// Determine the database
	var radioGB = document.getElementById("dbGB");
	var radioIreland = document.getElementById("dbIreland");
	var radioEurope = document.getElementById("dbEurope");
	
	if (radioGB.checked)
		setDatabase("B");
	else if (radioIreland.checked)
		setDatabase("I");
	else if (radioEurope.checked)
		setDatabase("E");

	processingError=false; // reset

	//set background color of inputs to white
		setWhiteBG(from);
		setWhiteBG(to);
	
	// search from and to if it is a new value
	if(isNewFromValue&&searchPlace(from)){populateField(confFrom,from)};
	if(isNewToValue&&searchPlace(to)){populateField(confTo,to)};
	//now process the vias
	for(count=0; count<viaCount; count++)
	{
		var viaName = "via"+count.toString();
		var inputId = document.getElementById("via"+count.toString());
		var isNewValue=eval("isNewVia" + count.toString() + "Value");
		setWhiteBG(inputId);

		if(isNewValue)
		{
			//clear matches and values
			var strViaID="viaChoice" + count + "Matches";
			$("#" + strViaID).html("").hide();
			$("#viaChoice" + count).val("");
		}
		if(inputId.value.length != 0)
		{
			if(isNewValue&&searchPlace(inputId))
			{
				//create a via drop down and populate
				var dropId = document.getElementById("viaChoice"+count.toString());
				populateField(dropId,inputId);
			}
		}
	}

	showConfirmRoute();
}


function searchPlace(searchField)
{
	//set background spinner
	var $searchField=$("#" + searchField.id);
	$searchField.css({'background-image':'url(/images/routes/ajax-spinner-white-16.gif)','background-repeat':'no-repeat','background-position':'98% 50%'});
	
	//clear matches
	if(searchField.id=="routeFrom")
	{
		$("#confirmFromMatches").html("").hide();
	}
	else if (searchField.id=="routeTo")
	{
		$("#confirmToMatches").html("").hide();
	}

	
	getNewValues(searchField.value);

	if(hasError())
	{
		searchField.value=getError();
		setErrorBG(searchField);
		processingError=true;
		return false;
	} else {
		// clear any error colours
		setWhiteBG(searchField);
	}
	//return boolean if search ok
	return true;
}

function populateField(resField,inpField)
{
	//reset options
	//resField.options.length=0;
	resField.value="";
	var res = getResults();

	var strMatchSummary="";
	var strSelectHTML="";
	var strPlace="";
	var $tmpMatchElem=$("#" + resField.id + "Matches");
	$tmpMatchElem.html("").hide();

	var strHTMLPlace="";
	for(cnt = 0; cnt < res.length; cnt++)
	{
		//var optn = new Option();
		//optn.text = res[cnt][0];
		//optn.value = res[cnt][1];
		
		//set display and hidden input
		if(cnt==0) {
			inpField.value=res[cnt][0];
			resField.value=res[cnt][1];
		}
		
		strPlace=new String(res[cnt][0]);
		if(strPlace.length>40)
		{
			strPlace=strPlace.slice(0,37) + "...";
		}
		
		strHTMLPlace=res[cnt][1].replace(/'/g,'&#8217;');
		strSelectHTML+="\n<div class='matchplace' node='" + strHTMLPlace + "'><a href='#' onclick=" + '"selectNodeMatch(' + "'" + strHTMLPlace + "','" + resField.id + "','" + inpField.id + "');return false;" + '">' + strPlace + "</a></div>";

	}

	//show if more than 1 match
	if(cnt>1) {
    strMatchSummary=cnt + " matches";
    strMatchSummary+=" found -  <a href='#' id='linkToggle" + resField.id + "' onclick=" + '"toggleMatchList(this,' + "'" + resField.id + "-list');return false;" + '"' + ">select from list</a>";
    strSelectHTML="<div id='" + resField.id + "-list' class='matchWrapper'>" + strSelectHTML + "</div>";
	$tmpMatchElem.html(strMatchSummary + strSelectHTML).show();
	}	
	
	//set true/false value for ID to prevent redundant lookup
	resetInputNewValue(inpField.id,false);
}


function resetInputNewValue(inputID,blnValue)
{
  switch(inputID) {
    case "routeTo":
      isNewToValue=blnValue;
      break;
    case "routeFrom":
      isNewFromValue=blnValue;
      break;
      case "via0":
      isNewVia0Value=blnValue;
      break;
      case "via1":
      isNewVia1Value=blnValue;
      break;
      case "via2":
      isNewVia2Value=blnValue;
      break;
      case "via3":
      isNewVia3Value=blnValue;
      break;
      case "via4":
      isNewVia4Value=blnValue;
      break;
      case "via5":
      isNewVia5Value=blnValue;
      break;
      default:
      break;
  }
  
}


function showConfirmRoute() {
	if(!processingError)
	{
		ROUTE_CONFIRMED = true;
	}
}

/** creates a via input box if max vias (viaLimit) has not been reached **/
function createVia()
{
	if(viaCount>viaLimit)
	{
		$("#routeMessage").html("Sorry, only " + (viaLimit+1) + " via locations allowed.").show();
		forceRepaint();
		return false;
	}
	var message="Please enter a location";
	if(viaCount!=0)
	{
		//check previous via is populated otherwise don't create another
		var prev = document.getElementById("via"+(viaCount-1).toString());
		if(prev.value.length == 0 || prev.value == message)
		{
			prev.value = message;
			setErrorBG(prev);
			return false;
		} else {
			// clear the error background colour
			setWhiteBG(prev);
		}
	}
	var viaId="via"+viaCount.toString();

	//viaHtmlInput = '<label for=\"'+viaId+'\">Via: <input id=\"'+viaId+'\" type=\"Text\" class=\"routeText\"></label>';

	var label = $('<label>Via: </label>');
	label.attr('for', viaId);

	var $inputWrapper=$('<div class="inputViaWrapper"><a href="#" onclick="removeVia(' + viaCount + ');" class="removeVia"><img width="10" height="10" alt="Remove via" src="/images/routes/btn-10-close.gif"/></a></div>');
	var input = $('<input type="text" class="routeTextVia" />');
	input.attr("id", viaId);
	input.keypress(searchFieldKeypress);
	
	$inputWrapper.append(input);
	

	var c = $("#inputFields");
	var newdiv = $('<div class="twocolinp"></div>');
  var inpHidden= $('<input type="hidden" id="viaChoice' + viaCount + '">');
	newdiv.attr("id", "routeVia"+viaCount);

	newdiv.append(label);
	newdiv.append($inputWrapper);
	newdiv.append(inpHidden);
	
	var viaMatchesElem=$('<div id="viaChoice' + viaCount + 'Matches" class="locSearchMatches"></div>');
	c.append(newdiv);
	c.append(viaMatchesElem);

	//set new via value
	resetInputNewValue(viaId,true);
	
	forceRepaint();

		
	viaCount++;
	if(viaCount >= viaLimit) {
		$('div > .via').text('');
	}
	return false;
}

function createViaDropDownOLD()
{
	var dropDownId = "viaChoice"+viaCountDropDown.toString() + "Matches";
	viaCountDropDown++;
	
	var viaHtmlDropdown = '<label for=\"'+dropDownId+'\">Via: <select id=\"'+dropDownId+'\" class=\"routeText\"></select></label>';
	var c = document.getElementById("dropdownFields");
	var newdiv = document.createElement("div");
	newdiv.setAttribute("id", "viaDropDown"+viaCountDropDown);
	newdiv.innerHTML = viaHtmlDropdown;
	c.appendChild(newdiv);
	return dropDownId;
}

function createViaDropDown()
{
  var dropDownId = "viaChoice"+viaCountDropDown.toString();
	viaCountDropDown++;
	return dropDownId;
}

function clearViaMatches()
{
	for(var inc = 0; inc <= viaCount; inc++)
	{
		//clear confirm value and matches if new value
		if($("isNewVia"+inc + "Value"))
		{
			var c = $("#viaChoice"+inc.toString());
			c.html="";
			
			//clear matches
			var m = $("#viaChoice"+inc.toString() + "Matches");
			m.html("").hide();
		}
		
	}
}

function clearViaInputs()
{
	for(var inc = 0; inc <= viaCount; inc++)
	{
		var c = $("#routeVia"+inc.toString());
		//p.remove(c);
		c.remove();
	}
	viaCount=0; // reset
}

function removeVia(viaNo)
{
	$("#routeMessage").text("").hide();
	if(viaNo!=(viaCount-1))
	{
		$("#routeMessage").text("Please remove the last 'via' first!").show();
		return;
	}
	else {
		var $elem=$("#routeVia" + viaNo);
		$elem.remove();
		var $elemMatches=$("#viaChoice" + viaNo + "Matches");
		$elemMatches.remove();
		forceRepaint();
		viaCount--;
	}
}



function reverseRoute()
{

	var tmpFromPlace=$("#routeFrom").val();
	var tmpToPlace=$("#routeTo").val();
	var tmpFromSelect=$("#confirmFrom").val();
	var tmpToSelect=$("#confirmTo").val();
	
	if(tmpFromSelect==''||tmpToSelect=='')
	{
		$("#routeMessage").text("Please request a route before reversing.").show();
		return;
	}
	
	//get current via inputs
	var arrViaText=new Array();
	var arrViaOptions=new Array();

	for (var i=0;i<viaCount;i++)
	{
		arrViaText.push($("#via"+i).val());
    	arrViaOptions.push($("#viaChoice" + i).val())
		//arrViaSelectedIndex.push($("#viaChoice" + i).attr("selectedIndex"));
	}

	$("#routeFrom").val(tmpToPlace);
	$("#routeTo").val(tmpFromPlace);
	$("#confirmFrom").val(tmpToSelect);	
  	$("#confirmTo").val(tmpFromSelect);
		
	//set via options to reverse via select options
	arrViaText.reverse();
	arrViaOptions.reverse();


  for (var i=0;i<viaCount;i++)
	{
  	  $("#via" + i).val(arrViaText[i]);
  	  $("#viaChoice" + i).val(arrViaOptions[i]);
 	}

 	 //scrollToID("mapcontainer");
	
    //tidy up
    tmpFromPlace='';
	tmpToPlace='';
	tmpFromSelect='';
	tmpToSelect='';
	arrViaText='';
	arrViaOptions='';
	
	//don't do gaz lookup 
	resetNewValues(false);
	
	//resubmit route
 	 getRouteAndDestinationHotelsAndAds();
}


/** Keypress event handler for route search */
function searchFieldKeypress(e) {
	if(e.which == 13) {
		showLoading();
		$("#classiclink").hide();
		var routeFrom = document.getElementById("routeFrom");
		var routeTo = document.getElementById("routeTo");
		var confirmFrom = document.getElementById("confirmFrom");
		var confirmTo = document.getElementById("confirmTo");		
		populateFields(routeFrom,routeTo,confirmFrom,confirmTo);
		if (!processingError) {
			getRouteAndDestinationHotelsAndAds();
		} else {
			hideLoading();
		}
	}
}

function reset() {
	clearViaDropDowns();
	return true;
}

function resetInputFields()
{
		// Delete the from and to text
		var fromText = document.getElementById("routeFrom");
		var toText = document.getElementById("routeTo");
		setWhiteBG(fromText);
		fromText.value = "";
		setWhiteBG(toText);
		toText.value = "";
		
		// Remove all via inputs
		clearViaInputs();
		
		//reset new value booleans and clear matches
		resetNewValues(true);
}

function resetNewValues(blnNewValue)
{
			
			//clear any matches
			$(".locSearchMatches").html("").hide();
			
			if(blnNewValue==undefined || (blnNewValue!=true&&blnNewValue!=false)) blnNewValue=true;
		
			//reset new value booleans
			isNewFromValue=blnNewValue;
			isNewToValue=blnNewValue;
			isNewVia0Value=blnNewValue;
			isNewVia1Value=blnNewValue;
			isNewVia2Value=blnNewValue;
			isNewVia3Value=blnNewValue;
			isNewVia4Value=blnNewValue;
}

function setDatabase(db) {
	database = db;
}

function getDatabase() {
	return database;
}

/** convenience function for setting the background to errorCol on the given widget **/
function setErrorBG(widget) {
	//widget.setAttribute("style", "background-color: " + errorCol);
	widget.style.backgroundImage = "none";
	widget.style.backgroundColor = errorCol;

}

/** convenience function for setting the background white on the given widget **/
function setWhiteBG(widget) {
	//widget.setAttribute("style", "background-color: #FFFFFF;");
	widget.style.backgroundImage = "none";
	widget.style.backgroundColor = "#FFFFFF";
}

function toggleMatchList(obj,id)
{
  //set all to hidden
  var $elem=$("#" + id);
  
  var tmpDisplayValue=$elem.css("display");

  //hide all
  $(".matchWrapper").hide().css("position","static");
  
  //if originally hidden, then display
  if(tmpDisplayValue=="none") {
    $elem.show();
	
	//set page absolute position...
	var pos=$elem.position();
	$elem.css({ position: "absolute",
				marginLeft: 0, marginTop: 0,
				top: pos.top+2, left: pos.left });
	/*
	$elem.focus();
	
	$elem.bind("blur",function (e) {
        obj.innerHTML="select from list";
		alert(e.relatedTarget);

		$elem.hide();
		return true;
    });
	*/

    //change link text
    obj.innerHTML="hide list";
  }
  else {
    obj.innerHTML="select from list";
  }
  
  //set focus and blur
  
 
  
  return false;
}

function setInternalAd(imgURL,imgHref,imgAlt)
{


 	var adHTML='<a href="' + imgHref + '">'
	+ '<img src="' + imgURL + '"'
	+ ' alt="' + imgAlt + '" /></a>';

	    $("#internalAdvert").html(adHTML);
 	    $("#nearbyHotels").html("");
	    $("#internalAdvert").show();
    	   
}

function selectNodeMatch(gazstring,id,inputid)
{
  $("#" + id).val(gazstring);
  $("#" + inputid).val(getPlaceFromGazString(gazstring));
  $("#" + id + "-list").hide();
  $("#linkToggle" + id).text("select from list");
  return false;
}

function getPlaceFromGazString(gazstring)
{
  if(gazstring!=""&&gazstring!=null)
  {
    var arrGazString=gazstring.split("|");
    var placeName=unescape(arrGazString[1]);
    return placeName;
  }
  return "";
}

function forceRepaint()
{
	//force IE to repaint
	if (navigator.appName == 'Microsoft Internet Explorer')
	{
		$("#routeDirections").removeClass("repaint").addClass("repaint");
	}
}


