/* variables definition */
var _aptSrcBoxPfx = new Array(null,null);
var _aptCurrCnt = new Array(null,null);
var _aptCurrApt = new Array(null,null); // dafare utilizzare in seguito
var _aptCurrKwd = new Array(null,null);
var _aptListBox = new Array();
var _aptLastSearch = new Array(1,1);
var _aptTimeout = new Array();

/* public fncts */
function drawAirportSearchBox(type,idPrefix,selCnt,multiple) {
	var idx = (type == 'A' ? 1 : 0);
	if(_aptSrcBoxPfx[idx] != null)
		return;
	_aptSrcBoxPfx[idx] = idPrefix;
	if(selCnt != null)
		_aptCurrCnt[idx] = selCnt;

	document.writeln("<table>");
	document.writeln("<tr><td>");
	document.writeln("<div class='choicelabel highlight'>" + _aptSrcBox_msgs[3] + ":</div>");
	document.writeln("<input type='text' autocomplete='off' onKeyDown='javascript:_changeKeyWordHandler(\""+idPrefix+"\", event);' onKeyUp='javascript:_changeKeyword(\""+idPrefix+"\",this.value,event);' onfocus='javascript:_onSrcFldFocus(\""+idPrefix+"\",2,\"begin\");' class='inputKeyword' id='"+idPrefix+"_src2'>");
	document.writeln("</td></tr>");
	document.writeln("<tr style='display: none;'><td>");
 	document.writeln("<div class='choicelabel'>" + _aptSrcBox_msgs[0] + ":</div>");
	document.writeln("<select size='1' onchange='javascript:_onCntSelected(\""+idPrefix+"\",this.value);' onfocus='javascript:_onSrcFldFocus(\""+idPrefix+"\",1,\"begin\");' onblur='javascript:_classControl(\""+idPrefix+"\");' class='selectCountriesInactive' id='"+idPrefix+"_src1'>");
	document.writeln("<option value=''>" + _aptSrcBox_msgs[1] + "</option>");
	document.writeln("</select></td></tr>");
	document.writeln("<tr><td valign='top'>");
	document.writeln("<div class='choicelabel highlight'>" + _aptSrcBox_msgs[2] + ": <img id='"+idPrefix+"_spinner' src='"+_volagratisSpinnerImg+"' style='display:none'></div>");
	document.writeln("<div id='"+idPrefix+"_airports' class='listBox'></div>");
	document.writeln("<input type='hidden' id='"+idPrefix+"_keywords' name='"+idPrefix+"_keywords' value=''>");	
	document.writeln("<input type='input' autocomplete='off' style='position:absolute;width:0px;height:0px;border:0px;z-index:-1;' onKeyDown='_aptListBox[\""+idPrefix+"\"].handleKeyPress(event);' id='"+idPrefix+"_focusctrl' name='"+idPrefix+"_focusctrl' onfocus='this.value=1' onblur='this.value=0;_aptListBox[\""+idPrefix+"\"].resetLast();'>");
	document.writeln("</td></tr></table>");

	_aptListBox[idPrefix] = new ListBoxClass(idPrefix + '_airports',multiple);
	if(idx == 0)
		_aptListBox[idPrefix].onselect = _onDepSelected;
	else if(airportSearchBox_filter == 'route')
		_toggleBox(idPrefix, true);
}

function changeAirportFilter(filter) {
	if(filter == airportSearchBox_filter)
		return false;

	airportSearchBox_filter = filter;
	idPrefix = _aptSrcBoxPfx[0]+ '_src1';
	_aptCurrCnt[0] = document.getElementById(_aptSrcBoxPfx[0]+'_src1').value;
	_aptCurrKwd[0] = document.getElementById(_aptSrcBoxPfx[0]+'_src2').value;
	depApt = getAirportsSelected(_aptSrcBoxPfx[0]); // dafare va posto in _depDefApt (anche arrivo)
	_aptCurrCnt[1] = document.getElementById(_aptSrcBoxPfx[1]+'_src1').value;
	_aptCurrKwd[1] = document.getElementById(_aptSrcBoxPfx[1]+'_src2').value;

	_toggleBox(_aptSrcBoxPfx[1], airportSearchBox_filter == 'route');

	loadAirportsData();
	return false;
}

function getAirportsSelected(idPrefix) {
  return decodeURIComponent($F(idPrefix + '_airports_hidden'));
}

function getKeywordsTried(idPrefix) {
  return $F(idPrefix + '_keywords');
}

String.prototype.trim = function() { return this.replace(/^\s+|\s+$/, ''); };


