var arrivalRequest;
var arrivalResult = null;
var dstArrivalObj = null;
var arrivalIndex = -1;
var arrivalSelectedValue = null;
var arrivalOk = false;
var arrivalInput = null;
var arrivalSrollVisible = false;

var finalDeparture = null;
var finalArrival = null;

var finalRequest;

function arrivalIn() {
    dstArrivalObj = document.getElementById('plecari');
    clearTimeout(thread);
    hideDepartures();

    // daca e scris ceva in inputul de sosiri in momentul in care ia focusul lansam thread-ul
    arrivalInput = document.getElementById('la');
    if (arrivalInput.value != '') {
        if (thread != null)
          clearTimeout(thread);
        thread = setTimeout('doArrivalRequest()', 300);
    }

}
function arrivalOut() {
    clearTimeout(thread);
    hideArrivals();
}

function arivalKeyUp(key) {
    hideDepartures();
    arrivalInput = document.getElementById('la');
    if (arrivalInput.value == '') {// daca e vid anulam call-ul si ascundem meniul
        clearTimeout(thread);
        hideArrivals();
        return;
    }

    if ((key == 9) || (key == 13) || (key == 38) || (key == 40) || (key == 16))
    // tab, enter, sageata sus, sageata jos, shift
      return true;
    if (thread != null)
      clearTimeout(thread);
    thread = setTimeout('doArrivalRequest()', 300);
}

function arrivalKeyDown(key) {
    hideDepartures();
    arrivalInput = document.getElementById('la');
    dstArrivalObj = document.getElementById('sosiri');

    if (arrivalInput.value == '') {// daca e vid anulam call-ul si ascundem meniul
        clearTimeout(thread);
        hideArrivals();
    }
    
    if ((key == 9) && (arrivalSelectedValue != null) && (arrivalOk)) {
            arrivalInput.value = arrivalSelectedValue;
            hideArrivals();
            finish();
    }

    if ((key == 13) && (arrivalSelectedValue != null) && (arrivalOk)) {
            arrivalInput.value = arrivalSelectedValue;
            hideArrivals();
            finish();
    }

    // daca meniul nu este vizibil nu tinem cont de sageata sus si sageata jos
    if (! arrivalSrollVisible)
        return true;


    if (key == 38) {
        if (arrivalIndex > 0) {
            arrivalIndex--;
            showArrivals();
            buildArrivalTable();
        }
        return true;
    }

    if (key == 40) {
        if (arrivalIndex < arrivalResult.arrivals.length - 1) {
            arrivalIndex++;
            showArrivals();
            buildArrivalTable();
        }
        return true;
    }
}

function doArrivalRequest() {

  if (arrivalInput.value == '') // daca e vid nu face call-ul
    return;

  departureInput = document.getElementById('dela');

  try {
    if (window.XMLHttpRequest)
        arrivalRequest = new XMLHttpRequest();
    else
        if (window.ActiveXObject)
          arrivalRequest = new ActiveXObject("Microsoft.XMLHTTP");
  } catch (e) {
      return false;
  }


  arrivalRequest.onreadystatechange = waitArrivalResponse;
  arrivalRequest.open('GET', 'getsosiri.php?' + departureInput.name + '=' + replaceDiacritics(townMatch(departureInput.value)) + '&' + arrivalInput.name + '=' + replaceDiacritics(townMatch(arrivalInput.value)), true);
  arrivalRequest.send('');
  return true;
}

function waitArrivalResponse() {
  if (arrivalRequest.readyState == 4) {
    if (arrivalRequest.status == 200) {
        arrivalResult = eval('(' + arrivalRequest.responseText + ')');

        if (arrivalResult.arrivals.length == 0) {
            arrivalResult.arrivals[0] = 'Nici o curs&#259; g&#259;sit&#259;!'
            arrivalOk = false;
        }
        else {
            arrivalOk = true;
        }
        arrivalIndex = 0;
        if (!((arrivalInput.value == '') || ((replaceDiacritics(townMatch(arrivalInput.value.toLowerCase())) == replaceDiacritics(arrivalResult.arrivals[0].toLowerCase())) && (arrivalResult.arrivals.length == 1)))) {
            showArrivals();
            buildArrivalTable();
        }
        // un singur raspuns, match perfect pe user input
        if ((replaceDiacritics(townMatch(arrivalInput.value.toLowerCase())) == replaceDiacritics(arrivalResult.arrivals[0].toLowerCase())) && (arrivalResult.arrivals.length == 1)) {
            hideArrivals();
            finish();
        }

    }
  }
}

