/**
* Scans for editable_mce elements and attach a tiny_mce editor to them
*/
var IpexlLib = {
  contextPath : null,

  print : function() {
      var currentUrl = window.location.href;
      currentUrl = currentUrl.indexOf("?") < 0 ? currentUrl + "?" : currentUrl + "&";
      currentUrl = currentUrl + "printMode=true";
      window.location.href = currentUrl.replace(".do", ".pdf");
  },

  printArea : function(section, title) {
    $.ajax({
          url : IpexlLib.contextPath +  '/print/bufferize.do',
          data : {'title':title, 'content':$(section).html()},
          dataType: "json",
          success: function(result) {
             window.location.href = IpexlLib.contextPath +  '/print/print.pdf';
          },
          type: 'POST'
    });
  },

  flashError: function(elem,remove){
      if(!remove)remove = false;
      if(remove){
          elem.css('color',elem.css('o-color'));
      }else{
          elem.css('o-color',elem.css('color'));
          elem.css('color','#FF0000');
          setTimeout(function(){IpexlLib.flashError(elem,true)},300);
      }
  },
  emptyContentField : function(field,initValue){
      if ($(field).val() == initValue) {
          $(field).val('');
      } else {
          $(field).select();
      }
  },
  resetContentField : function(field,initValue){
     var currentValue = ($(field).val());
     if (currentValue.replace(' ','').length == 0) {
       $(field).val(initValue);
     }
  },
  initContentField : function(inputTarget, initIfEqualTo) {
    if ($('#'+inputTarget).val() == initIfEqualTo) {
      $('#'+inputTarget).val('');
    }
  },

  restoreContentField : function(inputTarget, defaultValueWhenNotEmpty) {
     var currentValue = ($('#'+inputTarget).val());
     if (currentValue.replace(' ','').length == 0) {
       $('#'+inputTarget).val(defaultValueWhenNotEmpty);
     }
  },

  initContextPath : function(contextPath) {
      IpexlLib.contextPath = contextPath;
  },

  overrideBackgroundAttachment : function() {
      if ($.browser.msie) {
          setTimeout(function() {
              $("body").css('background-attachment', 'scroll');
             }, 1000);
      }
  },

  initComponents : function() {
      // init the fact no form is currently being submitted
      FormHelpers.isSubmittingForm = false;

      // init the language selector
      IpexlLib.initLangSelector();

      // More languages - workaround for IE6 that doesn't accept the hover CSS-based
      $('.moreLang').hover(
         function() {
            $('#languages').slideToggle(300);
         },
         function() {
            $('#languages').slideToggle(300);
         }
      );

      // init tabs if any
      jQuery('#tabs').tabs();

      //hover states on the static widgets
      jQuery('#dialog_link, ul#icons li').hover(
            function() { $(this).addClass('ui-state-hover'); },
            function() { $(this).removeClass('ui-state-hover'); }
      );

      // init the email form
      // $("#sendByMailOverlay").overlay({effect: 'default', speed:'slow', closeOnClick:false, top:50, left:'center'});
      $("#sendByMailOverlay").click(function(){
          var divToShow = $(this).attr("rel");
          $(divToShow).show();

      });

      $(".close").click(function(){
          var divToHide = $(this).attr("rel");
          $(divToHide).hide();
      });

      $('#emailForm').submit(function() {
          return false;
      });

      $('#emailForm').validate({
          errorLabelContainer: "#errMsgHidden",
          highlight: function(element, errorClass) {
              $(element).css("oborder",$(element).css("border"));
              $(element).css("border","1px solid #FF0000");
          },
          unhighlight: function(element, errorClass) {
              $(element).css("border",$(element).css("oborder"));
              $(element).css("oborder",'');
          },

          submitHandler : function(form) {
              EmailLib.sendEmail('#emailForm', '#closeButton');
         }
      });

      // init the slider
      if(jQuery("#slider li").length > 1){
          jQuery("#slider").easySlider({
              auto: true,
              continuous: true,
              numeric: true,
              pause : 8000
          });
      }

      // init the success and error messages delay
      jQuery('.successMessage').delay(10000).slideToggle(500);
      jQuery('.errorMessage').delay(10000).slideToggle(500);

  },

  initStoredSearch : function(){
    if(document.doingstoredsearch == null){
        document.doingstoredsearch = true;
        var ssc = jQuery("#storedSearchContainer");

        //if we have at least one Stored Search (see storedsearch.vm)
        if($(ssc).length){
            //JQuery UI sortable elements (Stored Search)
            $(ssc).sortable({
                items: '.sortable',
                handle:'.widget_header',
                appendTo : 'body',
                start: function(e,ui){
                    //for each stored search
                    $(ssc).find(".sortable").each(function(){
                        var cnt =$(this).find('.widget_content');
                        if($(cnt).is(':visible')){
                            $(cnt).attr('wv','true');
                            $(cnt).hide();
                        }else{
                            $(cnt).attr('wv','false');
                        }
                    });
                    jQuery(ssc).sortable('refreshPositions');
                },
                stop: function(e,ui){
                    $(ssc).find(".sortable").each(function(){
                        var cnt =$(this).find('.widget_content');
                        if($(cnt).attr('wv')=='true'){
                            $(cnt).show();
                        }
                        $(cnt).attr('wv','');
                    });
                    $('html,body').animate({
                        scrollTop: $(ui.item).offset().top
                    }, 0);
                    var citems = '';
                    $(ui.item).parent().find(".sortable").each(function(){
                        citems += $(this).attr('id').substring(11)+',';
                    });
                    console.log('changing order to :'+citems);
                    IpexlLib.myIpex.changeOrder(citems);
                },
                opacity: 0.6,
                placeholder: 'dragging'
            }).find(".sortable").each(function(){
                //for each stored search
                var cwidg = $(this);
                var widgetId = $(this).attr('id').substring(11);
                $(this).find(".widget_actions .edit").unbind('click').click(function(){
                    $(cwidg).find(".update_frequency_buttons .selected").toggleClass('selected',false);
                    $(cwidg).find(".update_frequency_buttons .orig-selected").toggleClass('selected',true);
                    $(cwidg).find(".edit_box").animate({
                        'height': "toggle"
                    }, 500);
                });
                $(this).find(".widget_actions .collapse_close").unbind('click').click(function(){
                    if(IpexlLib.myIpex.changeVisibility(widgetId,false)){
                        $(cwidg).find(".widget_actions .edit").toggle();
                        $(cwidg).find(".widget_content").animate({
                            'height': "toggle"
                        }, 500);
                        $(this).hide();
                        $(cwidg).find(".collapse_open").show();
                    }
                });
                $(this).find(".widget_actions .collapse_open").unbind('click').click(function(){
                    if(IpexlLib.myIpex.changeVisibility(widgetId,true)){
                        $(cwidg).find(".widget_actions .edit").toggle();
                        $(cwidg).find(".widget_content").animate({
                            'height': "toggle"
                        }, 500);
                        $(this).hide();
                        $(cwidg).find(".collapse_close").show();
                    }
                });
                $(this).find(".update_frequency_buttons li").unbind('click').click(function(){
                    $(cwidg).find(".update_frequency_buttons .selected").toggleClass('selected',false);
                    $(this).toggleClass('selected',true);
                });
                $(this).find(".edit_box .narrowdate_clear").unbind('click').click(function(){
                    $(cwidg).find(".update_frequency_buttons .selected").toggleClass('selected',false);
                    $(cwidg).find(".update_frequency_buttons .orig-selected").toggleClass('selected',true);
                    $(cwidg).find(".edit_box").animate({
                        'height': "toggle"
                    }, 500);
                });
                $(this).find(".edit_box .narrowdate_action").unbind('click').click(function(){
                    if(!IpexlLib.myIpex.saving){
                        IpexlLib.myIpex.saving = true;
                        $(cwidg).find(".update_frequency_buttons .orig-selected").toggleClass('orig-selected',false);
                        $(cwidg).find(".update_frequency_buttons .selected").toggleClass('orig-selected',true);
                        if(!IpexlLib.myIpex.changePeriodicity(widgetId,$(cwidg).find(".update_frequency_buttons .selected input").val())){
                            $(cwidg).find(".update_frequency_buttons .orig-selected").toggleClass('selected',true);
                        }
                        IpexlLib.myIpex.saving = false;
                    }
                });
                $(this).find(".widget_actions .delete").click(function(){
                    if(!IpexlLib.myIpex.saving){
                        IpexlLib.myIpex.saving = true;
                        IpexlLib.myIpex.remove(widgetId);
                        IpexlLib.myIpex.saving = false;
                    }
                });
                eval('loadContent'+widgetId+'(1)');
            }).find(".widget_header").css({
                cursor:'move'
            });
        }
    }
  },
  messageCache:{
      Set : function(key,value) {
          //console.log("[MC] Setting ["+key+":"+value+"]");
          this[key] = value;
      },
      Get : function(key) {
          //console.log("[MC] Getting ["+key+"]->"+this[key]);
          return this[key];
      },
      Contains : function(key){
          //console.log("[MC] Testing ["+key+"]->"+this[key]);
          return this[key]!=undefined;
      }
  },
  getMessage:function(key){
      if (IpexlLib.messageCache.Contains(key)) {
          return IpexlLib.messageCache.Get(key);
      }else {
          //console.log("Getting remote message ["+key+"]");
          var resultStr=jQuery.ajax({
              url: '/message.json?k='+key,
              async: false
          }).responseText;
          resultStr = jQuery.evalJSON(resultStr).message;
          if (resultStr!=null && resultStr.substr(0, 2) != "?!") {
            IpexlLib.messageCache.Set(key, resultStr);
          }/*else{
          console.log("Not caching undefined message");
      }*/
          return resultStr;
      }
  },
  initDatePickers : function(){
    $(".datePicker").datepicker({
      showOn: 'both',
      buttonImage: IpexlLib.contextPath+'/images/calendar.gif',
      buttonImageOnly: true,
      dateFormat: __DATE_FORMAT?__DATE_FORMAT:'dd/mm/yy'
    });
  },
  initEditors : function(){
    $(".editable_mce").editable(function(value, settings){
      return value;
    }, {
      type      : 'mce',
      submit    : 'OK',
      indicator : "Saving...",
      width     : '500px',
      height    : '100px',
      cancel    : 'Cancel',
      event     : 'tclick'
    });
    $(".editable_masked").editable(function(value, settings){
      return value;
    }, {
      indicator : "<img src='img/indicator.gif'>",
      type      : "masked",
      mask      : "99/99/9999",
      submit    : 'OK',
      event     : 'tclick',
      cancel    : 'Cancel'
    });
    $(".editable_date").editable(function(value, settings){
      return value;
    }, {
      type    : 'datepicker',
      event   : 'tclick',
      submit  : 'OK',
      cancel  : 'Cancel',
      width   : '100px'
    });
    $(".editable_select").editable(function(value, settings){
      return value;
    }, {
      indicator : '<img src="img/indicator.gif">',
      data      : "{'Lorem ipsum':'Lorem ipsum','bla':'bla','Dolor sit':'Dolor sit'}",
      event     : 'tclick',
      type      : "select",
      submit    : "OK",
      cancel    : 'Cancel'
    });
    $(".editable_select_json").editable(function(value, settings){
      return value;
    },{
      indicator : '<img src="img/indicator.gif">',
      //loadurl : "http://www.appelsiini.net/projects/jeditable/php/json.php",
      type      : "select",
      event     : 'tclick',
      submit    : "OK",
      cancel    : 'Cancel'
    });
    /**
    * scans for edit trigger and attach event to them. The edit trigger must have their id starting with the id of the element they trigger the edition for.
    */
    $('.edit_trg').click(function(){
      var id = $(this).attr('id');
      id = id.substring(0,id.indexOf('_'));
      $("#"+id).triggerHandler('tclick');
    });
  },
  initLangSelector : function(){
      $("a.selectLang").unbind('click').click(function() {
          var langue = $(this).attr('lang');
          var cadr = document.location.href;
          if(cadr.indexOf("#")==cadr.length-1){
              cadr = cadr.substring(0,cadr.length-1);
          }
          if(cadr.indexOf("appLng=")>-1){
              cadr = cadr.replace(/(appLng=.*)&?/,"appLng=" + langue);
          }else{
              if(cadr.indexOf("?")>-1){
                  if(cadr.indexOf("#") > -1){
                      // now playing with hashes
                      var tadr = cadr.substring(0,cadr.indexOf("#"));
                      tadr += "&appLng=" + langue;
                      tadr += cadr.substring(cadr.indexOf("#"));
                      cadr = tadr;
                  }else{
                      cadr += "&appLng=" + langue;
                  }
              }else{
                  if(cadr.indexOf("#") > -1){
                      // now playing with hashes
                      var tadr = cadr.substring(0,cadr.indexOf("#"));
                      tadr += "?appLng=" + langue;
                      tadr += cadr.substring(cadr.indexOf("#"));
                      cadr = tadr;
                  }else{
                      cadr += "?appLng=" + langue;
                  }
              }
          }
          document.location.href = cadr;
     });
  },
  expandById : function(id) {
    if ($.browser.msie) {
       if ($('#'+id).is(":visible")) {
           $('#'+id).hide();
       } else {
         $('#'+id).show();
       }
    } else {
       $('#'+id).toggle("blind", {}, 750);
    }
  }

  /*,
  showDocument:function(type, year, number, extension, format, lang) {
      var url ="/popups/openDocument.do?type=" + type + "&year=" + year + "&number=" + number + "&ext=" + ext + "&format=" + format + "&lang=" + lang;
      window.open(url, "Document", "top=0,left=0,screenX=0,screenY=0,location=yes,resizable=yes,scrollbars=yes,menubar=no,toolbar=no,width=1012");
  }*/
};
IpexlLib.myIpex = {
      inLoading : false,
      saving : false,
      add2MyIpex:function (baseUrl,parameters,title){
          // console.log("adding ["+parameters+"]["+title+"]");
          jQuery.post(
              "/myipex/storedsearch.json",
              {
                  iaction:"3",
                  title: ''+title,
                  parameters: ''+parameters,
                  id:''
              },
              function (data,status){
                  //console.log("status:"+status);
                  if(data.result==-3){
                      alert(IpexlLib.getMessage('myipex-ajax-error')+data.result);
                  }
              });
      },
      changePeriodicity:function (theId,level){
          jQuery.post(
              "/myipex/storedsearch.json",
              {
                  iaction:"6",
                  id: theId,
                  level:level
              },
              function (data,status){
                  if(data.result==-6){
                      alert(IpexlLib.getMessage('myipex-ajax-error')+data.result);
                      return false;
                  }
              },"json"
              );
          return true;
      },
      changeVisibility:function (theId,visibility){
          jQuery.post(
              "/myipex/storedsearch.json",
              {
                  iaction:visibility?"0":"1",
                  id: theId
              },
              function (data,status){
                  if(data.result==-6){
                      alert(IpexlLib.getMessage('myipex-ajax-error')+data.result);
                      return false;
                  }
              },"json"
              );
          return true;
      },
      remove : function (theId){
          jQuery.post(
              "/myipex/storedsearch.json",
              {
                  iaction:"4",
                  id: theId
              },
              function (data,status){
                  if(data.result==-6){
                      alert(IpexlLib.getMessage('myipex-ajax-error')+data.result);
                      return false;
                  }else{
                      window.location.href=window.location.href;
                  }
              },"json"
              );
          return true;
      },
      changeOrder : function(theOrder){
          jQuery.post(
              "/myipex/storedsearch.json.json",
              {
                  iaction:"7",
                  sorder: theOrder
              },
              function (data,status){
                  if(data.result==-6){
                      alert(IpexlLib.getMessage('myipex-ajax-error')+data.result);
                      return false;
                  }
              },"json"
              );
          return true;
      }
  };