/* private fncts */
function loadAirportsData()
{
	var tmp = null;
	if(airportSearchBox_filter == 'route')
	{
	    if(_aptLastSearch[0] == 2)
	    {
            reqType = 13; // apt1 on key1 (flt)
            tmp = '&key=' + _aptCurrKwd[0];
        }
	    else if(_aptLastSearch[0] == 1)
            reqType = 6; // cnt1, apt1 (flt)
// dafare se depapt deve anche caricare le nazioni di arrivo collegate - e se fosse multiplo?
	}
	else
	{
	    if(_aptLastSearch[0] == 2)
	    {
            reqType = 12; // apt1 on key1 (no flt)
            tmp = '&key=' + _aptCurrKwd[0];
        }
	    else if(_aptLastSearch[0] == 1)
	    {
    		reqType = 1; // cnt1, apt1, cnt2 (no flt)
    		if(_aptCurrCnt[1]!= null)
    			tmp = 'arrcnt=' + _aptCurrCnt[1];
    	}
	}
	var pars = 'reqtype='+reqType;
	if(_aptCurrCnt[0] != null)
		pars = pars + '&depcnt=' + _aptCurrCnt[0];
	if(tmp != null)
		pars = pars + '&' + tmp;
	_getServerData(pars);
}

function _onCntSelected(idPrefix,id)
{
	return _doSearch(idPrefix,id,1);
}

function _onDepSelected()
{
	if(airportSearchBox_filter == 'route')
	{
		_aptLastSearch[1] = 1;
		reqType = 8; // cnt2 on apt1 (flt)
		_getServerData('reqtype='+reqType+'&depapt=' + getAirportsSelected(_aptSrcBoxPfx[0]));
	}
	_toggleBox(_aptSrcBoxPfx[1], false);
	return false;
}

function _populateCountries(target, cntList, defCnt)
{
	var elem = document.getElementById(target +'_src1');
	elem.options.length = 0;
	elem.options[elem.options.length] = new Option(_aptSrcBox_msgs[1],'',false,false);
	if(cntList != null)
		for(cnt in cntList)
	      	elem.options[elem.options.length] = new Option(cntList[cnt],cnt,false,cnt == defCnt);
}

function _populateAirports(target,aptList,keyword)
{
  _aptListBox[target].reset();
  var elem = $(target + '_src1');
  if(aptList != null)
    for(apt in aptList)
    {
      parts = aptList[apt].split('|'); // id, town,name,  country
      descr = _getAirportDescr(parts[0],parts[1],parts[2],parts[3]);
      if(keyword != null)
      {
        cmd = "descr.replace(/" + keyword + "/gi, \"<span class='hilite'>$&</span>\")";
        descr = eval(cmd);
      }
      if(parts[1] != null)
      {
        descr = encodeURIComponent(descr);
        cmd = "descr.replace(/" + encodeURIComponent(parts[1]) + "/gi, \"<span class='cityBig'>$&</span>\")";
        cmd = "descr.replace(/" + encodeURIComponent(parts[3]) + "/gi, \"<span class='lowlight'>$&</span>\")";
        descr = eval(cmd);
        descr = decodeURIComponent(descr);
      }
      _aptListBox[target].addOption(descr,parts[0],false);
   }
}

function _onSrcFldFocus(target,field,mode)
{
	fld2 = (field == 1) ? 2 : 1;
	if(mode == 'end')
	{
	  if (field == 1)
		  $(target+'_src'+fld2).className = 'inputKeywordInactive';
		else
		  $(target+'_src'+fld2).className = 'selectCountriesInactive';
		$(target+'_airports').className = 'listBoxActive';
	}
  if (field == 1)
	  $(target+'_src'+field).className = 'selectCountries';
	else
	  $(target+'_src'+field).className = 'inputKeyword';
	return false;
}

function _classControl(target)
{
	if(this.selectedIndex <= 0 || ( $('container').style.visibility !== 'none' && $F(target+"_src2") !== '') )
		this.className = "selectCountriesInactive";
}

function _changeKeyWordHandler(idPrefix, evnt)
{
	if(document.all && document.getElementById)
		keycode = evnt.keyCode;
	else
		keycode = evnt.which;

	if(keycode == Event.KEY_TAB)
	{
		$(idPrefix+'_focusctrl').focus();
		_aptListBox[idPrefix].moveFocus(0, _aptListBox[idPrefix].focused);
        Event.stop(evnt);
	}
}

function _changeKeyword(idPrefix,key,evnt)
{
	if(document.all && document.getElementById)
		keycode = evnt.keyCode;
	else
		keycode = evnt.which;
	if(keycode == Event.KEY_TAB)
	   return;

	if(_aptTimeout[idPrefix])
		clearTimeout(_aptTimeout[idPrefix]);
	key = key.trim();
	if(key.length>=3)
	{
		tmp = $F(idPrefix+'_keywords');
		if(tmp.length > 0)
			tmp += " ";
		$(idPrefix+'_keywords').value = tmp + key;
		var cmd = "_doSearch('"+idPrefix+"','"+key+"',2)";
		_aptTimeout[idPrefix] = setTimeout(cmd, 400);
	}
	else
	{
		_aptListBox[idPrefix].reset();
	}
	_onSrcFldFocus(idPrefix,2,'end');
}

