// UI Functions for main booking form.
var StopField = '';
var DialogID = '#StopList';
var DataDelim = ["|","\n"];
var LookUpScript = '/asset/stop_lookup.php';
var TestEnvironment = '';

function selectFromStop(retData) { 
  if (retData.selectValue > '') {
    $('#from').attr('title',retData.extra[0]);
    $('#to').focus().select();
  }
}; 

function selectToStop(retData) { 
  if (retData.selectValue > '')  {
    $('#to').attr('title',retData.extra[0]);
    $('#date').focus().select();
  }
}; 

function parseData(data) {
  if (!data) return null;
  var parsed = [];
  var rows = data.split(DataDelim[1]);
  for (var i=0; i < rows.length; i++) {
    var row = $.trim(rows[i]);
    if (row) {
      parsed[parsed.length] = row.split(DataDelim[0]);
    }
  }
  return parsed;
};

function fnLoadRegion() {
  $.get(LookUpScript,'r=?'+TestEnvironment, function(data) { 
      data = parseData(data);
      $(DialogID).html('<ul class="Regions"></ul>');
      for (var i=0; i < data.length; i++) {
        var row = data[i];
        if (row[2].length > 0) { 
          $(DialogID + " ul").append('<li class="Stop" onClick="fnSelectStop(this); return false;" title="' + row[1] + '">' + row[0] + '</li>');
        }
        else if (row[4].length > 0) { 
          $(DialogID + " ul").append('<li class="Region" onClick="fnPopulateRgnStops(this); return false;" rgn="' + row[4] + '">' + row[0] + '</li>');
        }
        else { 
          $(DialogID + " ul").append('<li title="' + row[1] + '">' + row[0] + '</li>');
        }
      }
  }, 'text' );
}
function fnLoadAreas() {
  $.get(LookUpScript,'a=?'+TestEnvironment, function(data) { 
      data = parseData(data);
      $(DialogID).html('<ul class="Areas"></ul>');
      for (var i=0; i < data.length; i++) {
        $(DialogID + " ul").append('<li onClick="fnPopulateStops(this); return false;">' + data[i][0] + '</li>');
      }
  }, 'text' );
}

function fnPopulateStops(areaLi) {
  areaLi = $(areaLi);
  if ( !areaLi.children().is('ul') ) { 
      areaLi.addClass('loading');
      areaLi.append('<ul class="Stops"></ul>');
      $.get(LookUpScript,'a=' + areaLi.text()+TestEnvironment,function(data) { 
        data = parseData(data);
        for (var i=0; i < data.length; i++) {
          areaLi.children("ul.Stops").append('<li onClick="fnSelectStop(this); return false;" title="' + data[i][1] + '">' + data[i][0] + '</li>');
        }
        areaLi.removeClass('loading');
      }, 'text' );
  } // Populate on first call
  areaLi.toggleClass('open'); 
}
function fnPopulateRgnStops(rgnLi) {
  rgnLi = $(rgnLi);
  if ( !rgnLi.children().is('ul') ) { 
      rgnLi.addClass('loading');
      rgnLi.append('<ul class="Stops"></ul>');
      $.get(LookUpScript,'r=' + rgnLi.attr('rgn')+TestEnvironment,function(data) { 
        data = parseData(data);
        for (var i=0; i < data.length; i++) {
          var row = $.trim();
          rgnLi.children("ul.Stops").append('<li onClick="fnSelectStop(this); return false;" title="' + data[i][1] + '">' + data[i][0] + '</li>');
        }
        rgnLi.removeClass('loading');
      }, 'text' );
  } // Populate on first call
  rgnLi.toggleClass('open'); 
}


function fnSelectStop(stopLi) {
  $('#'+StopField).val($(stopLi).text());
  $(DialogID).dialog('close');
}

function fnOpenDialog(btn) {
  if ( $('.ui-dialog').css('display') != 'none' && StopField == (btn.id == 'fromPicker' ? 'from' : 'to')) { 
    $(DialogID).dialog('close'); 
  }
  else {
    StopField = (btn.id == 'fromPicker' ? 'from' : 'to');
    $('span.ui-dialog-title').text('Select ' + (btn.id == 'fromPicker' ? 'From Stop' : 'To Stop') );
    $(DialogID).dialog('option', 'position', [btn.offsetLeft + 65,$(btn).parents('div.bookingform').offset().top]);
    $(DialogID).dialog('open');
  }
}

$(document).ready(function () { 
  if (document.forms[0].action.indexOf('test') >= 0) TestEnvironment = '&test=1';

  $('input.Calendar').datepicker({ 
      dateFormat: 'dd-mm-yy',
      minDate: 0, 
      maxDate: '1y', 
      duration: 'fast', 
      showOn: 'button', 
      buttonImageOnly: true, 
      buttonImage: '/img/calendar.gif', 
      buttonText: '...' 
  }); 
  $('input#from').autocomplete(LookUpScript , { 
      onItemSelect:selectFromStop,
      autoFill:true, 
      delay:300, 
      minChars:3, 
      matchSubset:1, 
      selectFirst:true,
      cacheLength:30,
      mustMatch:0,
      maxItemsToShow:20,
      width: 200
  } );

  $('input#to').autocomplete(LookUpScript , { 
      onItemSelect:selectToStop,
      autoFill:true, 
      delay:300, 
      minChars:3, 
      matchSubset:1, 
      selectFirst:true,
      cacheLength:30,
      mustMatch:0,
      maxItemsToShow:20,
      width: 200
  } );

  $(DialogID).dialog({ 
    autoOpen: false, 
    height: 426,
    width: 260,
    open: function() { if ($(DialogID).html() == '') fnLoadRegion(); }
  } );

}); // doc.ready...