var WidgetLib = {
  removeConfirmationMessage : null,
  noWidgetDefinedMessage : null,
  noSearchCriteria : null,
  searchAdded : null,
  enterStoredSearchName : null,

  registerStoredSearchWidget : function(searchCriteria, storedSearchType, formId) {
    if (searchCriteria == null) {
      alert(WidgetLib.noSearchCriteria);
    } else {
            $('#searchCriteria').val(searchCriteria);
          $('#type').val(storedSearchType);
          var values = $('#' + formId).serialize();
          $.ajax({
              url : IpexlLib.contextPath +  '/widgets/addStoredSearchWidget.do',
              data : values,
              dataType: "json",
              success: function(result) {
                 $('#closeStoredSearchFormButton').trigger('click');
                 if (result.resultCode == 'OK') {
                   alert(WidgetLib.searchAdded);
                 } else {
                   alert(result.message);
                 }
              }
          });
    }
   },

  removeWidget : function(div, widgetId) {
    if (confirm(WidgetLib.removeConfirmationMessage)) {
          $.ajax({
                url : IpexlLib.contextPath +  '/widgets/remove.do',
                data : {'widgetId':widgetId},
                dataType: "json",
                success: function(result) {
                   if (result.resultCode == 'OK') {
                     $('#'+div).remove();
                     var remainingWidgets = $('#widgetContainer > div').size();
                     // if the widget container is empty than add an additional message
                     if (remainingWidgets == 0) {
                       var element = '<div class="widgetBox">' + WidgetLib.noWidgetDefinedMessage + '</div>';
                       $('#widgetContainer').append(element);
                     }
                   } else {
                     alert(result.message);
                   }
                }
              });
           }
      },

   saveChanges : function(widgetId) {
        var values = $('#form_'+widgetId).serialize();
        $.ajax({
              url : IpexlLib.contextPath +  '/widgets/saveStoredSearchWidget.do',
              data : values,
              dataType: "json",
              type: 'POST',
              success: function(result) {
                if (result.resultCode == 'OK') {
                   $('#widgetBisHeaderTxt_'+widgetId).html(result.data);
                } else {
                   alert(result.message);
                }
              }
        });
   },



   displayQuery : function(query, div, inputTarget) {
      if (query == null) {
          alert(WidgetLib.noSearchCriteria);
      } else {
           IpexlLib.expandById(div);
           $('#'+inputTarget).val(query);
      }
   },


   reverseCollapseState : function(widgetId, widgetPrefixDiv) {
     var widgetDiv = widgetPrefixDiv + widgetId;
     var resultContent = $('#' + widgetDiv + ' .result').first().html();
     var refreshContent = resultContent == null || resultContent.replace(' ','').length == 0;
     $.ajax({
           url : IpexlLib.contextPath +  '/widgets/reverseCollapseState.do',
           data : {'widgetId':widgetId, 'refreshResult':refreshContent},
           dataType: "json",
           success: function(result) {
             if (result.resultCode == 'OK') {
               // replace the old content by the new one
               if (result.data != null && result.data.storedSearchWidget == true && result.data.collapsed == true) {
                 var element = '<div class="result">' + result.data.content + '</div>';
                 $('#'+widgetDiv + ' .result').first().replaceWith(element);
               }
             }
           },
           type: 'POST'
     });

     IpexlLib.expandById(widgetDiv);
     $(".closeWhenOtherOpening").each(function() {
           var currentDivId = widgetPrefixDiv + $(this).attr('id');
           if (currentDivId != widgetDiv) {
             $('#' + currentDivId).hide();
           }
     });
   }
};


