var solrUrl = "http://88.191.92.37:8983/solr/";

var meAutoCompletionWidget;

var AutoCompletionWidget = function(id, solr_url, fields, use_docs)
{
  meAutoCompletionWidget = this;
  
  this.inputId = id;
  this.solrUrl = solr_url;
  this.fields = fields;
  this.queryUrl = null;
  this.useDocs = use_docs;        // facet or docs
  this.buildQueryUrl();
}

AutoCompletionWidget.prototype.buildQueryUrl = function()
{
  if (this.useDocs)
  {
    this.queryUrl = this.solrUrl + "&rows=99999999&start=0";
    
    this.queryUrl += "&fl=";
    
    for(var index = 0; index < this.fields.length; index++)
    {
      if (index > 0)
        this.queryUrl += ",";
        
      this.queryUrl += this.fields[index];  
    }
  }
  else
  {
    this.queryUrl = this.solrUrl + "&rows=0&start=0";
    
    this.queryUrl += "&facet=true";
  
    for(var index = 0; index < this.fields.length; index++)
    {
      this.queryUrl += "&facet.field=" + this.fields[index];  
    }
  }
  
  this.queryUrl += "&wt=json&json.wrf=?&jsoncallback=?";  
}

AutoCompletionWidget.prototype.getValues = function ()
{
  this.doRequest();
}

AutoCompletionWidget.prototype.doRequest = function (handle)
{
  var me = this;
  
  jQuery.getJSON(this.queryUrl, function(data) {me.handleResult(data);});
}

AutoCompletionWidget.prototype.handleResult = function (data)
{ 
   var list = [];
   if (this.useDocs == true)
   {
      var values = data.response.docs; 

      var label;
      var value;
      var field;
      
      for (var i = 0; i < values.length; i = i + 1) 
      {
        var doc = values[i];
        for (var j = 0; j < this.fields.length; j++) 
        {
           field = this.fields[j];
           if (doc[field])
           {
              label = doc[field];
              value = doc[field];

              list.push({text:label, value:value, field:field});
           }
        }
      }
   }
   else
   {
    for (var j = 0; j < this.fields.length; j++) 
    {
      var field = this.fields[j];
      var values = data.facet_counts.facet_fields[field];  
      for (var i = 0; i < values.length; i = i + 2) 
      {
        var label = values[i];// + " <i>(" + values[i+1] + ")</i>" ;      
        var value = values[i];
        list.push({text:label, value:value, field:field});
      }
    }
   }
   
    var input = $("#"+ this.inputId);

    input.autocomplete(list, {
      formatItem: function(item) {
        return item.text;
      },
      formatMatch: function(item)
      {
        return item.value;
      },
      matchContains : true,
      matchBeginWord : true
      
    }).result(function(event, item) {
      
    });
}


var CloudWidget = function(id, solrQueryUrl, fields, linkFields, maxCountFields, tagUrl, tagUrlAddon)
{  
  this.elementId = id;
  this.solrQueryUrl = solrQueryUrl;
  this.fields = fields;
  this.linkFields = new Array();
  this.maxCountFields = new Array();
  if (tagUrl)
    this.tagUrl = tagUrl;
  else
    this.tagUrl = "/achat-vin";  
  
  this.tagUrlAddon = tagUrlAddon;
  
  for(var item = 0; item < fields.length; item++)
  {
    if (linkFields && item < linkFields.length)
      this.linkFields[fields[item]] = linkFields[item];
    else
      this.linkFields[fields[item]] = fields[item];  
  }
  
  if (maxCountFields)
  {
    for(var item = 0; item < fields.length; item++)
    {
      if (item < maxCountFields.length)
        this.maxCountFields[fields[item]] = maxCountFields[item];
    }
  }
  
  this.solrQueryFullUrl = null;
  
  this.buildQueryUrl();
}

CloudWidget.prototype.buildQueryUrl = function()
{
  this.solrQueryFullUrl = this.solrQueryUrl + "&rows=0&start=0";
  this.solrQueryFullUrl += "&facet=true&facet.mincount=1";
  
  for(var index = 0; index < this.fields.length; index++)
  {
    this.solrQueryFullUrl += "&facet.field=" + this.fields[index];  
  }
  
  this.solrQueryFullUrl += "&wt=json&json.wrf=?&jsoncallback=?";
}

CloudWidget.prototype.getValues = function ()
{
  this.doRequest();
}

CloudWidget.prototype.doRequest = function (handle)
{
  var me = this;
  jQuery.getJSON(this.solrQueryFullUrl, function(data) {me.handleResult(data);});
}

CloudWidget.prototype.handleResult = function (data)
{
   var list = new Array();
   var maxCount = new Array();
   var label;
   var count;
   var elements = new Array();
   
    for (var j = 0; j < this.fields.length; j++) 
    {
      var field = this.fields[j];
      list[field] = new Array();
      
      maxCount[field] = 0;
      var values = data.facet_counts.facet_fields[field];
      
      var length = values.length;
      
      if (this.maxCountFields && this.maxCountFields[field] > 0 && 2*this.maxCountFields[field] < length)
      {
        length =  2*this.maxCountFields[field];
      }
          
      for (var i = 0; i < length; i = i + 2) 
      {
        label = values[i];
        count = values[i+1];
        list.push({text:label, count:count, field:field});
        
        if (count > maxCount[field])
          maxCount[field] = count;
      }
    }
    
    var element = $("#"+ this.elementId);
    var html = "";
    var invCount = new Array();
    var fontSize;
    
    var htmlField = "";
    var color;
    var colors = new Array();
    colors["appellation"] = "#5F0000";
    colors["year"] = "#5F5F5F";
    colors["label"] = "#00007F";
    
    for(var field in maxCount)
    {
      invCount[field] = 1.0 /  maxCount[field];
    }
    
    list.sort(randOrd);
    
    var itemList = null;
    
    for(var item = 0; item < list.length; item++)
    {
      itemList = list[item];
      
      color = colors[itemList.field];
      fontSize = 10 + (11 * itemList.count * invCount[itemList.field]) | 0;
      
      var tagUrlAddon = "";
      if (this.tagUrlAddon)
        tagUrlAddon = this.tagUrlAddon;
        
      htmlField = '<a href="' + this.tagUrl + '/' + this.linkFields[itemList.field] + '/' + itemList.text + tagUrlAddon + '" rel="nofollow" style="font-size:' + fontSize + 'px;color:' + color + '">' + itemList.text + '</a> ';
      element.append(htmlField);
    }
    
    //element.html(html);
}

function randOrd()
{
  return Math.random()-0.5; 
} 
