//Doc!

/*
	alertContents				: Response from AJAX
	Changed						: Updates the text box with the new value of the select box
	Clicked						: Resets the value of a text box
	FindInList					: Searches the contents of a select control, not recomended for 250+ items
	findPos						: Find the x and y of an id
	HideDiv						: Hides div and executes function if available [onDivClose]
	lSKeyPress					: Activated when a key is pressed
	makeRequest					: Makes an AJAX call
	MoveInList					: Moves the selected index of a select box
	onDivClose					: Executes predefined finctions
	PosDiv						: Sets the x and y of a div
	SearchBox					: Searches the contents of a select control, not recomended for 250+ items after 3 charactors
	Selected						: Updated text box when select box is clicked
	ShowSelectDiv				: Displays the select div
	ShowDiv						: Shows div
	UpdateList					: Updates a select control with new xml
	UpdateTextBox				: Updates the textbox
*/

var http_request = false;
var LSTimeoutHandle = 0;
var LSTimeoutDuration = 450;

   var http_request = false;
   var uTargetID = '';

   function debugWindow(toDisplay){
	   if (document.getElementById("jsdebug")) {
		   document.getElementById("jsdebug").innerText = toDisplay;
	   }
   }

   function makeRequest(url, parameters, targetID) {
      http_request = false;

      uTargetID = targetID;
      if (window.XMLHttpRequest) { // Mozilla, Safari,...
         http_request = new XMLHttpRequest();
         if (http_request.overrideMimeType) {
            http_request.overrideMimeType('text/xml');
         }
      } else if (window.ActiveXObject) { // IE
         try {
            http_request = new ActiveXObject("Msxml2.XMLHTTP");
         } catch (e) {
            try {
               http_request = new ActiveXObject("Microsoft.XMLHTTP");
            } catch (e) {}
         }
      }
      if (!http_request) {
         alert('Cannot create XMLHTTP instance');
         return false;
      }

      http_request.onreadystatechange = alertContents;

      http_request.open('GET', url + parameters, true);
      http_request.send(null);

      document.getElementById('img' + uTargetID).src = '/images/searching_progress_blue15.gif';

   }

   function alertContents() {
      var showDiv = true;
      var textBox = null;

      if (http_request.readyState == 4) {
         if (http_request.status == 200) {

	         if (window.ActiveXObject) { // IE
	            var doc = http_request.responseText;
	            var xDoc = new ActiveXObject("Microsoft.XMLDOM");
	            xDoc.loadXML(doc);
         	} else {
	         	var xDoc = http_request.responseXML;
         	}

            UpdateList('', 'Select' + uTargetID, 'Text' + uTargetID, xDoc);

            try {
               textBox = document.getElementById('Text' + uTargetID);

               if ((document.getElementById('Select' + uTargetID).options.length < 1) ||
                   (textBox.value.length < 1)) {
                  HideDiv('div' + uTargetID);
                  showDiv = false;
               }

               /*<%' if textbox is disabled, we're copying from one LS box to another, so don't need to pop the target's DIV down %>*/
               if (textBox.disabled == true) {
                  if (document.getElementById('JourneyTypeReturn')){
                     if (document.getElementById('JourneyTypeReturn').checked == true) {
                        textBox.disabled = false;
                     }
                  }
                  else {                     
                     textBox.disabled = false; /*<%' just enable it %>*/
                  }
                  
                  showDiv = false;
               }
            } catch(e) {alert(e.description);}

            if (showDiv)
               ShowDiv('div' + uTargetID);

            document.getElementById('img' + uTargetID).src = "/images/drop_icon.gif";
            /*<%'} else { ///////////////////////// removed alert due to issues with Firefox
                   ' alert('There was a problem with the request.'); %>*/
         }
      }
   }

	function findPos(obj) {
		var curleft = curtop = 0;
		if (obj.offsetParent) {
			curleft = obj.offsetLeft
			curtop = obj.offsetTop
			while (obj = obj.offsetParent) {
				curleft += obj.offsetLeft
				curtop += obj.offsetTop
			}
		}
		return [curleft,curtop];
	}

	function UpdateList(divID, selectID, textID, lXML){
		var xValue = lXML.getElementsByTagName("Value");
		var xText = lXML.getElementsByTagName("Text");

		var ComboSelect=document.getElementById(selectID)
		while (ComboSelect.options.length) {
			ComboSelect.remove(ComboSelect.length-1);
		}
		var listDefault = '';

  		if (GetXMLNode(lXML, "List/ListItem[Selected='True']")) {
	  		var nodes = GetXMLNode(lXML, "List/ListItem[Selected='True']");
  			var selectedNode = nodes.getElementsByTagName("Value");
  			listDefault = selectedNode[0].childNodes[0].nodeValue;
  		}

		for (j=0;j<xValue.length;j++){
			element = document.createElement('OPTION');
			element.value = xValue[j].childNodes[0].nodeValue;
			element.text = xText[j].childNodes[0].nodeValue;

			if (listDefault == element.value) {
				var listID = j;
				document.getElementById(textID).value = element.text;
			}

			document.getElementById(selectID).options.add(element);
			//document.getElementById(selectID).selectedIndex = 0;
			document.getElementById(selectID).selectedIndex = listID;
		}
	}


	function ShowSelectDiv(divID, focusOnID, selectID, exeFunction) {
		if (document.getElementById(divID).style.display == "block") {
			HideDiv(divID, focusOnID, selectID, exeFunction);
		} else {
			var textID = selectID.replace("Select","Text");
			if (document.getElementById(textID).value != "") {
				ShowDiv(divID);
				//PosDiv(divID, focusOnID);
				document.getElementById(selectID).focus();
			} else {
				document.getElementById(textID).focus();
			}
		}
	}

	function PosDiv(divID, focusOnID){
		//Find the position of the parent box and center the popup to it.
		var c = findPos(document.getElementById(focusOnID));
		document.getElementById(divID).style.pixelTop = c[1] + document.getElementById(focusOnID).offsetHeight;
		document.getElementById(divID).style.pixelLeft = c[0] + 1;
	}

	function ShowDiv(divID) {
		document.getElementById(divID).style.display = "block";
	}

	function HideDiv(divID, focusOnID, selectID, exeFunction) {
		if (document.getElementById(divID).style.display == "block"){
			document.getElementById(divID).style.display = "none";
			if (document.getElementById('Alert' + divID)) {
					document.getElementById('Alert' + divID).style.display = "none";
			}
			if (exeFunction!=undefined && exeFunction != ''){
				onDivClose(divID, focusOnID, selectID, exeFunction);
			}
		}
	}

	function onDivClose(divID, focusOnID, selectID, exeFunction){
		var exAction = exeFunction.split('|');
		var exParameter = document.getElementById(selectID).value;
		switch(exAction[0]) {
			case "Update":
				if (document.getElementById("pDiv" + exAction[1]) && (exParameter != "")) {
					makeRequest('ajax/ajax-functions.asp', '?ft=ReadEvents&fp=' + exParameter + '&fl=true', exAction[1]);
				}
				break;
			case "Copy":
				if (document.getElementById("pDiv" + exAction[1]) && (exParameter != "")) {
               try {
                  document.getElementById('Text' + exAction[1]).disabled = true; /*<%' until copied %>*/
               } catch(e) {}
					makeRequest('ajax/ajax-functions.asp', '?ft=DestinationAirports&fp=' + exParameter + '&fl=true' + '&ds=' + exParameter, exAction[1]);
				}
				break;
         case "Copy_Area":
            if (document.getElementById("pDiv" + exAction[1]) && (exParameter != "")) {
               makeRequest('ajax/ajax-functions.asp', '?ft=Read_Areas&fp=' + exParameter + '&fl=true' + '&ds=' + exParameter, exAction[1]);
            }
            break;
		}
	}

	function Clicked(lID) {
		document.getElementById(lID.id).value = "";
	}

	function SearchBox(divID, thisID, textID, exeFunction, selectID, event){
		var searchCriteria = document.getElementById(textID).value;
		var continueSearch = true;
		var keynum;

		if(window.event) // IE
		  {
		  keynum = event.keyCode;
		  }
		else if(event.which) // Netscape/Firefox/Opera
		  {
		  keynum = event.which;
		  }

		if (keynum == 40){
				continueSearch = false;
				ShowDiv(divID);
		}

		if (keynum == 38){
				continueSearch = false;
				ShowDiv(divID);
		}

		if (keynum == 13){
				continueSearch = false;
		}

		if (keynum == 9){
				continueSearch = false;
		}

		if ((searchCriteria.length >= 3) && (continueSearch)){
			ShowDiv(divID);
			FindInList(divID, thisID, textID, exeFunction, selectID);
		}
	}

	function LiveSearchBox(divID, thisID, textID, exeFunction, selectID, imgID, targetID, ajaxCall, event){
		var searchCriteria = document.getElementById(textID).value;
		var continueSearch = true;
		var keynum;

		if(window.event) // IE
		  {
		  keynum = event.keyCode;
		  }
		else if(event.which) // Netscape/Firefox/Opera
		  {
		  keynum = event.which;
		  }

		if (keynum == 40){
				continueSearch = false;
				//ShowDiv(divID);
		}

		if (keynum == 38){
				continueSearch = false;
				//ShowDiv(divID);
		}

		if (keynum == 13){
				continueSearch = false;
		}

		if (keynum == 9){
				continueSearch = false;
		}

		if ((searchCriteria.length >= 3) && (continueSearch)){
		   if (LSTimeoutHandle != 0)
		      clearTimeout(LSTimeoutHandle);

		   LSTimeoutHandle = setTimeout("SendTimedLSRequest('" + divID + "', '" + targetID + "', '" + ajaxCall + "', '" + searchCriteria + "')", LSTimeoutDuration);
		} else {
			if (searchCriteria.length <= 0) {
				document.getElementById(selectID).options.length = 0;
				if (document.getElementById(imgID)) {
					document.getElementById(imgID).src = "/images/spacer.gif";
				}
			}
		}
	}

	function SendTimedLSRequest(divID, targetID, ajaxCall, searchCriteria){
      LSTimeoutHandle = 0;

      makeRequest('ajax/ajax-functions.asp', '?ft=' + ajaxCall + '&fp=' + searchCriteria + '&fl=true', targetID);
   }

	function FindInList(divID, thisID, textID, exeFunction, selectID) {
		var searchCriteria = document.getElementById(textID).value;

		for(var f=0; f<document.getElementById(selectID).options.length;f++) {
			var currentItem = document.getElementById(selectID).options[f].text;
			if ((currentItem.substring(0,searchCriteria.length).toLowerCase()) == (searchCriteria.toLowerCase())) {
				document.getElementById(selectID).selectedIndex = f;
				break;
			}
		}
	}

	function Changed(divID, selectID, textID, exeFunction){
		UpdateTextBox(selectID, textID);
		if (textID == "TextLSDestinationAreas") {
			UpdateLocations(selectID, textID);
		}
	}

	function Selected(divID, selectID, textID, exeFunction) {
		if (document.getElementById(selectID).selectedIndex == -1) {
			HideDiv(divID, textID, selectID, exeFunction);
		} else {
			if (document.getElementById(textID).value == document.getElementById(selectID).options[document.getElementById(selectID).selectedIndex].text) {
				UpdateTextBox(document.getElementById(selectID), textID);

				HideDiv(divID, textID, selectID, exeFunction);
			} else {

				if (document.getElementById(selectID).selectedIndex == 0 ) {
					document.getElementById(textID).value == document.getElementById(selectID).options[document.getElementById(selectID).selectedIndex].text;

 					UpdateTextBox(document.getElementById(selectID), textID);

 					HideDiv(divID, textID, selectID, exeFunction);
				}
			}
		}

		if (selectID != 'SelectLSDestinationLocation') {
			UpdateLocations(document.getElementById(selectID), textID);
		}
	}

	function UpdateTextBox(selectID, textID){
	   try {
		   document.getElementById(textID).value = selectID.options[selectID.selectedIndex].text;
		   //document.getElementById(textID.replace('Text','Default')).value = selectID.options[selectID.selectedIndex].value;
		} catch (e) {}
	}

	function UpdateLocations(selectID, textID){
		if (document.getElementById("pDivLSDestinationLocation")) {

			makeRequest('ajax/ajax-functions.asp', '?ft=DestinationLocation&fp=' + selectID.value + '', "LSDestinationLocation");
			if (document.getElementById("TextLSDestinationLocation")) {
				if (document.getElementById("TextLSDestinationLocation").value == "") {
					document.getElementById("TextLSDestinationLocation").value = "All Locations"
				}
			}
		}
	}

	function MoveInList(divID, selectID, textID, lDirection){
		//Get current selectedIndex
		var curIndex = document.getElementById(selectID).selectedIndex;
		var maxIndex = document.getElementById(selectID).options.length -1;

		if (lDirection == 'up') {
			if ((curIndex - 1) == -1){
				curIndex = 0;
			} else {
				curIndex--;
			}
		}

		if (lDirection == 'down') {
			if (curIndex + 1 >= maxIndex){
				curIndex = maxIndex;
			} else {
				curIndex++;
			}
		}

		document.getElementById(selectID).selectedIndex = curIndex;
		Changed(divID, document.getElementById(selectID), textID, '');
	}

	function lSKeyPress(divID, selectID, textID, exeFunction, event) {

		var keynum;
		var keychar;

		if(window.event) // IE
		  {
		  keynum = event.keyCode;
		  }
		else if(event.which) // Netscape/Firefox/Opera
		  {
		  keynum = event.which;
		  }

		if (keynum == 40){
				MoveInList(divID, selectID, textID,'down');
		}

		if (keynum == 38){
				MoveInList(divID, selectID, textID,'up');
		}

		if (keynum == 13){
			if (document.getElementById(divID).style.display == 'block'){
				HideDiv(divID, textID, selectID, exeFunction);

				Changed(divID, document.getElementById(selectID), textID, '');
			}
		}

		if (keynum == 9){
			if (document.getElementById(divID).style.display == 'block'){
				HideDiv(divID, textID, selectID, exeFunction);

				Changed(divID, document.getElementById(selectID), textID, '');
			}
		}

		keychar = String.fromCharCode(keynum);
		return;
	}

	var mouseUpTimeoutHandle = 0;
	var allowMouseUp = true;

	function mouseUp() {
	   event.returnValue = allowMouseUp;
	   return allowMouseUp;
	}

	function allowMouseUp() {
	   allowMouseUp = true;
	   if (mouseUpTimeoutHandle != 0) clearTimeout(mouseUpTimeoutHandle);
	}

	function SelLSText(Obj)
	{
		if(Obj.value != "")	{
			Obj.select();
			allowMouseUp = false;
			try {
			   if (mouseUpTimeoutHandle != 0) clearTimeout(mouseUpTimeoutHandle);
			   mouseUpTimeoutHandle = setTimeout(allowMouseUp, 300);
			} catch(e) {}
		}
	}

   function disableEnterKey(e)
   {
        var key;

        if(window.event)
             key = window.event.keyCode;     //IE
        else
             key = e.which;     //firefox

        if(key == 13)
             return false;
        else
             return true;
   }

   function GetXMLNode(xmlDoc, elementPath)
   {
       if(window.ActiveXObject)
       {
           return xmlDoc.selectSingleNode(elementPath);
       }
       else
       {
          var xpe = new XPathEvaluator();
          var nsResolver = xpe.createNSResolver( xmlDoc.ownerDocument == null ? xmlDoc.documentElement : xmlDoc.ownerDocument.documentElement);
          var results = xpe.evaluate(elementPath,xmlDoc,nsResolver,XPathResult.FIRST_ORDERED_NODE_TYPE, null);
          return results.singleNodeValue;
       }
   }