var EmailLib = {
  isSendingEmail : false,
  sendEmail : function(formId, closeLink) {
     // avoid a double click
    if (EmailLib.isSendingEmail) {
        return;
    }

    EmailLib.isSendingEmail = true;
    var values = $(formId).serialize();
    $.ajax({
              url : IpexlLib.contextPath +  '/email/emailToFriend.do',
              data : values,
              dataType: "json",
              success: function(result) {
                alert(result.message);
                if (result.resultCode == 'OK') {
                  $(formId).reset();
                  $(closeLink).click();
                }
                EmailLib.isSendingEmail = false;
              },
              type: 'POST'
             });
    }
};


var CalendarEventLib = {
  calendarEvents : null,

  // initialize the calendar event
  initCalendarEvents : function() {
  $.ajax({
      url : IpexlLib.contextPath +  '/calendar/getEventDates.do',
      dataType: "json",
      success: function(calendarEvents){
        CalendarEventLib.calendarEvents = calendarEvents;
        $(function() {
          $("#datepicker" ).datepicker({
              firstDay : 1,
             beforeShowDay:CalendarEventLib.highlightEvents,
             onSelect:function(dateText, datePicker) {
                 $('#datepicker').fadeOut(function(){
                     $("#datepicker").hide();
                     $('.datepickerBottom').hide();
                     $("#calendarLoading").show();

                     // format the date
                     var formatedDate = $.datepicker.formatDate("@",date);
                     window.location.href = IpexlLib.contextPath +  '/calendar.do?useDateSearch=true&lngFromDate=' + formatedDate;
                 });
                 var date = new Date(dateText);
                 // At this step and by default the date picker has been already closed. We have to show it again
                 // workaround avoiding a graphical bug
                 //$("#"+datePicker.id).show;
                 return false;
               }
          });
          $("#calendarLoading").fadeOut(function(){
              $("#calendarLoading").hide();
              $('#datepicker').show();
              $('.datepickerBottom').show();
          });
        });
      }
    });
   },

   // put in evidence the events in the calendar
   highlightEvents : function(date){
     if (CalendarEventLib.calendarEvents != null) {
       var dateAsKey = date.getFullYear() + '' + (date.getMonth() + 1);
       for (var i=0; i < CalendarEventLib.calendarEvents.dates.length; i++) {
           if (dateAsKey == CalendarEventLib.calendarEvents.dates[i]) {
              var events = CalendarEventLib.calendarEvents.events[i];
              var eventDefined = false;

              // build the tooltip that needs to be displayed for the event
              var eventToolTip = '';
              var eventCount = 0;
              for (var j = 0; j < events.length; j++) {
                var referenceDate = new Date(date);
                var startDate = CalendarEventLib.toDate(events[j].jsonstartDate);
                startDate.setHours(0, 0, 0, 0);
                var endDate = CalendarEventLib.toDate(events[j].jsonendDate);

                if (endDate.getHours() != 0 || (endDate.getHours() == 0 && endDate.getMinutes() != 0)) {
                  endDate.setDate(endDate.getDate() + 1);
                }

                endDate.setHours(0, 0, 0, 0);
                if (startDate <= date && date < endDate) {
                   eventDefined = true;
                   eventCount++;
                   if (eventCount == 1) {
                     eventToolTip = eventCount + '.' + events[j].title;
                   } else {
                     eventToolTip = eventToolTip + ' \n' + eventCount + '.' + events[j].title;
                   }
                }
              }

              if (eventDefined) {
                 return [true, '', eventToolTip];
              }
           }
       }
     }
     return [false];
   },

   toDate : function(jsonDate) {
     if (jsonDate == null) {
       return null;
     }

     var year = jsonDate.substring(0,4);
     var month = jsonDate.substring(5,7);
     var day = jsonDate.substring(8,10);
     var hour = jsonDate.substring(11,13);
     var minute = jsonDate.substring(14,16);

     return new Date(year, month-1, day, hour, minute, 0, 0);
   }/*, */
};

