  function getXmlHttpRequestObject() {
    var req = false;
    if (window.XMLHttpRequest) { // Mozilla, Safari,...
       req = new XMLHttpRequest();
       if (req.overrideMimeType) {
          req.overrideMimeType('text/xml');
       }
    } else if (window.ActiveXObject) { // IE
       try {
          req = new ActiveXObject("Msxml2.XMLHTTP");
       } catch (e) {
          try {
             req = new ActiveXObject("Microsoft.XMLHTTP");
          } catch (e) {}
       }
    }
    return req;
  }
  var http_request = getXmlHttpRequestObject();
  var sugg_request = getXmlHttpRequestObject();
  var pt_request = getXmlHttpRequestObject();
  var dir_request = getXmlHttpRequestObject();
  var next_link = document.createElement("div");
  next_link.id = 'next_link';
  next_link.className = 'hide_print';
  var print_link = document.createElement("div");
  var mapwidth = 350;
  var mapheight = 250;
  print_link.id = 'print_link'; 
  print_link.className = 'hide_print';
  print_link.innerHTML = '<a href="#" onclick="window.print(); return false;">' +
    lang['print_selected'] + '</a>';
  var batch_trip_count = 1;
  var advanced_hidden = true;
  var swapped_input = false;
  var maps = new Array();
  function makeRequest(req, parameters, callBack) {
    var url = 'ajax.php';
    if (req.readyState != 0)
      req.abort();
    req.onreadystatechange = callBack;
    req.open('GET', url + '?' + parameters /*'?lang=' + language + '&' + parameters*/
      , true);
    req.send(null);
  }
  function dateToStr( d )
  {
    return d.getDate() + '.' + (d.getMonth()+1) + '.' + d.getFullYear();
  }
  // --------------------- trip -------------------
  var trips = new Array();
  function trip_expand()
  {
    this.preview_HTML = this.div.innerHTML;
    while (this.div.hasChildNodes())
      this.div.removeChild( this.div.childNodes[0] );
    this.write( this.div );
    this.div.className = 'trip_box_exp';
    return false;
  }
  function trip_contract()
  {
    while (this.div.hasChildNodes())
      this.div.removeChild( this.div.childNodes[0] );
    this.div.innerHTML = this.preview_HTML;
    this.div.className = 'trip_box';
    return false;
  }
  function trip_segment( node )
  {
    this.node = node;
    this.j_id = node.getAttribute("JId");
    this.walk = node.getAttribute("Walk");
    this.line_name = node.getAttribute("Line");
    this.line_type = node.getAttribute("Type");
    if (language != 'sk')
      this.line_type = lang[this.line_type];
    this.line_color = node.getAttribute("Color");
    this.line_bg_color = node.getAttribute("BgColor");
    n = node.getElementsByTagName('Start').item(0);
    this.start_stop_name = n.getAttribute("Name");
    this.start_time = n.getAttribute("Time");
    this.start_rp_id = n.getAttribute("RPId");
    n = node.getElementsByTagName('End').item(0);
    this.end_stop_name = n.getAttribute("Name");
    this.end_time = n.getAttribute("Time");
    this.end_rp_id = n.getAttribute("RPId");
  }
  function trip_write_preview( parent )
  {
    this.div = parent;
    var tbl = document.createElement("table");
    var tr = tbl.insertRow(0);
    tr.className = "trip_table";
    var td;
    tbl.border = 0;
    tbl.padding = 0;
    tbl.width = "100%";
    var seg1 = this.segments[0];
    var seg2 = this.segments[this.segments.length-1];
    // start + end times
    td = tr.insertCell(0);
    td.width = 90;
    td.innerHTML = '<b>' + seg1.start_time + ' - ' + seg2.end_time + '</b>';
    // total time
    td = tr.insertCell(1);
    td.width = 50;
    td.innerHTML = this.time + ' min.';
    // line list
    td = tr.insertCell(2);
    td.width = 120;
    var str = '';
    for (var i = 0; i < this.segments.length; i++)
    {
      if (this.segments[i].line_name == '')
        if ( (i>0) && (i < this.segments.length-1) )
        continue;
      if (str.length > 0)
        str += ', ';
      if (this.segments[i].line_name == '')
        str += '<img src="images/walk.png" title="' + 
          lang['walk_foot'] + '" class="walk_img" />';
      else
        str += '<span style="padding: 1px; font-weight: bold'+
          '; color: #' + this.segments[i].line_color +
          '; background-color: #' + this.segments[i].line_bg_color +
          '">'+this.segments[i].line_name+'</span>';
    }
    td.innerHTML = str;
    td = tr.insertCell(3);
    if (true)
    {
      // start stop(s)
      if ( (this.segments.length==1) && (this.segments[0].line_name=='') )
        ; // td.innerHTML += '(';
      for( var i = 0; i < this.segments.length; i++)
        if ( (this.segments[i].line_name != '') || (i == this.segments.length-1) )
        {
          if (i>0)
            td.innerHTML += '(…) - ';
          td.innerHTML += this.segments[i].start_stop_name + ' - ';
          break;
        }
      // end stop(s)
      for( var i = this.segments.length-1; i >=0 ; i--)
        if ( (this.segments[i].line_name != '') || (i == 0) )
        { 
          td.innerHTML += this.segments[i].end_stop_name;
          if (i<this.segments.length-1)
            td.innerHTML += ' - (…)';
          break;
        }
      if ( (this.segments.length==1) && (this.segments[0].line_name=='') )
        ; // td.innerHTML += ')';
      td = tr.insertCell(4);
    }
    td.className = 'expand';
    td.innerHTML = '<a href="#" title="'+lang['expand_info']+'" onclick="return trips['+this.num+'].expand();">' +
      lang['expand'] + '</a>';
    this.preview_table = tbl;    
    if (parent != null)
      parent.appendChild(tbl);
  }
  function trip_write( parent )
  {
    var tbl = document.createElement("table");
    tbl.border = 0;
    tbl.padding = 0;
    tbl.width = "100%";
    var tr = tbl.insertRow(0);
    var td = tr.insertCell(0);
    td = tr.insertCell(1);
    td = tr.insertCell(2);
    td = tr.insertCell(3);
    td.style.textAlign = 'right';
    td.className = 'hide_print';
    html = '';
    if (maps_available)
      html = '<a href="#" onclick="return show_big_map(' + this.num + ');">' +
        lang['show_on_map'] + '</a>' + '&nbsp;|&nbsp;';
    html += '<a href="#" onclick="return trips['+this.num+'].contract();">' +
      lang['contract'] + '</a>';
    td.innerHTML = html;
    var i = 0;
    for ( i = 0; i < this.segments.length; i++)
    {
      tr = tbl.insertRow(i+1);
      tr.className = 'trip_table';
      // line
      td = tr.insertCell(0);
      if (this.segments[i].line_name != '')
      {
        td.innerHTML = '<span style="padding: 1px ; font-weight: bold'+
          '; color: #' + this.segments[i].line_color +
          '; background-color: #' + this.segments[i].line_bg_color +
          '">'+this.segments[i].line_name+'</span>';
        if (this.segments[i].line_type!=null)
          td.innerHTML += ' <span class="transport_type">(' +
            this.segments[i].line_type + ')</span>';

        td.width = 100;
        // start time & stop
        td = tr.insertCell(1);
        td.innerHTML =
          '<b>' + this.segments[i].start_time + '</b>&nbsp;&nbsp;' +
          this.segments[i].start_stop_name;
        td.width = 200;
        td = tr.insertCell(2);
        td.width = 50;
        td.align = 'center';
        td.innerHTML = '&rarr;';
        // end time & stop
        td = tr.insertCell(3);
        td.width = 200;
        td.innerHTML = 
          '<b>' + this.segments[i].end_time + '</b>&nbsp;&nbsp;' +
            this.segments[i].end_stop_name;
      } else {
        var html = '<table style="border: 0px solid #000; padding: 0px; margin: 0px"><tr>'+
          '<td>'+'&nbsp;&nbsp;&nbsp;<img src="images/walk.png"  title="' + 
          lang['walk_foot'] + '" class="walk_img" />' + '</td></tr></table>';
        td.innerHTML = html;
        td.width = 100;
        td.style.verticalAlign = "top";
        td = tr.insertCell(1);
        td.width = 200;
        td.style.verticalAlign = "top";
        if (this.segments[i].walk)
        {
          td.colSpan = 3;
          var html = '<table style="border: 0px solid #000; padding: 0px; margin: 0px"><tr>'+
            '<td>&nbsp;&nbsp;</td>' +
            '<td style="vertical-align: top">' +
              lang['walk'] + ' ' +
              lang['cca'] + ' ' + this.segments[i].walk + ' ' + lang['min'] + '.' +
            '</td>';
          if (maps_available)
            html += '<td class="hide_print">' + 
              '(<a href="#" title="'+lang['show_on_map']+'" '+
              'onclick="return show_map(this,'+this.num+','+i+')">'+
              lang['small_map']+'</a>)</td>';
          html += '</tr></table>';
          td.innerHTML = html;
        } else {
          td = tr.insertCell(2);
          td.width = 50;
          td = tr.insertCell(3);
          td.width = 200;
          td = tr.insertCell(4);
        }
      }
    }
    this.table = tbl;
    if (parent != null)
      parent.appendChild(tbl);
  }
  function trip( node )
  {
    this.segments = new Array();
    this.write = trip_write;
    this.write_preview = trip_write_preview;
    this.expand = trip_expand;
    this.contract = trip_contract;
    this.time = node.getAttribute('Time');
    
    var d = new Date;
    d.setTime( node.getAttribute('Date')*1000 );
    this.date = dateToStr( d );
    var nodes = node.getElementsByTagName('TripSegment');
    for (i = 0; i < nodes.length; i++)
    {
      this.segments[i] = new trip_segment(nodes.item(i));
    }
  }
  // ------------ helper functions --------------
  var lastDate;
  function load_hash()
  {
    return;
    var str = document.location.hash;
    if (str=='') return;
    str = str.substr(1);
    var a = str.split('/');
    for(i = 0; i < 4; i++)
      a[i] = decodeURI(a[i]);
    if (a[0]!='')
      document.getElementById('searchForm').from.value = a[0];
    if (a[1]!='')
      document.getElementById('searchForm').to.value = a[1];
    if (a[2]!='')
      document.getElementById('searchForm').date.value = a[2];
    if (a[3]!='')
      document.getElementById('searchForm').time.value = a[3];
    document.getElementById('searchForm').from_type.value = 0;
    document.getElementById('searchForm').to_type.value = 0;
    if ( (a[0]!='') && (a[1]!='') && (a[2]!='') && (a[3]!='') )
      search();
  }
  function add_trips()
  {
      if (http_request.readyState == 4) {
        searching = false;
        clearTimeout( search_timer );
        document.getElementById('searchBtn').disabled = false;
        if (http_request.status == 200) {
          var triplist = document.getElementById('triplist');
          triplist.removeChild( next_link );
          var i = 0;
          var xmldoc = http_request.responseXML;
          var root = xmldoc.getElementsByTagName('Data').item(0);
          idh = root.getAttribute('Idh');
          next_time = root.getAttribute('NextTime');
          var nodes = root.getElementsByTagName('Trip');
          var arrival = root.getAttribute('Arrival');
          arrival = (arrival == '1') ? true : false;
          var num;
          var oldnum = trips.length;
          triplist.removeChild( print_link );

          if (arrival) {
            next_link.innerHTML = '<a href="#" onclick="return search_more();">' +
              lang['earlier_trips'] + '</a>';
//            if (nodes.length >= batch_trip_count )
//              triplist.appendChild( next_link );
            var d = new Date();
            var time = root.getAttribute('Time');
            d.setTime( time*1000 );
            document.getElementById('searchDate').innerHTML = d.toLocaleString();
          }
          var first = trips[trips.length-1].div;
          for (var i = 0; i < nodes.length; i++) {
            num = trips.length;
            trips[num] = new trip(nodes.item(i));
            trips[num].num = num;
            trips[num].inum = i;
            trips[num].idh = idh;
            if (trips[num].date != lastDate)
            {
              var div = document.createElement("div");
              div.className = "hide_print";
              if (arrival) {
                div.innerHTML = '<h3>'+lastDate+'</h3>';
                triplist.insertBefore( div, first );
                first = div;
              } else {
                div.innerHTML = '<h3>'+trips[num].date+'</h3>';
                triplist.appendChild( div );
              }
              lastDate = trips[num].date;
            }
            div = document.createElement("div");
            div.className = "trip_box";
            if ( arrival ) {
              triplist.insertBefore( div, first );
              first = div;
            } else
              triplist.appendChild( div );
            trips[num].write_preview( div );
          }
          if (arrival) {
//            for (var i = 0; i < oldnum; i++)
//              triplist.appendChild( trips[i].div );
            if (nodes.length >= batch_trip_count )
              triplist.insertBefore( next_link, trips[trips.length-1].div );
          } else {
            next_link.innerHTML = '<a href="#" onclick="return search_more();">' +
              lang['next_trips'] + '</a>';
            if (nodes.length >= batch_trip_count )
              triplist.appendChild( next_link );
          }
          triplist.appendChild( print_link );
        } else {
          if (http_request.status==0) return;
          alert('There was a problem with the request.' + http_request.status);
        }
      }
  }
  function load_trips()
  {
      if (http_request.readyState == 4) {
        searching = false;
        clearTimeout( search_timer );
        document.getElementById('searchBtn').disabled = false;
        if (http_request.status == 200) {
          var i = 0;
          var xmldoc = http_request.responseXML;
          var root = xmldoc.getElementsByTagName('Data').item(0);
          var triplist = document.getElementById('triplist'); 
          idh = root.getAttribute('Idh');
          errors = root.getElementsByTagName('Error');

          next_time = root.getAttribute('NextTime');
          var nodes = root.getElementsByTagName('Trip');
          var arrival = root.getAttribute('Arrival');
          arrival = (arrival == '1') ? true : false;
          trips = new Array();
          var num;
          for (var i = 0; i < nodes.length; i++) {
            num = trips.length;
            trips[num] = new trip(nodes.item(i));
            trips[num].num = num;
            trips[num].inum = i;
            trips[num].idh = idh;
            lastDate = trips[0].date;
          }
          var from = root.getAttribute('From');
          var to = root.getAttribute('To');
          var time = root.getAttribute('Time');
          if (errors.length==0)
          {
            str = '<table id="connInfo"><tr><td style="text-align: left">';
            str += lang['conn'] + ':&nbsp;&nbsp;<b>' + from +
              '</b>&nbsp;&nbsp;&rarr;&nbsp;&nbsp;<b>' + to + '</b></td>';
            var d = new Date();
            d.setTime( time*1000 );
            str += '<td style="text-align: right"><b><span id="searchDate">' + d.toLocaleString();
            str += '</span></b></td></tr></table>';
            lastDate = dateToStr( d );
            triplist.innerHTML = str;
            triplist.innerHTML += '&nbsp;&nbsp;'
            if (trips.length == 0)
            {
              triplist.innerHTML += lang['no_trips_found'] +
                '<br/>&nbsp;&nbsp;' + lang['try_inc_walk'];
            } else
            {
              if (false)
                triplist.innerHTML +=
                  (trips.length==1) ? lang['trip_found'] : lang['trips_found'] +
                  ':<br />';
              if(arrival)
              {
                next_link.innerHTML = '<a href="#" onclick="return search_more();">' +
                  lang['earlier_trips'] + '</a>';
                if (nodes.length >= batch_trip_count)
                  triplist.appendChild( next_link );
              }
              lastDate = trips[0].date;
              for (i = 0; i < trips.length; i++)
              {
                if (trips[i].date != lastDate)
                {
                  var div = document.createElement("div");
                  div.className = "hide_print";
                  if (arrival) {
                    div.innerHTML = '<h3>'+lastDate+'</h3>';
                    triplist.insertBefore( div, first );
                    first = div;
                  } else {
                    div.innerHTML = '<h3>'+trips[num].date+'</h3>';
                    triplist.appendChild( div );
                  }
                  lastDate = trips[i].date;
                }
                var div = document.createElement("div");
                div.className = "trip_box";
                if( (!arrival) || (i==0) )
                  triplist.appendChild( div );
                else
                  triplist.insertBefore( div, first );
                first = div;
                trips[i].write_preview( div );
              }
              trips[0].expand();
              triplist.appendChild( print_link );
              if(!arrival)
              {
                next_link.innerHTML = '<a href="#" onclick="return search_more();">' +
                  lang['next_trips'] + '</a>';
                if (nodes.length >= batch_trip_count)
                  triplist.appendChild( next_link );
              }
            }
          } else {
            triplist.innerHTML = '<b>'+lang['error']+':<br />';
            for(var i = 0; i < errors.length; i++ )
            {
              n = errors.item(i);
              triplist.innerHTML += n.getAttribute('Text') + '<br />';
            }
            triplist.innerHTML += '</b>';
          }
        } else {
          alert('There was a problem with the request.' + http_request.status);
        }
      }
  }
  var searching = false;
  var next_time = '';
  var search_timer;
  var search_speed;
  function still_searching()
  {
    next_link.innerHTML += '.';
    search_timer = setTimeout( 'still_searching()', search_speed );
  }
  function search()
  {
    if (searching)
      return false;
    next_time = '';
    var f = document.getElementById('searchForm');
    var from = f.from.value;
    var to = f.to.value;
    var time = f.time.value;
    var date = f.date.value;
    var trlay = f.trlay.value;
    var trmax = f.trmax.value;
    var trwalk = f.trwalk.value;
    var startwalk = f.startwalk.value;
    var endwalk = f.endwalk.value;
    var pt_from = f.from_type.value;
    var pt_to = f.to_type.value;
    var arrival = (f.arrival[1].checked) ? 1 : 0;
    if (swapped_input)
    {
      var tmp = from; from = to; to = tmp;
      tmp = pt_from; pt_from = pt_to; pt_to = tmp;
    }
    var params = 'action=search&from='+encodeURI(from)+'&to='+encodeURI(to)+
      '&pt_from='+pt_from+'&pt_to='+pt_to+
      '&date='+date+'&time='+time+
      '&trlay='+trlay+'&trmax='+trmax+'&trwalk='+trwalk+
      '&startwalk='+startwalk+'&endwalk='+endwalk+'&arrival='+arrival;
    var triplist = document.getElementById('triplist');
    triplist.innerHTML = '';
    triplist.appendChild( next_link );
    next_link.innerHTML = lang['searching'];
    search_speed = 300;
    search_timer = setTimeout( 'still_searching()', search_speed );
    searching = true;
    document.getElementById('searchBtn').disabled = true;
//    triplist.innerHTML = 'http://localhost/trz/ajax.php?'+params;
    makeRequest( http_request, params, load_trips );
//    document.location.hash = encodeURI(from)+'/'+encodeURI(to)+'/'+encodeURI(date)+'/'+encodeURI(time);
    return false;
  }
  function search_more()
  {
    if (searching)
      return false;
    if (next_time.length == 0)
      return false;
    var f = document.getElementById('searchForm');
    var from = f.from.value;
    var to = f.to.value;
    var time = f.time.value;
    var date = f.date.value;
    var trlay = f.trlay.value;
    var trmax = f.trmax.value;
    var trwalk = f.trwalk.value;
    var startwalk = f.startwalk.value;
    var endwalk = f.endwalk.value;
    var pt_from = f.from_type.value;
    var pt_to = f.to_type.value;
    var arrival = (f.arrival[1].checked) ? 1 : 0;
    if (swapped_input)
    {
      var tmp = from; from = to; to = tmp;
      tmp = pt_from; pt_from = pt_to; pt_to = tmp;
    }
    var params = 'action=search&from='+encodeURI(from)+'&to='+encodeURI(to)+
      '&pt_from='+pt_from+'&pt_to='+pt_to+
      '&datetime='+next_time+
      '&trlay='+trlay+'&trmax='+trmax+'&trwalk='+trwalk+
      '&startwalk='+startwalk+'&endwalk='+endwalk+'&arrival='+arrival;
    searching = true;
    next_link.innerHTML = lang['searching'];
    search_timer = setTimeout( 'still_searching()', search_speed );
    document.getElementById('searchBtn').disabled = true;
    makeRequest( http_request, params, add_trips );
    return false;
  }
  // ---------- suggestions ------------             
  var timer;
  var curTextBox;
  var suggestTimeout = 400;
  function sugg_over(div) {
  	div.className = 'sugg_over';
  }
  function sugg_out(div) {
  	div.className = 'sugg_out';
  }
  function sugg_set(input, value) {
    var el = document.getElementById(input);
  	el.value = value;
  	document.getElementById('sugg_'+el.name).innerHTML = '';
  	document.getElementById('sugg_'+el.name).style.visibility = 'hidden';
  	document.getElementById('from').style.visibility = 'visible';
  	document.getElementById('to').style.visibility = 'visible';
  }
  function sugg_close(div)
  {
    var el = document.getElementById( div );
    el.innerHTML = '';
    el.style.visibility = 'hidden';
  	document.getElementById('from').style.visibility = 'visible';
  	document.getElementById('to').style.visibility = 'visible';
  }
  function load_sugg()
  {
    if (curTextBox == null) return;
    var el = curTextBox;
    if (sugg_request.readyState == 4) {
      if (sugg_request.status == 200) {
        var div = document.getElementById( 'sugg_' + el.name );
        div.style.visibility = 'hidden';
        var xmldoc = sugg_request.responseXML;
        var n = xmldoc.getElementsByTagName('Stop');
        if (n.length == 0) return;
        if (n.length == 1)
          if (n.item(0).getAttribute('Name')==el.value)
            return;
        div.innerHTML = '';
        div.style.visibility = 'visible';
        if ( (el.name=='from') && (!swapped_input) )
          if (navigator.appVersion.indexOf("MSIE")!=-1)
           	document.getElementById('to').style.visibility = 'hidden';
        if ( (el.name=='to') && (swapped_input) )
          if (navigator.appVersion.indexOf("MSIE")!=-1)
    	      document.getElementById('from').style.visibility = 'hidden';

        if (div == null) return;
        var str = '';
        div.innerHTML += '<div style="font-size: 10px; background: #FFF; ' +
          'cursor: pointer" onclick="sugg_close(\'sugg_' +
          el.name + '\')">' + lang['close'] + '</div>';
        for( var i = 0; i < n.length; i++ )
        {
          var name = n.item(i).getAttribute('Name');
          var old_name = n.item(i).getAttribute('OldName');
          str = '<div style="cursor: pointer" onmouseover="sugg_over(this);" ';
          str +=  'onmouseout="sugg_out(this);" ';
          str +=  'onclick="sugg_set(\''+el.name+'\', \''+name+'\');" ';
          str +=  'class="sugg_out">';
          str += name;
          if (old_name!=null)
            str += '&nbsp;&nbsp;<span style="font-size: 11px">(ex: '+ old_name + ')</span>';
          str += '</div>';
          div.innerHTML += str;
        }
      } else {
        if (sugg_request.status==0) return;
        alert('There was a problem with the request.' + http_request.status);
      }
    }
  }
  function sugg()
  {
    if (curTextBox == null) return;
    if (sugg_request.readyState != 0)
      sugg_request.abort();
    if (sugg_request.readyState == 4 || sugg_request.readyState == 0) {
      var el = curTextBox;
      var str = escape( el.value );
      str = el.value;
      if (str.length < 3) return;
      var params = encodeURI('action=sugg&input='+str);
      makeRequest( sugg_request, params, load_sugg );
    }
  }
  function sugg_hide_start_timer()
  {
    if (curTextBox == null) return;
    clearTimeout( timer );
    setTimeout( 'sugg_close("sugg_'+curTextBox.name+'")', 200);
    curTextBox = null;
  }
  function start_timer( el )
  {
    clearTimeout( timer );
    curTextBox = el;
    autoc_off( el );
    timer = setTimeout("sugg()", suggestTimeout);
    if (sugg_request.readyState != 0)
      sugg_request.abort();
  }
  // search form tricks
  function swap_input()
  {
    var f_v = document.getElementById('from').value;
    var t_v = document.getElementById('to').value;
    var f_pt = document.getElementById('from_type').value;
    var t_pt = document.getElementById('to_type').value;
    var f = document.getElementById('from_td');
    var t = document.getElementById('to_td');
    var tmp = f.innerHTML;
    f.innerHTML = t.innerHTML;
    t.innerHTML = tmp;
    document.getElementById('from').value = f_v;
    document.getElementById('to').value = t_v;
    document.getElementById('from_type').value = f_pt;
    document.getElementById('to_type').value = t_pt;
    swapped_input = !swapped_input;
    if (advanced_hidden)
    {
      tmp = document.getElementById('startwalk').value;
      document.getElementById('startwalk').value = 
        document.getElementById('endwalk').value;
      document.getElementById('endwalk').value = tmp;
    }
    return;
  }
  function date_offset( days )
  {
    var d = new Date();
    d.setTime( d.getTime() + days*24*60*60*1000 );
    var el = document.getElementById('searchForm').date;
    el.value = d.getDate() + '.' + (d.getMonth()+1) + '.';
  }
  function time_offset( mins )
  {
    var d = new Date();
    d.setTime( d.getTime() + mins*60*1000 );
    var el = document.getElementById('searchForm').time;
    var m = d.getMinutes().toString();
    if (m.length == 1)
      m = '0'+m;
    el.value = d.getHours() + ':' + m;
  }
  function autoc_off( el )
  {
    el.setAttribute("autocomplete","off");
  }
  function toggle_advanced( a )
  {
    var tbl = document.getElementById('searchParamsTable');
    var j = 0;
    for( var i = 0; i < tbl.rows.length; i++ )
    {
      if (tbl.rows[i].className == 'advanced')
        tbl.rows[i].className = 'advanced_show';
      else
      if (tbl.rows[i].className == 'advanced_show')
        tbl.rows[i].className = 'advanced';
    }
    if (advanced_hidden)
      a.innerHTML = lang['hide_advanced'];
    else
      a.innerHTML = lang['show_advanced'];
    advanced_hidden = !advanced_hidden;
    return false;
  }
  // -- place type
  var pt_name = '';
  function switch_type( el )
  {
    if (pt_request.readyState != 0);
      pt_request.abort();
    if (pt_request.readyState == 4 || pt_request.readyState == 0) {
      pt_name = el.name;
      var a = pt_name.split('_');
      var b = a[0] + '_container';
      var c = document.getElementById( b );
      var v = el2 = document.getElementById( a[0] ).value;
      makeRequest( pt_request,
        encodeURI('action=placetype&el=' + el.id + '&pt=' + el.value + 
          '&v=' + v),
        set_type );
      c.innerHTML = '<input type="text" size="30" style="width: 300px" '+
        'name="'+ a[0] +'" id="'+a[0]+'" readonly="readonly" '+
        'value="' + lang['loading'] + '..' + '"/>';
    }
  }
  function set_type()
  {
    if (pt_request.readyState == 4) {
      if (pt_request.status == 200) {
        var html = pt_request.responseText;
        var a = pt_name.split('_');
        var b = a[0] + '_container';
        var value = document.getElementById( a[0] ).value;
        var c = document.getElementById( b );
        c.innerHTML = html;
        if ( (String(Number(value)) != value) && (value != '') )
          ; // document.getElementById( a[0] ).value = value;
        if (advanced_hidden)
        {
          var pt = document.getElementById(a[0]+'_type').value;
          if ( ((a[0]=='from') && (!swapped_input)) ||
               ((a[0]=='to') && (swapped_input)) )
            var ew = document.getElementById('startwalk');
          else
            var ew = document.getElementById('endwalk');
          if ((pt==1) || (pt==2))
            ew.value = 5;
          else
            ew.value = 10;
        }
        return;
      }
    }
  }
  // map functions
  var maps_available = 1; //GBrowserIsCompatible();
  function myIcon( url )
  {
    var icon = new GIcon(G_DEFAULT_ICON);
    icon.image = url;
    icon.printImage = url;
    icon.mozPrintImage = url;
    icon.printShadow = '';
    return icon;
  }
  function azIcon( i )
  {
    return myIcon( 'images/red_Marker' + String.fromCharCode(65+i) + '.png' );
  }
  function close_map( a, num, i )
  {
    var t = trips[num];
    var span = a.parentNode.parentNode.parentNode.parentNode.parentNode;
    span.className = "hide_print";
    var mapid = 'map-'+num.toString()+'-'+i.toString();
    span.innerHTML = '(<a href="#" title="' + lang['show_on_map'] +
      '" onclick="return show_map(this,'+num+','+i+')">'+
      lang['small_map']+'</a>)';
    return false;
  }
  function show_big_map( num )
  {
    t = trips[num];
    window.open('map.php?' + t.idh + t.inum, '_blank'
//      ,'directories=no,location=yes,menubar=no,scrollbars=no,status=yes,titlebar=yes,toolbar=no'
    );
    return false;
  }
  function show_map( a, num, i )
  {
    var t = trips[num];
    var span = a.parentNode;
    span.className = "";
    var mapid = 'map-'+num.toString()+'-'+i.toString();
    span.innerHTML =
      '<table style="border: 0px"><tr><td>'+
      '<div id="'+mapid+'" style="width: '+mapwidth+'px; height: '+mapheight+'px"/><br/>'+
      '</td><td class="hide_print" style="vertical-align: top">'+
      '(<a href="#" onclick="return close_map(this,'+num+','+i+');">'+lang['close']+'</a>)<br/>'+
      '</td></tr></table>';
    var map = new GMap2(document.getElementById(mapid));
    map.addControl( new GSmallZoomControl() );
    map.addControl( new GMapTypeControl() );
    maps[mapid] = map;
    if (dir_request.readyState == 4 || dir_request.readyState == 0)
      makeRequest( dir_request,
        encodeURI( 'action=walk_dir&mapid='+mapid+'&idh='+t.idh+'&num='+t.inum+'&seg='+i ),
        display_map );
    return false;
  }
  function display_map()
  {
    if (dir_request.readyState == 4) {
      if (dir_request.status == 200) {
        var xmldoc = dir_request.responseXML;
        var root = xmldoc.getElementsByTagName('Data').item(0);
        var pts = root.getElementsByTagName('Point');
        if (!pts.length) return;
        var p1 = pts[0];
        var p2 = pts[ pts.length-1 ];
        var mapid = root.getAttribute('MapId');
        map = maps[mapid];
        var t1 = new GLatLng( p1.getAttribute('Lat'), p1.getAttribute('Lon') );
        var t2 = new GLatLng( p2.getAttribute('Lat'), p2.getAttribute('Lon') );
        var lat3 = (Number(t1.lat())+Number(t2.lat()))/2.0;
        var lon3 = (Number(t1.lng())+Number(t2.lng()))/2.0;
        var t3 = new GLatLng( lat3, lon3 );
        map.setCenter( t3, 15 );
        var m1 = new GMarker( t1, { icon: azIcon(0), title: p1.getAttribute('Name') } );
        var m2 = new GMarker( t2, { icon: azIcon(1), title: p2.getAttribute('Name') }  );

        var name1 = '<b>'+p1.getAttribute('Name')+'</b>';
        var name2 = '<b>'+p2.getAttribute('Name')+'</b>';
        m1.bindInfoWindowHtml( name1 );
        m2.bindInfoWindowHtml( name2 );
        map.addOverlay( m1 );
        map.addOverlay( m2 );
      }
    }
  }
  
