(function ($) {

  AjaxSolr.ResultWidget = AjaxSolr.AbstractWidget.extend({
    beforeRequest: function () {
      $(this.target).empty()
      //$(this.target).html($('<img/>').attr('src', '/[#INSTANCE]/images/ajax-loader.gif'));
      // $(this.target).next('ul').hide()
    },
    facetLinks: function (facet_field, facet_values) {
      var links = [];
      if (facet_values) {
        for (var i = 0, l = facet_values.length; i < l; i++) {
          links.push(AjaxSolr.theme('facet_link', facet_values[i], this.facetHandler(facet_field, facet_values[i])));
        }
      }
      return links;
    },
    facetHandler: function (facet_field, facet_value) {
      var self = this;
      return function () {
        self.manager.store.remove('fq');
        self.manager.store.addByValue('fq', facet_field + ':"' + facet_value + '"');
        self.manager.doRequest(0);
        return false;
      };
    },
    afterRequest: function () {
      $(this.target).empty();

      var aAllDocs = [],
      maxLength = this.manager.response.response.docs.length;

      if(Manager.custom.getFilter) {
        /*********************************************************************************************/
        // Requete pour  seul produit
        // Ne génére aucun affichage
        // Sert à récupérer la liste des champ du flux solr qui commencent par critere
        // Permettra d'instancier les tagcloud dans le cas suivant
        /*********************************************************************************************/

        criteres = [];

        var doc = this.manager.response.response.docs[0];
        for (prop in doc){
          if(prop.indexOf('critere') != -1) {
            if($("#catName").val()=="Soldes hiver"){
				if (prop!="critere_edition") {
					criteres.push(prop);
				}
			} else {
				criteres.push(prop);	
			}
		 }
        }
		criteres.sort(function (a, b) {
			return a.indexOf('remise') > b.indexOf('remise') ? -1 : 1;
			/*********************************************************************************************/
			// On trie par nombre de résultat décroissant
			/*********************************************************************************************/
	
		});

        if(this.target != "#docs") {
          $(this.target).data('critere_list',['prix_tranche','critere_marque','critere_couleur','categories','critere_forme','critere_edition']);

        } else {
          $(this.target).data('critere_list',criteres);
        }

        Manager.store.addByValue('facet', true);
        Manager.store.addByValue('facet.field', $(this.target).data('critere_list'));
        Manager.store.addByValue('facet.mincount', 1);
        Manager.store.addByValue('facet.limit', 9999);
        Manager.store.addByValue('json.nl', 'map');

        Manager.custom.getFilter = false;
        Manager.doRequest();

      } else if(Manager.custom.getFacet) {

        /*********************************************************************************************/
        // Requete pour  seul produit
        // Ne génére aucun affichage
        // Sert à récupérer pour chaque critere, la liste des facet (filtre) disponible et le nombre d'article associé
        // La variable w permet de n'executer qu'une seule fois les widget Tagcloud, qui ne doivent pas se régénérer en fonction des filtre en cours.
        /*********************************************************************************************/
        if ( !Manager.custom.tagCloudAdded ) {
        /*********************************************************************************************/
        // On instancie les widgets qu'une seule fois
        /*********************************************************************************************/

          $('.toggle_recherche').empty();
          for (var i = 0, w = 0 , l = $(this.target).data('critere_list').length ; i < l ; i++) {
            critereName = $(this.target).data('critere_list')[i]

            //console.log($(Manager.widgets.result.target).data('critere_list')[i]+" : "+Object.sizeOf( Manager.response.facet_counts.facet_fields[critereName] ))
            if( Object.sizeOf( Manager.response.facet_counts.facet_fields[critereName] ) > 1 ) {

              _CritereUl = $('<ul>').addClass('formulaire').attr('id','tags_'+critereName);
              _CritereUl.appendTo('.toggle_recherche');
              Manager.addWidget(new AjaxSolr.TagcloudWidget({
                id: 'Tags_'+critereName,
                target: '#tags_'+critereName,
                field: critereName
              }));
              w++;
            }
          }
          Manager.custom.tagCloudNumber = w;
        }
        /*********************************************************************************************/
        // Instancie les Widgets TagCloud
        // Voir fichier ajaxsolr.TagCloudWidget.js
        /*********************************************************************************************/
        $('.toggle_recherche .formulaire').addClass('first');

        if( jQuery.browser.msie ) {
			if( this.target != '#docs' ){
				Manager.store.get('rows').val(20);
			} else {
				Manager.store.get('rows').val(Manager.custom.rows);
			}
          Manager.custom.tagCloudAdded = true;
        }
        if ( !Manager.custom.tagCloudAdded ) {
          /*********************************************************************************************/
          // On ne relance un do request que si les filtre ne sont pas encore généré
          // Le véritable chargement des produit sera effectué grace à l'action de l'internaute
          // //ou si un parametre est présent dans l'URL (_paramsToLoad cf custom_ad_solr.js)
          /*********************************************************************************************/
          Manager.custom.tagCloudAdded = true;
          Manager.store.get('sort').val(Manager.custom.sort);
          Manager.store.get('rows').val(20);
          Manager.doRequest();
          return;
        }
        if( _paramsToLoad.length > 0 ){

          /*********************************************************************************************/
          // Si un parametre est présent dans l'URL (_paramsToLoad cf custom_ad_solr.js)
          // On les ajoute et on envoie le DoRequest
          /*********************************************************************************************/
          for( i = 0, l = _paramsToLoad.length; i < l ;i++ ){
            Manager.store.addByValue('fq',_paramsToLoad[i]);
          }
          _paramsToLoad = [];
          Manager.doRequest();
          return;
        }
        if( this.target != '#docs' ){
          Manager.doRequest();
          return;
        }

      } else {

        if((this.target == "#resultat_recherche_avancee")&&(Manager.store.get('sort').val()=="purchased desc, prix asc")){
            var is_accroche = Manager.store.params.fq ? (Manager.store.params.fq.length === 1 && (Manager.store.params.fq[0].value || null) === null) : true;
            $(this.target).prepend($('<li>').html(is_accroche ? 'Avant de s&eacute;lectionner un crit&egrave;re de recherche, d&eacute;couvrez nos tendances culinaires !' : '').addClass('accroche_recherche'))
        }

        /*********************************************************************************************/
        // Requete pour nos produit
        // Génére l'affichage des résultats
        // Les widgets TagCloud s'exécuteront 1x chacun uniquement après ce code
        /*********************************************************************************************/
        jQuery(this.target).next('ul').hide();
        Manager.store.get('rows').val(Manager.custom.rows);
        Manager.store.get('sort').val(Manager.custom.sort);

        if( _paramsToCheck.length > 0 ){

          /*********************************************************************************************/
          // Si un parametre est présent dans l'URL (_paramsToLoad cf custom_ad_solr.js)
          // On s'assure que les filtre correspondant soit coché/selectionné
          /*********************************************************************************************/
          for( i = 0, l = _paramsToCheck.length; i < l ;i++ ){
            _facetTerm = _paramsToCheck[i].split(':')[0];
            _facetValue = _paramsToCheck[i].split(':')[1];

            if( jQuery('input[value='+_facetValue+']','#tags_'+_facetTerm).size() > 0 ){
              jQuery('input[value='+_facetValue+']','#tags_'+_facetTerm).attr('checked',true);
            }
            if( jQuery('option[value='+_facetValue+']','#tags_'+_facetTerm).size() > 0 ){
              jQuery('option[value='+_facetValue+']','#tags_'+_facetTerm).attr('selected',true);
            }
          }
          _paramsToCheck = [];
        }

        if(Manager.response.response.numFound > 1) {
          $('.fil_ariane .fr').html(Manager.response.response.numFound+' articles');
        } else {
          $('.fil_ariane .fr').html(Manager.response.response.numFound+' article');
        }

        if( this.manager.response.response.docs.length == 0 ) {
          $(this.target).append(AjaxSolr.theme('no_item'));
          return
        }

        for (var i = 0, j = 0, l = this.manager.response.response.docs.length; i < l && j < maxLength; i++) {
          var doc = this.manager.response.response.docs[i];

          if ($.inArray(doc.reference, aAllDocs) == -1) {
            aAllDocs.push(doc.reference);
            j++;
            $(this.target).append(AjaxSolr.theme('result', doc));
          }
        }
      }
    },
    init: function () {
    }
  });

})(jQuery);