var SearchHelpers = {};
SearchHelpers = {
    latestQuery : null,
    currentUrl : null,
    currentTarget : null,
    currentForm : null,
    log:function(s){
      log.debug(s);
      return s;
    },
    search:function() {
        // test form validity
        $(SearchHelpers.currentForm).find('.datePicker').each(function(){
            try{
                $.datepicker.parseDate(__DATE_FORMAT,$(this).val());
            }catch(ex){
                return;
            }
        });
        var lastQuery = $(SearchHelpers.currentForm).serialize().replace(/\+/g,"%20");
        SearchHelpers.latestQuery = (lastQuery+'&autoLoad=true').replace(/\&?start\=[^&]*/g,'').replace(/\&?rows\=[^&]*/g,'');
        SearchHelpers.updateHistory(lastQuery);
        return false;
    },
    doAjaxSearch : function(query,callback){
        $.post(SearchHelpers.currentUrl, query+'&_r='+Math.floor(Math.random()*11),
                function(data){
                   $('#solr_result').html(data);
                   // add remove facet functionnality
                   $('div.currentfacets a').each(function(){
                       // re add selected facets when we come back from plugin history
                       var name = $(this).attr("name");
                       var value = $(this).attr("fq");
                       if($(SearchHelpers.currentForm).find(".facets__[value^="+name+"]").length == 0){
                           var sz = $(SearchHelpers.currentForm).find(".facets__").size();
                           $(SearchHelpers.currentForm).append('<input class="facets__ _temp" type="hidden" name="facets['+sz+']" value="'+value+'"/>');
                       }
                   }).unbind('click').click(function(){
                       var name = $(this).attr("name");
                       $(SearchHelpers.currentForm).find(".facets__[value^="+name+"]").remove();
                       $(SearchHelpers.currentForm).find(".facets__").each(function(index) {
                           $(this).attr("name","facets["+index+"]");
                       });
                       SearchHelpers.search();
                       return false;
                   });
                   // add facet title click functionality
                     $('.facet-list').find('a').unbind('click').click(function(){
                       var value = $(this).attr("fq").substring(4);
                       value = value.replace(/"/g,"").replace(/:/,"|");
                       var sz = $(SearchHelpers.currentForm).find(".facets__").size();
                       $(SearchHelpers.currentForm).append('<input class="facets__ _temp" type="hidden" name="facets['+sz+']" value="'+value+'"/>').find("#start").val('0');
                       SearchHelpers.search();
                       return false;
                     });
                     $('a.goto').unbind('click').click(function(){
                       $(SearchHelpers.currentForm).find('#start').val($(this).attr("rownum"));
                       $(this).attr('href','#');
                       SearchHelpers.search();
                       return false;
                     });
                     $('.facet-list').hide();
                     $("div.facet-title").unbind("click").click(function() {
                         if($(this).is('.remloaded')){
                             SearchHelpers.expandCollapseTree($(this));
                         }else{
                             $(this).toggleClass("facet-title-collapsed",false).toggleClass("facetLoading",true);
                             var valueList = [];
                             var treeHolder = $(this).next();
                             treeHolder.find('a').each(function(){
                                 valueList[valueList.length]=$(this).html();
                             });
                             $.ajax({
                                  url: IpexlLib.contextPath +  '/result/facettext.do',
                                  data: {
                                     type : $(this).attr('ftype'),
                                     valueList : valueList.join('|')
                                   },
                                  success: function(valuesArr){
                                       if(valuesArr == null){
                                           alert('An error occured while retreiving data. Please apologize us.');
                                           treeHolder.prev().toggleClass("facet-title-collapsed",true).toggleClass("facetLoading",false);
                                       }else{
                                           // replace the facet tree list datas with received one
                                           treeHolder.find('a').each(function(){
                                              $(this).html(valuesArr[$(this).html()]);
                                           });
                                           treeHolder.prev().addClass('remloaded');
                                           treeHolder.prev().toggleClass("facet-title-collapsed",true).toggleClass("facetLoading",false);
                                           SearchHelpers.expandCollapseTree(treeHolder.prev());
                                       }
                                  },
                                  error : function(){
                                        alert('An error occured while retreiving data. Please apologize us.');
                                        treeHolder.prev().toggleClass("facet-title-collapsed",true).toggleClass("facetLoading",false);
                                  },
                                  dataType: 'json'
                              });
                         }
                     });
                     // update statictics button if needed
                     var lastQ = $(SearchHelpers.currentForm).serialize().replace(/\+/g,"%20");
                     $('#_statRcvr').attr('href',SearchHelpers.currentUrl.replace(".do",".csv")+'?'+(lastQ?(lastQ+'&'):'')+'exportStats=true');
                     // show save buttons
                     $('#searchSavepanel').show();
                     // Remove the blocking panel
                     try{
                         callback();
                     }catch(exception){}
               }
           );
    },
    expandCollapseTree : function(elem){
        var current = $(elem).is(".facet-title-expanded");
        $("div.facet-title").toggleClass("facet-title-collapsed",true).toggleClass("facet-title-expanded",false);
        $("div.facet-list").hide();
        if(!current){
            var moreInfo = $(elem).next("div.facet-list");
            if (moreInfo == null || moreInfo.length == 0) {
                moreInfo = $(elem).parent().parent().find("tr.moreInfo:first");
            }
            moreInfo.show();
            $(elem).toggleClass("facet-title-expanded").toggleClass("facet-title-collapsed");
            treeview = moreInfo.find("ul.facet-treeview");
            if (treeview.length > 0 && !treeview.hasClass("treeview-deployed")) {
                treeview.treeview({
                    collapsed:true,
                    unique:true,
                    prerendered:false
                });
                treeview.addClass("treeview-deployed");
            }
        }
    },
    prepareAdvancedForm:function(targetId, formId,url){
        //$.history.init(SearchHelpers.historyCallBack);
        if(targetId){
            SearchHelpers.currentTarget = $('#'+targetId).first();
        }
        if(formId){
            SearchHelpers.currentForm = $('#'+formId).first();
        }
        if(url){
            SearchHelpers.currentUrl = url;
        }
        // disable direct submit
        $(SearchHelpers.currentForm).submit(function(){return false;});
        $(SearchHelpers.currentForm).keypress(function (e) {
            if ((e.which && e.which == 13) || (e.keyCode && e.keyCode == 13)) {
                $('a#search').click();
                return false;
            } else {
                return true;
            }
        });
        $('#documentNumber').numeric();
        $('a#searchClear').unbind("click").click(function(event){
            SearchHelpers.clearForm(SearchHelpers.currentForm);
            $('._temp').remove();
            $('#search_result').remove();
            event.preventDefault();
        });
        $('input#adoptedLegislation').click(function(){
            if( $(this).is(':checked') ){
                $('select#adoptedCode').removeAttr('disabled');
                $('select#adoptedYear').removeAttr('disabled');
                $('input#adoptedNumber').removeAttr('disabled');
            } else {
                $('select#adoptedCode').attr('disabled','true');
                $('select#adoptedYear').attr('disabled','true');
                $('input#adoptedNumber').attr('disabled','true');
            }
        }).first().each(function(){
            if( $(this).is(':checked') ){
                $('select#adoptedCode').removeAttr('disabled');
                $('select#adoptedYear').removeAttr('disabled');
                $('input#adoptedNumber').removeAttr('disabled');
            } else {
                $('select#adoptedCode').attr('disabled','true');
                $('select#adoptedYear').attr('disabled','true');
                $('input#adoptedNumber').attr('disabled','true');
            }
        });
        $('a#search').click(
            function(){
                jQuery('#start').val('0');
                SearchHelpers.search();
            }
        );
        $('a.more_options').unbind('click').click(function(event){
            $('a.more_options').toggle();
            $('a.less_options').toggle();
            $('div.togglable').toggle();
            event.preventDefault();
        });
        $('a.less_options').unbind('click').click(function(event){
            $('a.more_options').toggle();
            $('a.less_options').toggle();
            $('div.togglable').toggle();
            event.preventDefault();
        });
        $(window).bind('hashchange',SearchHelpers.historyCallBack);
        // do a fake call to force loading of previously entered search
        SearchHelpers.historyCallBack();
    },

    prepareNpDocForm:function(targetId, formId,url){
        if(targetId){
            SearchHelpers.currentTarget = $('#'+targetId).first();
        }
        if(formId){
            SearchHelpers.currentForm = $('#'+formId).first();
        }
        if(url){
            SearchHelpers.currentUrl = url;
        }
        $(SearchHelpers.currentForm).submit(function(){return false;});
        $(SearchHelpers.currentForm).keypress(function (e) {
            if ((e.which && e.which == 13) || (e.keyCode && e.keyCode == 13)) {
                $('a#searchButton').click();
                return false;
            } else {
                return true;
            }
        });

        $('a#searchButton').click(function() {
            jQuery('#start').val('0');
            SearchHelpers.search();
        });
        $(window).bind('hashchange',SearchHelpers.historyCallBack);
        // do a fake call to force loading of previously entered search
        SearchHelpers.historyCallBack();
    },


    prepareCalendarForm:function(targetId, formId,url){
        if(targetId){
            SearchHelpers.currentTarget = $('#'+targetId).first();
        }
        if(formId){
            SearchHelpers.currentForm = $('#'+formId).first();
        }
        if(url){
            SearchHelpers.currentUrl = url;
        }
        $(SearchHelpers.currentForm).submit(function(){return false;});
        $(SearchHelpers.currentForm).keypress(function (e) {
            if ((e.which && e.which == 13) || (e.keyCode && e.keyCode == 13)) {
                $('a#search').click();
                return false;
            } else {
                return true;
            }
        });

        $('a#searchClear').click(function(event){
            SearchHelpers.clearForm(SearchHelpers.currentForm);
            $('#search_result').remove();
            event.preventDefault();
        });

        $('a#search').click(function(event) {
            jQuery('#start').val('0');
            SearchHelpers.search();
            event.preventDefault();
        });

        $('a.more_options').unbind('click').click(function(event){
            $('a.more_options').toggle();
            $('a.less_options').toggle();
            $('div.togglable').toggle();
            event.preventDefault();
        });
        $('a.less_options').unbind('click').click(function(event){
            $('a.more_options').toggle();
            $('a.less_options').toggle();
            $('div.togglable').toggle();
            event.preventDefault();
        });
        $(window).bind('hashchange',SearchHelpers.historyCallBack);
        // do a fake call to force loading of previously entered search
        SearchHelpers.historyCallBack("force");
    },
    updateHistory : function(parameters){
        var encoded = $.base64Encode(parameters.replace("%5B","[").replace("%5D","]")).replace(/=/g,"_");
        $.bbq.pushState('_e='+encoded+'&_rnd='+Math.floor(Math.random()*1111111111111) ,2);
    },
    historyCallBack:function(force){
        var state = $.param.fragment();
        if(state != null && state != ''){
            // block UI
            $.blockUI({ css: {
                border: 'none',
                padding: '15px',
                backgroundColor: '#000',
                '-webkit-border-radius': '10px',
                '-moz-border-radius': '10px',
                opacity: .5,
                color: '#fff'
            },
            message: 'Please wait...'
            });
            SearchHelpers.clearForm(SearchHelpers.currentForm);
            var toDecode = $.bbq.getState()['_e'].replace(/_/g,"=");
            var decoded = $.base64Decode(toDecode);
            SearchHelpers.currentForm.deserialize(decoded);
            SearchHelpers.doAjaxSearch(decoded,function(){
                $.unblockUI();
            });
        }else if(force){
            SearchHelpers.search();
        }
    },
    clearForm : function(elem) {
        $(':input',elem).each(function() {
            var type = this.type, tag = this.tagName.toLowerCase();
            if (type == 'text' || type == 'password' || tag == 'textarea' ){
                this.value = '';
            } else if (type == 'checkbox' || type == 'radio'){
                this.checked = false;
            } else if (tag == 'select'){
                this.selectedIndex = 0;
            }
        });
        $(':input.facets__ ',elem).remove();
    }
};


var DocumentHelpers = {};
DocumentHelpers.init = function(){
    $(".download_now").tooltip({relative:true, effect: 'slide', slideOffset: 0, slideInSpeed:260, slideOutSpeed:260, position: 'bottom left'});
    // hide all coutry that have no institution with scrutiny started
    $('ul.CountriesList').each(function() {
        // 1. hide the institutions having a scrutiny not started
        $(this).find('li.countryInstitutions:not(:has(>a))').hide().addClass('scr_togglable');
        // modified to enable created but not started scrutiny
        // 2. If all the flags are hidden : hide the parent
        $(this).not(':has(li.countryInstitutions:not(.scr_togglable))').hide().addClass('scr_togglable');
        // 3. hide all countries lists having not at least one institution
        $(this).not(':has(li.countryInstitutions)').hide().addClass('scr_togglable');
    });

    // add on click to the expandAll and collapseAll buttons
    $('.expandAll').click(function(){
        $(this).closest('.infoBox').find('.scr_togglable').each(function(){
            // --> attention : apparement jquery ne gère pas bien els LI dans la fonction toggle
            // --> doit cacher explicitement les éléments avec style list-item
            if($(this).css('display')=='list-item'){
                $(this).css('display','none');
            }else{
                $(this).toggle();
            }
        });
        $(this).parent().children('.expandAll').toggle();
        return false;
    });
};

var FormHelpers = {
    isSubmittingForm : false
};


var ForumHelpers = {
    clickMe : function (elem){
        $(elem).closest(".MultiFile-label").find("a").click();
    },
    doChoose : function(baseUrl){
        document.location.href = baseUrl+$("#forumCategChooser").val();
    },
    prepareHandlePagination: function(){
        $('a.goto').unbind('click').click(function(){
            var url = document.location.href;
            var s = $(this).attr("rownum");
            $(this).attr('href','#');
            if(url.indexOf("_s")>0){
                document.location.href = url.replace(/_s=[0-9]*/i,'_s='+s);
            }else if(url.indexOf("?")>0){
                document.location.href = url+'&_s='+s;
            }else{
                document.location.href = url+'?_s='+s;
            }
            return false;
         });
    }
};

var MultiSearchHelpers = {
        currentForm : null,
        init : function(){
        // add remove facet functionnality
        $('div.currentfacets a').each(function(){
            // re add selected facets when we come back from plugin history
            var name = $(this).attr("name");
            var value = $(this).attr("fq");
            if($(MultiSearchHelpers.currentForm).find(".facets__[value^="+name+"]").length == 0){
                var sz = $(MultiSearchHelpers.currentForm).find(".facets__").size();
                $(MultiSearchHelpers.currentForm).append('<input class="facets__ _temp" type="hidden" name="facets['+sz+']" value="'+value+'"/>');
            }
        }).unbind('click').click(function(){
            var name = $(this).attr("name");
            $(MultiSearchHelpers.currentForm).find(".facets__[value^="+name+"]").remove();
            $(MultiSearchHelpers.currentForm).find(".facets__").each(function(index) {
                $(this).attr("name","facets["+index+"]");
            });
            MultiSearchHelpers.currentForm.submit();
            return false;
        });
        // add facet title click functionality
          $('.facet-list').find('a').unbind('click').click(function(){
            var value = $(this).attr("fq").substring(4);
            value = value.replace(/"/g,"").replace(/:/,"|");
            var sz = $(MultiSearchHelpers.currentForm).find(".facets__").size();
            $(MultiSearchHelpers.currentForm).append('<input class="facets__ _temp" type="hidden" name="facets['+sz+']" value="'+value+'"/>').find("#start").val('0');
            MultiSearchHelpers.currentForm.submit();
            return false;
          });
          $('a.goto').unbind('click').click(function(){
            $(MultiSearchHelpers.currentForm).find('#start').val($(this).attr("rownum"));
            $(this).attr('href','#');
            MultiSearchHelpers.currentForm.submit();
            return false;
          });
          $('.facet-list').hide();
          $("div.facet-title").unbind("click").click(function() {
              if($(this).is('.remloaded')){
                  MultiSearchHelpers.expandCollapseTree($(this));
              }else{
                  $(this).toggleClass("facet-title-collapsed",false).toggleClass("facetLoading",true);
                  var valueList = [];
                  var treeHolder = $(this).next();
                  treeHolder.find('a').each(function(){
                      valueList[valueList.length]=$(this).html();
                  });
                  $.ajax({
                       url: IpexlLib.contextPath +  '/result/facettext.do',
                       data: {
                          type : $(this).attr('ftype'),
                          valueList : valueList.join('|')
                        },
                       success: function(valuesArr){
                            if(valuesArr == null){
                                alert('An error occured while retreiving data. Please apologize us.');
                                treeHolder.prev().toggleClass("facet-title-collapsed",true).toggleClass("facetLoading",false);
                            }else{
                                // replace the facet tree list datas with received one
                                treeHolder.find('a').each(function(){
                                   $(this).html(valuesArr[$(this).html()]);
                                });
                                treeHolder.prev().addClass('remloaded');
                                treeHolder.prev().toggleClass("facet-title-collapsed",true).toggleClass("facetLoading",false);
                                MultiSearchHelpers.expandCollapseTree(treeHolder.prev());
                            }
                       },
                       error : function(){
                             alert('An error occured while retreiving data. Please apologize us.');
                             treeHolder.prev().toggleClass("facet-title-collapsed",true).toggleClass("facetLoading",false);
                       },
                       dataType: 'json'
                   });
              }
          });
    },
    expandCollapseTree : function(elem){
        var current = $(elem).is(".facet-title-expanded");
        $("div.facet-title").toggleClass("facet-title-collapsed",true).toggleClass("facet-title-expanded",false);
        $("div.facet-list").hide();
        if(!current){
            var moreInfo = $(elem).next("div.facet-list");
            if (moreInfo == null || moreInfo.length == 0) {
                moreInfo = $(elem).parent().parent().find("tr.moreInfo:first");
            }
            moreInfo.show();
            $(elem).toggleClass("facet-title-expanded").toggleClass("facet-title-collapsed");
            treeview = moreInfo.find("ul.facet-treeview");
            if (treeview.length > 0 && !treeview.hasClass("treeview-deployed")) {
                treeview.treeview({
                    collapsed:true,
                    unique:true,
                    prerendered:false
                });
                treeview.addClass("treeview-deployed");
            }
        }
    }
};