function _doSearch(idPrefix,id,type)
{
	_aptListBox[idPrefix].reset();
	var isDep = (idPrefix == _aptSrcBoxPfx[0]);
	if(isDep && airportSearchBox_filter == 'route')
	{
		var elem = document.getElementById(_aptSrcBoxPfx[1]+'_src1');
		elem.options.length = 0;
		_aptListBox[_aptSrcBoxPfx[1]].reset();
	}

	var reqtype = -1;
	var tmp = null;
	if(airportSearchBox_filter == 'route')
	{
		if(isDep)
		{
			if(type == 1)
			{
				reqType = 7; // apt1 on cnt1 (flt)
				tmp = 'depcnt=' + id;
			}
			else if(type == 2)
			{
				reqType = 10; // apt1 on key1 (flt)
				tmp = 'key=' + id;
			}
		}
		else
		{
			if(type == 1)
			{
				reqType = 9; // apt2 on cnt2 (flt)
				tmp = 'depapt=' + getAirportsSelected(_aptSrcBoxPfx[0]) + '&arrcnt=' + id;
			}
			else if(type == 2)
			{
				reqType = 11; // apt2 on cnt2 (flt)
				tmp = 'depapt=' + getAirportsSelected(_aptSrcBoxPfx[0]) + '&key=' + id;
			}
		}
	}
	else
	{
		if(isDep)
		{
			if(type == 1)
			{
				reqType = 2; // apts1 on cnt1 (no flt)
				tmp = 'depcnt=' + id;
			}
			else if(type == 2)
			{
				reqType = 4; // apts1 on cnt1 (no flt)
				tmp = 'key=' + id;
			}
		}
		else
		{
			if(type == 1)
			{
				reqType = 3; // apts2 on cnt2 (no flt)
				tmp = 'arrcnt=' + id;
			}
			else if(type == 2)
			{
				reqType = 5; // apts2 on cnt2 (no flt)
				tmp = 'key=' + id;
			}
		}
	}

	_aptLastSearch[isDep?0:1] = type;

	var pars = 'reqtype='+reqType;
	if(tmp != null)
		pars = pars + '&' + tmp;

	if(type == 1)
		_onSrcFldFocus(idPrefix,1,'end');
	_showSpinner(idPrefix,true);
	_getServerData(pars);
	return false;
}

function _toggleBox(idPrefix, flag) {
 	if(!idPrefix)
 		return;
	$(idPrefix + '_src1').disabled = flag;
	$(idPrefix + '_src2').disabled = flag;
}


/* JSON function */
function hAptDt(requestType,keyword,countries1,airports1,countries2,airports2)
{
	switch(requestType)
	{
		case 1:	// cnt1, apt1, cnt2 (no flt)
		case 12:	// cnt1, apt1 on key1, cnt2 (no flt)
			_populateCountries(_aptSrcBoxPfx[0], countries1, _aptCurrCnt[0]);
			_populateAirports(_aptSrcBoxPfx[0], airports1, keyword);
//			_populateCountries(_aptSrcBoxPfx[1], countries2, _aptCurrCnt[1]);
//			_populateCountries(_aptSrcBoxPfx[1], countries2, null);
//			_populateAirports(_aptSrcBoxPfx[1], null, null);
			break;
		case 2:	// apt1 on cnt1 (no flt)
		case 7:	// apt1 on cnt1 (flt)
			_populateAirports(_aptSrcBoxPfx[0], airports1, null);
			break;
		case 3:	// apt2 on cnt2 (no flt)
		case 9:	// apt2 on cnt2 (flt)
			_populateAirports(_aptSrcBoxPfx[1], airports2, null);
			break;
		case 4:	// apt1 on key1 (no flt)
		case 10:	// apt1 on key1 (flt)
			_populateAirports(_aptSrcBoxPfx[0], airports1, keyword);
			break;
		case 5:	// apt2 on key2 (no flt)
		case 11:	// apt2 on key2 (flt)
			_populateAirports(_aptSrcBoxPfx[1], airports2, keyword);
			break;
		case 6:	// cnt1, apt1 (flt)
		case 13:	// cnt1, apt1 on key1 (flt)
			_populateCountries(_aptSrcBoxPfx[0], countries1, _aptCurrCnt[0]);
			_populateAirports(_aptSrcBoxPfx[0], airports1, keyword);
			_populateCountries(_aptSrcBoxPfx[1], null, null);
			_populateAirports(_aptSrcBoxPfx[1], null, null);
			break;
		case 8:	// cnt2 on apt1 (flt)
//			_populateCountries(_aptSrcBoxPfx[1], countries2, _aptCurrCnt[1]);
			_populateCountries(_aptSrcBoxPfx[1], countries2, null);
			_populateAirports(_aptSrcBoxPfx[1], null, null);
			break;
	}
	_showSpinner(_aptSrcBoxPfx[0],false);
	_showSpinner(_aptSrcBoxPfx[1],false);
	countries1 = null;
	countries2 = null;
	airports1 = null;
	airports2 = null;
}

