﻿var lstText;
var lstValue;
var code;
var optExist;
var xmlDoc;
var selectedIndex=0;
var root;
var div;

//Load the Airports in the lookup
function LoadAirport(txtCtrl,divCtrl,lstCtrl,loc,event)
{
    // loc can take values 1 or 2
    //1=departure textbox
    //2=desgtination textbox
    div = document.getElementById(divCtrl);
    
    var city = document.getElementById(txtCtrl).value;
    if(city!="")
    {
        if(city.length>=3)
        {
            //right or down arrow
            if(event.keyCode == 40 || event.keyCode == 39)
            {
               selectedIndex = document.getElementById(lstCtrl).options.selectedIndex;
               if(selectedIndex!= document.getElementById(lstCtrl).options.length)                
                document.getElementById(lstCtrl).options[selectedIndex+1].selected = "selected";
            }
            else
            {
                //left or up arrow
                if(event.keyCode == 37 || event.keyCode == 38)
                {
                   selectedIndex = document.getElementById(lstCtrl).options.selectedIndex;
                   if(selectedIndex!=0)                   
                    document.getElementById(lstCtrl).options[selectedIndex-1].selected = "selected";
                }
                else
                {
                    //Load xml content to List
                    LoadXML(txtCtrl,lstCtrl,loc);
                }
            }
        }
    }
    else
    {
        document.getElementById(divCtrl).style.display = "none";
        document.getElementById(txtCtrl).focus();
    }
}

//Get the Airports from XML
function LoadXML(txtCtrl,lstCtrl,loc)
{
    var lst = document.getElementById(lstCtrl);
    
    // check which browser you are using
    if(/Firefox[\/\s](\d+\.\d+)/.test(navigator.userAgent))
    {
        //display the Airport lookup div as block
        if(loc == 1)
        {
            div.style.top = "330px";
            div.style.left = "445px"; //"318px";
        }
        else
        {
            div.style.top = "330px";
            div.style.left = "680px"; //"560px";
        }
            
        xmlDoc = document.implementation.createDocument("","",null);
		xmlDoc.onload = retriveNodes;

        //read xml file
        xmlDoc.load('SpainAirports.xml');
		
		var t = setTimeout(function(){doRetrieve(txtCtrl, lstCtrl)},50); 
    }
    else
    {
//        if (/MSIE (\d+\.\d+);/.test(navigator.userAgent))
//        {
            //display the Airport lookup div as block
            if(loc == 1)
            {
                div.style.top = "347px";
                div.style.left = "445px"; //"320px";
            }
            else
            {
                div.style.top = "347px";
                div.style.left = "680px"; //"560px";
            }

            xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
            xmlDoc.async = false;
            
            //read xml file
            xmlDoc.load('SpainAirports.xml');
            
            //get the root element
            root = xmlDoc.documentElement;
            
            if(root.hasChildNodes())
            {
                var nodes = root.childNodes.length;
                if(lst.options.length!=0)
                    lst.options.length = 0;
                    
                for(var i=0; i<nodes; i++)
                {
			        var cityLen = document.getElementById(txtCtrl).value.toLowerCase().length;                
                    AutomateLoopIE(i,root,txtCtrl,lstCtrl,cityLen);
                }
                if(document.getElementById(lstCtrl).options.length == 0)
                {
                    for(var i=0; i<nodes; i++)
                    {
                        if(document.getElementById(lstCtrl).options.length == 0)
                        {
                            //Get Airports by its Code
                            CheckByCodeIE(i,root,txtCtrl,lstCtrl,3);
                        }
                    }
                    
                    if(document.getElementById(lstCtrl).options.length == 0)
                    {
                        for(var i=0; i<nodes; i++)
                        {
                            //Get Airports which matches to
                            //first 2 letters
                            AutomateLoopIE(i,root,txtCtrl,lstCtrl,2);
                        }
                    }
                    if(document.getElementById(lstCtrl).options.length == 0)
                    {
                        div.style.display = "none";
                        alert('Introduzca un nombre válido de la ciudad / código de aeropuerto');
                    }
                    else
                    {
                        document.getElementById(lstCtrl).options[0].selected = "selected";
                        div.style.display = "block";
                    }
                }
                else
                {
                    document.getElementById(lstCtrl).options[0].selected = "selected";
                    div.style.display = "block";
                }
            }
//        }
    }
}


function CheckByCodeIE(i,root,txtCtrl,lstCtrl,cityLen)
{
    var lst = document.getElementById(lstCtrl);
    code = root.childNodes[i].attributes.getNamedItem("code").text;
    var city = document.getElementById(txtCtrl).value.substring(0,cityLen).toUpperCase();
    
    lstText = root.childNodes[i].attributes.getNamedItem("name").text;
    lstValue = root.childNodes[i].attributes.getNamedItem("code").text;
    
    if(code.match(city))
    {
        if(lst.options.length!=0)
        {
            for(var j=0; j<lst.options.length; j++)
            {
                if(lst.options[j].value == code)
                    optExist = true;
            }
            if(!optExist)
                AddItem(lstText,lstValue,lstCtrl);
        }
        else
           AddItem(lstText,lstValue,lstCtrl);
    }
}


