;(function($){

  OfferSearchUIConfig = {
    widgetCreators: {
      sliderRangePriceCreate: false,
      sliderRangeAreaCreate: false,
      sliderRangeLotAreaCreate: false,
      sliderRangeRoomcntCreate: false,
      togglersCreate: false
    },
    widgetUpdaters: {
      sliderRangePriceCreate: 'sliderRangePriceUpdate',
      sliderRangeAreaCreate: 'sliderRangeAreaUpdate',
      sliderRangeLotAreaCreate: 'sliderRangeLotAreaUpdate',
      sliderRangeRoomcntCreate: 'sliderRangeRoomcntUpdate',
      togglersCreate: 'togglersUpdate'
    }
  }

  OfferSearchUIData = {
    filters: {
    },
    fstate: {
      operacja: {},
      rynki: {},
      media: {},
      typ: {}
    }
  }

  OfferSearchUI = {
    init: function(cfg, data) {
      this.cfg = cfg;
      this.data = data;
      //console.log("OfferSearchUI.init");
      return this
    },
    build: function() {
      //console.log("OfferSearchUI.build");
      for(var fun in this.cfg.widgetCreators)
      {
        //console.log("fun: " + fun);
        if(this.cfg.widgetCreators[fun])
          this[fun]();
      }
      //console.log(this);
    },
    sliderRangePriceCreate: function() {
      //console.log("OfferSearchUI.sliderRangePriceCreate");
      var self = this;
      // dirty fix for mootools + jquery bug .removeAttr('slide')
      //console.log($("#slider-range-price").slide);
      $("#slider-range-price").slider({
        range: true,
        min: 0,
        max: 10000,
        step: 1,
        values: [ 0, 10000 ],
        slide: function( event, ui ) {
          //event.preventDefault();
          event.stopPropagation();
          self.data.filters.cena_min = scaleVal(ui.values[ 0 ], 10000, 0, 100000000);
          self.data.filters.cena_max = scaleVal(ui.values[ 1 ], 10000, 0, 100000000);
          self.data.filters.cena_min_arg = ui.values[ 0 ];
          self.data.filters.cena_max_arg = ui.values[ 1 ];
          $("#box-slider-range-price .range-values-min").html(formatter(self.data.filters.cena_min));
          $("#box-slider-range-price .range-values-max").html(formatter(self.data.filters.cena_max));
          //$("#amount-price").val( self.data.filters.cena_min + " - " + self.data.filters.cena_max );
          if(self.data.filters.cena_max == undefined || self.data.filters.cena_max == 100000000)
            self.data.filters.cena_max = "";
        }
      });
      self.data.filters.cena_min = scaleVal($("#slider-range-price").slider("values", 0), 10000, 0, 100000000);
      self.data.filters.cena_max = scaleVal($("#slider-range-price").slider("values", 1), 10000, 0, 100000000);
      $("#box-slider-range-price .range-values-min").html(formatter(self.data.filters.cena_min));
      $("#box-slider-range-price .range-values-max").html(formatter(self.data.filters.cena_max));

      self.data.filters.cena_min_arg = $("#slider-range-price").slider("values", 0);
      self.data.filters.cena_max_arg = $("#slider-range-price").slider("values", 1);
    },
    sliderRangeAreaCreate: function() {
      //console.log("OfferSearchUI.sliderRangeAreaCreate");
      var self = this;
      // dirty fix for mootools + jquery bug .removeAttr('slide')
      $("#slider-range-area").slider({
        range: true,
        min: 0,
        max: 500,
        values: [ 0, 500 ],
        slide: function( event, ui ) {
          var min = ui.values[ 0 ];
          var max = ui.values[ 1 ];
          $("#box-slider-range-area .range-values-min").html(min);
          $("#box-slider-range-area .range-values-max").html(max);
          self.data.filters.powierzchnie = min + "," + max;
        }
      });
      var min = $("#slider-range-area").slider("values", 0);
      var max = $("#slider-range-area").slider("values", 1);
      $("#box-slider-range-area .range-values-min").html(min);
      $("#box-slider-range-area .range-values-max").html(max);
      self.data.filters.powierzchnie = min + "," + max;
    },
    sliderRangeLotAreaCreate: function() {
      //console.log("OfferSearchUI.sliderRangeLotAreaCreate");
      var self = this;
      // dirty fix for mootools + jquery bug .removeAttr('slide')
      $("#slider-range-lot-area").slider({
        range: true,
        min: 0,
        max: 10000,
        values: [ 0, 10000 ],
        slide: function( event, ui ) {
          var min = ui.values[ 0 ];
          var max = ui.values[ 1 ];
          $("#box-slider-range-lot-area .range-values-min").html(min);
          $("#box-slider-range-lot-area .range-values-max").html(max);
          self.data.filters.powierzchniadzialki = min + "," + max;
        }
      });
      var min = $("#slider-range-lot-area").slider("values", 0);
      var max = $("#slider-range-lot-area").slider("values", 1);
      $("#box-slider-range-lot-area .range-values-min").html(min);
      $("#box-slider-range-lot-area .range-values-max").html(max);
      self.data.filters.powierzchniadzialki = min + "," + max;
    },
    sliderRangeRoomcntCreate: function() {
      //console.log("OfferSearchUI.sliderRangeRoomcntCreate");
      var self = this;
      // dirty fix for mootools + jquery bug .removeAttr('slide')
      $("#slider-range-rcnt").slider({
        range: true,
        min: 1,
        max: 8,
        values: [ 1, 8 ],
        slide: function( event, ui ) {
          var min = ui.values[ 0 ];
          var max = ui.values[ 1 ];
          $("#box-slider-range-rcnt .range-values-min").html(min);
          $("#box-slider-range-rcnt .range-values-max").html(max);
          self.data.filters.liczbapokoi = min + "," + max;
        }
      });
      var min = $("#slider-range-rcnt").slider("values", 0);
      var max = $("#slider-range-rcnt").slider("values", 1);
      $("#box-slider-range-rcnt .range-values-min").html(min);
      $("#box-slider-range-rcnt .range-values-max").html(max);
      self.data.filters.liczbapokoi = min + "," + max;
    },
    togglersCreate: function() {
      //console.log("OfferSearchUI.togglersCreate");
      var self = this;
      $('a.atoggler').click(function() {
        $('div.btn-rnd-toggle', this).toggleClass('on');

        var fid = $(this).attr("id");
        var arr = fid.split(":");
        var ftype = arr[0];
        var fkey = arr[1];
        self.data.fstate[ftype][fkey] = $('div.btn-rnd-toggle', this).hasClass('on');
        self.updateFilters(ftype, fkey);
      });
    },
    sliderRangePriceUpdate: function(filters){
      //console.log("OfferSearchUI.sliderRangePriceUpdate");
      if(filters.cena_min_arg)
      {
        $("#slider-range-price").slider("values", 0, filters.cena_min_arg);
        offerSearchUI.data.filters.cena_min = scaleVal(filters.cena_min_arg, 10000, 0, 100000000);
        $("#box-slider-range-price .range-values-min").html(offerSearchUI.data.filters.cena_min);
      }
      if(filters.cena_min_arg)
      {
        $("#slider-range-price").slider("values", 1, filters.cena_max_arg);
        offerSearchUI.data.filters.cena_max = scaleVal(filters.cena_max_arg, 10000, 0, 100000000);
        $("#box-slider-range-price .range-values-max").html(offerSearchUI.data.filters.cena_max);
      }
    },

    sliderRangeAreaUpdate: function(filters){
      //console.log("OfferSearchUI.sliderRangeAreaUpdate");
      if( !filters.powierzchnie)
        return;
      vals = filters.powierzchnie.split(",");
      if(vals.length != 2)
        return;
      $("#slider-range-area").slider("values", 0, vals[0]);
      $("#slider-range-area").slider("values", 1, vals[1]);
      offerSearchUI.data.filters.powierzchnie = vals[0] + "," + vals[1];
      $("#box-slider-range-area .range-values-min").html(vals[0]);
      $("#box-slider-range-area .range-values-max").html(vals[1]);
    },

    sliderRangeLotAreaUpdate: function(filters){
      //console.log("OfferSearchUI.sliderRangeLotAreaUpdate");
      if( !filters.powierzchniadzialki)
        return;
      vals = filters.powierzchniadzialki.split(",");
      if(vals.length != 2)
        return;
      $("#slider-range-lot-area").slider("values", 0, vals[0]);
      $("#slider-range-lot-area").slider("values", 1, vals[1]);
      offerSearchUI.data.filters.powierzchniadzialki = vals[0] + "," + vals[1];
      $("#box-slider-range-lot-area .range-values-min").html(vals[0]);
      $("#box-slider-range-lot-area .range-values-max").html(vals[1]);
    },

    sliderRangeRoomcntUpdate: function(filters){
      //console.log("OfferSearchUI.sliderRangeRoomcntUpdate");
      if( !filters.pokoje)
        return;
      $("#slider-range-rcnt").slider("values", 0, filters.pokoje[0]);
      $("#slider-range-rcnt").slider("values", 1, filters.pokoje[1]);
      offerSearchUI.data.filters.liczbapokoi = filters.pokoje[0] + "," + filters.pokoje[1];
      $("#box-slider-range-rcnt .range-values-min").html(filters.pokoje[0]);
      $("#box-slider-range-rcnt .range-values-max").html(filters.pokoje[1]);
    },
    togglersUpdate: function(filters){
      //console.log("OfferSearchUI.togglersUpdate");
      if(filters.operacja)
      {
        var arr = filters.operacja.split(",");
        var allOper = {'wynajem':'1', 'sprzedaz':'2'};
        for(var val in allOper)
        {
          var el = $('#operacja\\:'+val+' div.btn-rnd-toggle');
          if(jQuery.inArray( val, arr ) == -1)
          {
            el.removeClass('on');
            this.data.fstate['operacja'][val] = false;
            this.updateFilters('operacja', val);
            continue;
          }
          el.addClass('on');
          this.data.fstate['operacja'][val] = true;
          this.updateFilters('operacja', val);
        }
      }

      if(filters.rynki)
      {
        //var arr = filters.rynki.split(",");
        var arr = filters.rynki;
        var allMarkets = {'pierwotny':'1', 'wtórny':'2'};
        for(var val in allMarkets)
        {
          var el = $('#rynki\\:'+val+' div.btn-rnd-toggle');
          console.log(el);
          if(jQuery.inArray( val, arr ) == -1)
          {
            el.removeClass('on');
            this.data.fstate['rynki'][val] = false;
            this.updateFilters('rynki', val);
            continue;
          }
          el.addClass('on');
          this.data.fstate['rynki'][val] = true;
          this.updateFilters('rynki', val);
        }
      }

      if(filters.media)
      {
        var arr = filters.media.split(",");
        var allMedia = {'kanalizacja':'1', 'prad':'2', 'gaz':'3', 'sila380':'4'};
        for(var val in allMedia)
        {
          var el = $('#media\\:'+val+' div.btn-rnd-toggle');
          if(jQuery.inArray( val, arr ) == -1)
          {
            el.removeClass('on');
            this.data.fstate['media'][val] = false;
            this.updateFilters('media', val);
            continue;
          }
          el.addClass('on');
          this.data.fstate['media'][val] = true;
          this.updateFilters('media', val);
        }
      }

      if(filters.typ)
      {
        var arr = filters.typ.split(",");
        var allTypes = {
          'biuro':'1',
          'handel':'2',
          'gastronomia':'3',
          'inny':'4',
          'warsztat':'5',
          'usługi':'6',
          'hala':'7',
          'magazyn':'8',
          'produkcja':'9',
          'centrum handlowe':'10',
          'inna':'11',
          'komercyjna':'12',
          'inwestycyjna':'13',
          'rekreacyjna':'14',
          'siedliskowa':'15',
          'rolna':'16',
          'leśna':'17'
        }

        for(var val in allTypes)
        {
          var el = $('#typ\\:'+selesc(val)+' div.btn-rnd-toggle');
          if(jQuery.inArray( val, arr ) == -1)
          {
            el.removeClass('on');
            this.data.fstate['typ'][val] = false;
            this.updateFilters('typ', val);
            continue;
          }
          el.addClass('on');
          this.data.fstate['typ'][val] = true;
          this.updateFilters('typ', val);
        }
      }
    },
    updateFilters: function(ftype, fkey){
      //console.log("OfferSearchUI.updateFilters");
      var val = "";
      for(key in this.data.fstate[ftype])
      {
        if(this.data.fstate[ftype][key])
        {
          if(val != "")
            val = val + ",";
          val = val + key;
        }
      }
      this.data.filters[ftype] = val;
    },
    updateWidgets: function(filters){
      //console.log("OfferSearchUI.updateWidgets");
      for(var fun in this.cfg.widgetCreators)
      {
        if(this.cfg.widgetCreators[fun])
          OfferSearchUI[this.cfg.widgetUpdaters[fun]](filters);
      }
    }
  }

  function formatter(val)
  {
    val = rounder(val);
    var digitNum = (val + "").length;
    var sval = val + "";
    var arr = sval.split("").reverse();
    var rval = "";
    for(idx = 0; idx < arr.length; idx++)
    {
      rval = arr[idx] + rval;
      if((idx+1) % 3 == 0 && idx + 1 != arr.length)
        rval = " " + rval;

    }
    return rval
  }

  function rounder(val)
  {
    var digitNum = (val + "").length;
    var roundNum = Math.pow(10, Math.floor(digitNum / 2));
    var rval = Math.floor(val / roundNum) * roundNum;
    return  rval;
  }

  function scaleVal(x, maxX, minVal, maxVal)
  {
    // proporcjonalne przejście od x do x^8 na odcinku [0,1]:
    scaled1 = 1/maxX;
    scaledx = x/maxX;
    sxp = scaledx*scaledx;
    val = minVal + x * (1-scaledx) + sxp*sxp*sxp*sxp * (maxVal-minVal) * scaledx

    return Math.floor(val);
  }
  $(document).ready(function() {
    try {
      oHandler = $("#sel-sort-order").msDropDown({mainCSS:'dd2'}).data("dd");
      //oHandler.visible(true);
      //alert($.msDropDown.version);
      //$.msDropDown.create("body select");
      //$("#ver").html($.msDropDown.version);
    } catch(e) {
      //alert("Error: "+e.message);
    }
  });

  var preloadImg1 = $('<img />').attr('src', '/img/map-ui-btn-help.png');

})(jQuery);

// selector escaping
function selesc(sel)
{
   sel = sel.replace(" ", "\\ ");
   return sel.replace(/(:|\.)/g,'\\$1');
}

String.prototype.reverse=function(){return this.split("").reverse().join("");}