function showArrivals() {
    if (dstArrivalObj == null)
        return;
    dstArrivalObj.style.top = '81px';
    dstArrivalObj.style.left = $('#la').offset().left;
    dstArrivalObj.style.visibility = 'visible';
    dstArrivalObj.style.display = 'inline';
    arrivalSrollVisible = true;
}

function hideArrivals() {
    if (dstArrivalObj == null)
        return;
    while (dstArrivalObj.rows.length > 0)
        dstArrivalObj.deleteRow(0);    
    dstArrivalObj.style.visibility = 'hidden';
    dstArrivalObj.style.display = 'none';
    arrivalSrollVisible = false;
    arrivalSelectedValue = null;
}

function selectArrivalTableItem() {
    var color;
    if (arrivalOk)
      color = '#14a143';
    else
      color = 'red';
    for (var i = 0; i < dstArrivalObj.rows.length; i++) {
        var row = dstArrivalObj.rows[i];
        var cell = row.cells[0];
        if (i == arrivalIndex) {
            cell.style.color = 'white';
            cell.style.backgroundColor = color;
            arrivalSelectedValue = arrivalResult.arrivals[i];
        }
        else {
            cell.style.color = '#666666';
            cell.style.backgroundColor = 'white';
        }
    }
}

function getArrivalTableItemIndex(cell) {
    for (var i = 0; i < dstArrivalObj.rows.length; i++) {
        var row = dstArrivalObj.rows[i];
        if (row.cells[0] == cell)
            return i;
    }
}

function buildArrivalTable() {
    while (dstArrivalObj.rows.length > 0)
        dstArrivalObj.deleteRow(0);

    if (arrivalResult == null)
      return;

    for (var i = 0; i < arrivalResult.arrivals.length; i++) {
        var row = dstArrivalObj.insertRow(i);
        var cell = row.insertCell(0);
        cell.innerHTML = arrivalResult.arrivals[i];
        cell.onmousemove = function() {
            arrivalIndex = getArrivalTableItemIndex(this);
            selectArrivalTableItem();
        }
        cell.onmousedown = function() {
            arrivalIndex = getArrivalTableItemIndex(this);
            selectArrivalTableItem();
            if (arrivalOk) {
                 arrivalInput.value = arrivalSelectedValue;
                 finish();
            }
            hideArrivals();
        }
    }
    selectArrivalTableItem();    
}

function finish() {
    try {
        if (window.XMLHttpRequest)
            finalRequest = new XMLHttpRequest();
        else
            if (window.ActiveXObject)
                finalRequest = new ActiveXObject("Microsoft.XMLHTTP");
    } catch (e) {
      return false;
    }

    finalDeparture = townNameFormat(townMatch(replaceDiacritics(departureInput.value)));
    finalArrival = townNameFormat(townMatch(replaceDiacritics(arrivalInput.value)));
    finalRequest.onreadystatechange = doFinalRequest;    
    finalRequest.open('GET', 'autocare.php?nmp=1&dela=' + finalDeparture  + '&la=' +  finalArrival, true);
    finalRequest.send('');
    
    return true;
}

function doFinalRequest() {
    if (finalRequest.readyState == 4) {
      if (finalRequest.status == 200) {
        var content = document.getElementById('content');
        content.innerHTML = finalRequest.responseText;
        document.title = 'Orarul curselor FANY de la ' + finalDeparture +  ' la ' + finalArrival;
          
        var urlDeparture = finalDeparture.replace(/-/g, ' ');
        var urlArrival = finalArrival.replace(/-/g, ' ');
        var ajax_url = '/autocare-' + urlDeparture + '-' + urlArrival;
        var pageTracker = _gat._getTracker('UA-9627298-1');
        pageTracker._trackPageview(ajax_url);
      }
    }
}