// $Id: suggest.js 1080 2010-04-20 13:52:03Z nbt $
// nbt, 28.2.08

"use strict";

/*global YAHOO document window */

YAHOO.namespace('zbw.stw');
(YAHOO.zbw.stw.suggest = function () {

  // MSIE doesn't accept const
  var SUGGEST_URL, suggest_ds, auto_comp, select_handler, lang, stw_version, get_url;

  // URL must point to the same domain where the current page resides
  // (due to browser security restrictions)
  // address can be redirected to http://zbw.eu/beta/stw-ws/suggest
  // in the web server configuration (reverse proxy settings)

  SUGGEST_URL = '/beta/stw-ws/suggest';

  // configure the data source
  suggest_ds = new YAHOO.util.XHRDataSource(SUGGEST_URL);
  suggest_ds.responseType = YAHOO.util.XHRDataSource.TYPE_JSON;
  suggest_ds.responseSchema = {
    resultsList : "results.bindings", // String pointer to result data
    // N.B. fields have sub-structures (type, value)
    fields : [ "term", "concept", "prefLabel" ]
  };

  // configure the autocomplete component
  auto_comp = new YAHOO.widget.AutoComplete("suggest_input", "suggest_output", suggest_ds);
  auto_comp.allowBrowserAutocomplete = false; 
  auto_comp.minQueryLength = 2;
  lang = document.getElementById('lang').value;
  stw_version = document.getElementById('stw_version').value;
  auto_comp.generateRequest = function (sQuery) {
    return "?lang=" + lang + "&query=" + sQuery;
  };

  // Result data passed as object for easy access from custom formatter.
  auto_comp.resultTypeList = false;

  // Customize formatter to show prefLabel or term -> prefLabel
  auto_comp.formatResult = function (oResultData, sQuery, sResultMatch) {
    var result;
    if (oResultData.term.value === oResultData.prefLabel.value) {
      result = oResultData.prefLabel.value;
    } else {
      result = oResultData.term.value + ' &' + '#8594; ' + oResultData.prefLabel.value;
    }
    return result;
  };

  // Define an event handler to execute any actions on the result data
  select_handler = function (sType, aArgs) {
    var oData, concept_uri, action_url; 

    //var myAC = aArgs[0]; // reference back to the AC instance
    //var elLI = aArgs[1]; // reference to the selected LI element
    oData = aArgs[2]; // object literal of selected item's result data
      
    // Reset input field
    auto_comp.getInputEl().value = '';

    // set the target address (specific to current lang and stw_version)
    concept_uri = oData.concept.value;
    action_url = get_url(concept_uri, lang, stw_version);

    window.location.href = action_url;
    return;
  };
  auto_comp.itemSelectEvent.subscribe(select_handler);

  // make version and language choise sticky
  get_url = function (concept_uri, lang, stw_version) {
    var pos, stw_base_uri, concept, version;

    pos = concept_uri.indexOf('/stw/');
    stw_base_uri = concept_uri.substring(0, pos + 5);
    concept = concept_uri.substring(pos + 5);

    if (document.URL.match(/\/latest\//)) {
      version = 'latest';
    } else {
      version = stw_version;
    }

    return stw_base_uri + 'versions/' + version + '/' + concept + '/about.' + lang + '.html';
  };

  return;
}());