function AutomateLoopIE(i,root,txtCtrl,lstCtrl,cityLen)
{
    var lst = document.getElementById(lstCtrl);
    code = root.childNodes[i].attributes.getNamedItem("code").text;
    var city = document.getElementById(txtCtrl).value.toLowerCase();
    
    var name = root.childNodes[i].attributes.getNamedItem("name").text.toLowerCase().substring(0,cityLen);
    
    lstText = root.childNodes[i].attributes.getNamedItem("name").text;
    lstValue = root.childNodes[i].attributes.getNamedItem("code").text;
    
    if(name.match(city.substring(0,cityLen)))
    {
        if(lst.options.length!=0)
        {
            for(var j=0; j<lst.options.length; j++)
            {
                if(lst.options[j].value == code)
                    optExist = true;                          
            }
            if(!optExist)
                AddItem(lstText,lstValue,lstCtrl);
        }
        else
           AddItem(lstText,lstValue,lstCtrl);
    }
}


function retriveNodes()
{
	root = xmlDoc.getElementsByTagName('InternationalAirports');
}

function doRetrieve(txtCtrl, lstCtrl){
    var lst = document.getElementById(lstCtrl);	
    
	if(root[0].hasChildNodes())
	{
		var nodes = root[0].childNodes.length;
		if(lst.options.length!=0)
			lst.options.length = 0;
		
		childNode = root[0].getElementsByTagName("Airport");

		for(var i=0; i < childNode.length; i++)
		{
			var cityLen = document.getElementById(txtCtrl).value.toLowerCase().length;
		    AutomateLoop(i,childNode,txtCtrl,lstCtrl,cityLen);
		}
		
		if(document.getElementById(lstCtrl).options.length == 0)
        {
            for(var i=0; i<childNode.length; i++)
            {
                if(document.getElementById(lstCtrl).options.length == 0)
                {
                    CheckByCode(i,childNode,txtCtrl,lstCtrl,3);
                }
            }
            if(document.getElementById(lstCtrl).options.length == 0)
            {
                for(var i=0; i<childNode.length; i++)
                {
		            AutomateLoop(i,childNode,txtCtrl,lstCtrl,2);
		        }
            }
            if(document.getElementById(lstCtrl).options.length == 0)
            {
                div.style.display = "none";
                alert('Introduzca un nombre válido de la ciudad / código de aeropuerto');
            }
            else
            {
                document.getElementById(lstCtrl).options[0].selected = "selected";
                div.style.display = "block";
            }
        }
        else
        {
            document.getElementById(lstCtrl).options[0].selected = "selected";
            div.style.display = "block";
        }
	}
}

function CheckByCode(i,childNode,txtCtrl,lstCtrl,cityLen)
{
    var lst = document.getElementById(lstCtrl);
    code = childNode[i].getAttribute("code");
	var city = document.getElementById(txtCtrl).value.toUpperCase();
	
	lstText = childNode[i].getAttribute("name");
	lstValue = childNode[i].getAttribute("code");
	
	if(code.match(city.substring(0,cityLen)))
	{
		if(lst.options.length!=0)
		{
			for(var j=0; j<lst.options.length; j++)
			{
				if(lst.options[j].value == code)
					optExist = true;
			}
			if(!optExist)
				AddItem(lstText,lstValue,lstCtrl);				
		}
		else
		   AddItem(lstText,lstValue,lstCtrl);
	}
}

function AutomateLoop(i,root,txtCtrl,lstCtrl,cityLen)
{
    var lst=document.getElementById(lstCtrl);
    code = childNode[i].getAttribute("code");
	var city = document.getElementById(txtCtrl).value.toLowerCase();
	var name = childNode[i].getAttribute("name").toLowerCase().substring(0,cityLen);
	
	lstText = childNode[i].getAttribute("name");
	lstValue = childNode[i].getAttribute("code");
	
	if(name.match(city.substring(0,cityLen)))
	{
		if(lst.options.length!=0)
		{
			for(var j=0; j<lst.options.length; j++)
			{
				if(lst.options[j].value == code)
					optExist = true;     
			}
			if(!optExist)
				AddItem(lstText,lstValue,lstCtrl);
		}
		else
		   AddItem(lstText,lstValue,lstCtrl);
	}     
}


function AddItem(Text,Value,lstCtrl){
    // Create an Option object
    var opt = document.createElement("option");

    // Add an Option object to Drop Down/List Box
    document.getElementById(lstCtrl).options.add(opt);

    // Assign text and value to Option object
    opt.text = Value + " - " + Text;
    opt.value = Value + " - " + Text;
}


function CloseDiv(divCtrl,txtCtrl,lstCtrl,hiddenTxt)
{
    document.getElementById(divCtrl).style.display = "none";
    var ctrl = document.getElementById(lstCtrl);
    
    document.getElementById(txtCtrl).value = ctrl.value;
    document.getElementById(hiddenTxt).value = ctrl.value;
    
    //remove existing list items
    if(ctrl.length > 0)
        RemoveItem(ctrl);
}

function Close(divCtrl)
{
    document.getElementById(divCtrl).style.display = "none";        
}

function RemoveItem(ctrl)
{
    if(ctrl.length > 0)
        ctrl.length=0;
}

function MouseDown(imgCtrl,divCtrl,ctrl)
{
    document.getElementById(imgCtrl).style.display = "block";
    window.parent.document.getElementById(ctrl).style.display = "none";
    
    if(document.getElementById(divCtrl)!=null)
    {
        if(document.getElementById(divCtrl).style.display == "block")
        {
            document.getElementById(divCtrl).style.display = "none";
        }
//        else
//        {
//            document.getElementById(divCtrl).style.display = "block";
//        }
    }
}
