/* ---------------------------------- Flats ---------------------------------- */
ResidentalProperty = function () {
  var $Container, $Inputs,
      minPrice, maxPrice, minArea, maxArea, startFloor, endFloor, rooms,
      Flats = {},
      SearchUrl = "/source/js/search/flats.js";

  function initSearchOptions() {
    filterFlats();
    updateFormValues(checkBoundaryPropertiesValues());
    flatsTrackBars();
  }

  function filterFlats() {
    var cityId = $('#city_id_hidden').val();
    var projectId = $('#project_id_hidden').val();
//    cityId = cityId ? cityId : 1935;

    $.ajax({
      url: SearchUrl,
      type: "get",
      data: { cityId: cityId, projectId: projectId },
      dataType: "script",
      async: false,
      success: function (data) {
        eval(data);
      }
    });
  }

  function checkBoundaryPropertiesValues() {
    var boundaryValues = {
      minPrice: 0,
      maxPrice: 0,
      minArea: 0,
      maxArea: 0,
      startFloor: 0,
      endFloor: 0,
      availableRoomsCount: []
    };
    
    if (!($.isEmptyObject(Flats))) {
      boundaryValues.minPrice = isNaN(Flats.minPrice) ? 0 : Math.floor(Flats.minPrice);
      boundaryValues.maxPrice = isNaN(Flats.maxPrice) ? 0 : Math.ceil(Flats.maxPrice);
      boundaryValues.minArea = isNaN(Flats.minArea) ? 0 : Math.floor(Flats.minArea);
      boundaryValues.maxArea = isNaN(Flats.maxArea) ? 0 : Math.ceil(Flats.maxArea);
      boundaryValues.startFloor = isNaN(Flats.startFloor) ? 0 : Flats.startFloor;
      boundaryValues.endFloor = isNaN(Flats.endFloor) ? 0 : Flats.endFloor;
      boundaryValues.availableRoomsCount = Flats.availableRoomsCount;
    }

    return boundaryValues;
  }

  function updateFormValues(searchOptions) {
    if ($(document).getUrlParam('type') == 'residental') {
      var minPriceGet = parseFloat($(document).getUrlParam('minprice')) / 1000,
              maxPriceGet = parseFloat($(document).getUrlParam('maxprice')) / 1000,
              minAreaGet = parseFloat($(document).getUrlParam('minarea')),
              maxAreaGet = parseFloat($(document).getUrlParam('maxarea')),
              startFloorGet = parseInt($(document).getUrlParam('startfloor')),
              endFloorGet = parseInt($(document).getUrlParam('endfloor'));
    }
    searchOptions.minPriceGet = Math.floor(minPriceGet ? minPriceGet : searchOptions.minPrice);
    searchOptions.maxPriceGet = Math.ceil(maxPriceGet ? maxPriceGet : searchOptions.maxPrice);
    searchOptions.minAreaGet = Math.floor(minAreaGet ? minAreaGet : searchOptions.minArea);
    searchOptions.maxAreaGet = Math.ceil(maxAreaGet ? maxAreaGet : searchOptions.maxArea);
    searchOptions.startFloorGet = startFloorGet ? startFloorGet : searchOptions.startFloor;
    searchOptions.endFloorGet = endFloorGet ? endFloorGet : searchOptions.endFloor;

    minPrice.val(searchOptions.minPriceGet).attr('boundary', searchOptions.minPrice);
    maxPrice.val(searchOptions.maxPriceGet).attr('boundary', searchOptions.maxPrice);
    minArea.val(searchOptions.minAreaGet).attr('boundary', searchOptions.minArea);
    maxArea.val(searchOptions.maxAreaGet).attr('boundary', searchOptions.maxArea);
    startFloor.val(searchOptions.startFloorGet).attr('boundary', searchOptions.startFloor);
    endFloor.val(searchOptions.endFloorGet).attr('boundary', searchOptions.endFloor);

    rooms.removeAttr("checked").attr("disabled", "disabled");

    $.each(searchOptions.availableRoomsCount, function () {
      var room = rooms.filter("[roomsCount='" + this + "']");
      room.removeAttr("disabled")
      if ($(document).getUrlParam('room' + this)) room.attr('checked', 'checked');
    });
  }

  function flatsTrackBars() {
    $('#slidebar-flats-price').slider({
      range: true,
      min: parseInt(minPrice.attr('boundary')),
      max: parseInt(maxPrice.attr('boundary')),
      values: [parseInt(minPrice.val()), parseInt(maxPrice.val())],
      slide: function(event, ui) {
        minPrice.val(numberFormat(ui.values[0]));
        maxPrice.val(numberFormat(ui.values[1]));
      },
      create: function(event, ui) {
        AutoHairline($(this), 6);
        minPrice.val(numberFormat(minPrice.val()));
        maxPrice.val(numberFormat(maxPrice.val()));
      }
    });

    $('#slidebar-flats-area').slider({
      range: true,
      min: parseInt(minArea.attr('boundary')),
      max: parseInt(maxArea.attr('boundary')),
      values: [parseInt(minArea.val()), parseInt(maxArea.val())],
      slide: function(event, ui) {
        minArea.val(numberFormat(ui.values[0]));
        maxArea.val(numberFormat(ui.values[1]));
      },
      create: function(event, ui) {
        AutoHairline($(this), 6);
        minArea.val(numberFormat(minArea.val()));
        maxArea.val(numberFormat(maxArea.val()));
      }
    });

    $('#slidebar-flats-floor').slider({
      range: true,
      min: parseInt(startFloor.attr('boundary')),
      max: parseInt(endFloor.attr('boundary')),
      values: [parseInt(startFloor.val()), parseInt(endFloor.val())],
      slide: function(event, ui) {
        startFloor.val(ui.values[0]);
        endFloor.val(ui.values[1]);
      },
      create: function(event, ui) {
        AutoHairline($(this), 6);
      }
    });
  }

  return {
    InitSearchOptions: function () {
      $Container = $("#flats"),
              $Inputs = $Container.find('input:text, input:checkbox'),
              minPrice = $Inputs.filter('.minPrice'),
              maxPrice = $Inputs.filter('.maxPrice'),
              minArea = $Inputs.filter('.minArea'),
              maxArea = $Inputs.filter('.maxArea'),
              startFloor = $Inputs.filter('.startFloor'),
              endFloor = $Inputs.filter('.endFloor'),
              rooms = $Inputs.filter(':checkbox');

      initSearchOptions();
    }
  }
}();


/* ---------------------------------- Offices ---------------------------------- */
CommercialProperty = function () {
  var $Container, $Inputs,
          minPrice, maxPrice, minArea, maxArea, startFloor, endFloor,
          Properties = {};
  SearchUrl = "/source/js/search/offices.js";

  function initSearchOptions() {
    filterProperties();
    updateFormValues(checkBoundaryPropertiesValues());
    officesTrackBars();
  }

  function filterProperties() {
    var cityId = $('#city_id_hidden').val();
    var projectId = $('#project_id_hidden').val();
    cityId = cityId ? cityId : 1924;

    $.ajax({
      url: SearchUrl,
      type: "get",
      data: { cityId: cityId, projectId: projectId },
      dataType: "script",
      async: false,
      success: function (data) {
        eval(data);
      }
    });
  }

  function checkBoundaryPropertiesValues() {
    var boundaryValues = {
      minPrice: 0,
      maxPrice: 0,
      minArea: 0,
      maxArea: 0,
      startFloor: 0,
      endFloor: 0
    };

    if (!($.isEmptyObject(Properties))) {
      boundaryValues.minPrice = isNaN(Properties.minPrice) ? 0 : Math.floor(Properties.minPrice);
      boundaryValues.maxPrice = isNaN(Properties.maxPrice) ? 0 : Math.ceil(Properties.maxPrice);
      boundaryValues.minArea = isNaN(Properties.minArea) ? 0 : Math.floor(Properties.minArea);
      boundaryValues.maxArea = isNaN(Properties.maxArea) ? 0 : Math.ceil(Properties.maxArea);
      boundaryValues.startFloor = isNaN(Properties.startFloor) ? 0 : Properties.startFloor;
      boundaryValues.endFloor = isNaN(Properties.endFloor) ? 0 : Properties.endFloor;
    }

    return boundaryValues;
  }

  function updateFormValues(searchOptions) {
    if ($(document).getUrlParam('type') == 'commercial') {
      var minPriceGet = parseFloat($(document).getUrlParam('minprice')) / 1000,
              maxPriceGet = parseFloat($(document).getUrlParam('maxprice')) / 1000,
              minAreaGet = parseFloat($(document).getUrlParam('minarea')),
              maxAreaGet = parseFloat($(document).getUrlParam('maxarea')),
              startFloorGet = parseInt($(document).getUrlParam('startfloor')),
              endFloorGet = parseInt($(document).getUrlParam('endfloor'));
    }
    searchOptions.minPriceGet = Math.floor(minPriceGet ? minPriceGet : searchOptions.minPrice);
    searchOptions.maxPriceGet = Math.ceil(maxPriceGet ? maxPriceGet : searchOptions.maxPrice);
    searchOptions.minAreaGet = Math.floor(minAreaGet ? minAreaGet : searchOptions.minArea);
    searchOptions.maxAreaGet = Math.ceil(maxAreaGet ? maxAreaGet : searchOptions.maxArea);
    searchOptions.startFloorGet = startFloorGet ? startFloorGet : searchOptions.startFloor;
    searchOptions.endFloorGet = endFloorGet ? endFloorGet : searchOptions.endFloor;

    minPrice.val(searchOptions.minPriceGet).attr('boundary', searchOptions.minPrice);
    maxPrice.val(searchOptions.maxPriceGet).attr('boundary', searchOptions.maxPrice);
    minArea.val(searchOptions.minAreaGet).attr('boundary', searchOptions.minArea);
    maxArea.val(searchOptions.maxAreaGet).attr('boundary', searchOptions.maxArea);
    startFloor.val(searchOptions.startFloorGet).attr('boundary', searchOptions.startFloor);
    endFloor.val(searchOptions.endFloorGet).attr('boundary', searchOptions.endFloor);
  }

  function officesTrackBars() {
    $('#slidebar-offices-price').slider({
      range: true,
      min: parseInt(minPrice.attr('boundary')),
      max: parseInt(maxPrice.attr('boundary')),
      values: [parseInt(minPrice.val()), parseInt(maxPrice.val())],
      slide: function(event, ui) {
        minPrice.val(numberFormat(ui.values[0]));
        maxPrice.val(numberFormat(ui.values[1]));
      },
      create: function(event, ui) {
        AutoHairline($(this), 6);
        minPrice.val(numberFormat(minPrice.val()));
        maxPrice.val(numberFormat(maxPrice.val()));
      }
    });

    $('#slidebar-offices-area').slider({
      range: true,
      min: parseInt(minArea.attr('boundary')),
      max: parseInt(maxArea.attr('boundary')),
      values: [parseInt(minArea.val()), parseInt(maxArea.val())],
      slide: function(event, ui) {
        minArea.val(numberFormat(ui.values[0]));
        maxArea.val(numberFormat(ui.values[1]));
      },
      create: function(event, ui) {
        AutoHairline($(this), 6);
        minArea.val(numberFormat(minArea.val()));
        maxArea.val(numberFormat(maxArea.val()));
      }
    });

    $('#slidebar-offices-floor').slider({
      range: true,
      min: parseInt(startFloor.attr('boundary')),
      max: parseInt(endFloor.attr('boundary')),
      values: [parseInt(startFloor.val()), parseInt(endFloor.val())],
      slide: function(event, ui) {
        startFloor.val(ui.values[0]);
        endFloor.val(ui.values[1]);
      },
      create: function(event, ui) {
        AutoHairline($(this), 6);
      }
    });
  }

  return {
    InitSearchOptions: function () {
      $Container = $("#offices"),
              $Inputs = $Container.find('input:text'),
              minPrice = $Inputs.filter('.minPrice'),
              maxPrice = $Inputs.filter('.maxPrice'),
              minArea = $Inputs.filter('.minArea'),
              maxArea = $Inputs.filter('.maxArea'),
              startFloor = $Inputs.filter('.startFloor'),
              endFloor = $Inputs.filter('.endFloor'),

              initSearchOptions();
    }
  }
}();


/* ---------------------------------- Lots ---------------------------------- */
CountryEstate = function () {
  var $Container, $Inputs,
          minPrice, maxPrice, minArea, maxArea, startFloor, endFloor,
          Estates = {},
          SearchUrl = "/source/js/search/lots.js";

  function initSearchOptions() {
    filterEstates();
    updateFormValues(checkBoundaryPropertiesValues());
    lotsTrackBars();
  }

  function filterEstates() {
    var city_id = $('#city_id_hidden').val();
    var projectId = $('#project_id_hidden').val();
    city_id = city_id ? city_id : 1911;

    $.ajax({
      url: SearchUrl,
      type: "get",
      data: { cityId: city_id, projectId: projectId },
      dataType: "script",
      async: false,
      success: function (data) {
        eval(data);
      }
    });
  }

  function checkBoundaryPropertiesValues() {
    var boundaryValues = {
      minPrice: 0,
      maxPrice: 0,
      minArea: 0,
      maxArea: 0
    };

    if (!($.isEmptyObject(Estates))) {
      boundaryValues.minPrice = isNaN(Estates.minPrice) ? 0 : Math.floor(Estates.minPrice);
      boundaryValues.maxPrice = isNaN(Estates.maxPrice) ? 0 : Math.ceil(Estates.maxPrice);
      boundaryValues.minArea = isNaN(Estates.minArea) ? 0 : Math.floor(Estates.minArea);
      boundaryValues.maxArea = isNaN(Estates.maxArea) ? 0 : Math.ceil(Estates.maxArea);
    }

    return boundaryValues;
  }

  function updateFormValues(searchOptions) {
    if ($(document).getUrlParam('type') == 'commercial') {
      var minPriceGet = parseFloat($(document).getUrlParam('minprice')) / 1000,
              maxPriceGet = parseFloat($(document).getUrlParam('maxprice')) / 1000,
              minAreaGet = parseFloat($(document).getUrlParam('minarea')),
              maxAreaGet = parseFloat($(document).getUrlParam('maxarea'));
    }
    searchOptions.minPriceGet = Math.floor(minPriceGet ? minPriceGet : searchOptions.minPrice);
    searchOptions.maxPriceGet = Math.ceil(maxPriceGet ? maxPriceGet : searchOptions.maxPrice);
    searchOptions.minAreaGet = Math.floor(minAreaGet ? minAreaGet : searchOptions.minArea);
    searchOptions.maxAreaGet = Math.ceil(maxAreaGet ? maxAreaGet : searchOptions.maxArea);

    minPrice.val(searchOptions.minPriceGet).attr('boundary', searchOptions.minPrice);
    maxPrice.val(searchOptions.maxPriceGet).attr('boundary', searchOptions.maxPrice);
    minArea.val(searchOptions.minAreaGet).attr('boundary', searchOptions.minArea);
    maxArea.val(searchOptions.maxAreaGet).attr('boundary', searchOptions.maxArea);
  }

  function lotsTrackBars() {
    $('#slidebar-lots-price').slider({
      range: true,
      min: parseInt(minPrice.attr('boundary')),
      max: parseInt(maxPrice.attr('boundary')),
      values: [parseInt(minPrice.val()), parseInt(maxPrice.val())],
      slide: function(event, ui) {
        minPrice.val(numberFormat(ui.values[0]));
        maxPrice.val(numberFormat(ui.values[1]));
      },
      create: function(event, ui) {
        AutoHairline($(this), 6);
        minPrice.val(numberFormat(minPrice.val()));
        maxPrice.val(numberFormat(maxPrice.val()));
      }
    });

    $('#slidebar-lots-area').slider({
      range: true,
      min: parseInt(minArea.attr('boundary')),
      max: parseInt(maxArea.attr('boundary')),
      values: [parseInt(minArea.val()), parseInt(maxArea.val())],
      slide: function(event, ui) {
        minArea.val(numberFormat(ui.values[0]));
        maxArea.val(numberFormat(ui.values[1]));
      },
      create: function(event, ui) {
        AutoHairline($(this), 6);
        minArea.val(numberFormat(minArea.val()));
        maxArea.val(numberFormat(maxArea.val()));
      }
    });
  }

  return {
    InitSearchOptions: function () {
      $Container = $("#lots"),
              $Inputs = $Container.find('input:text'),
              minPrice = $Inputs.filter('.minPrice'),
              maxPrice = $Inputs.filter('.maxPrice'),
              minArea = $Inputs.filter('.minArea'),
              maxArea = $Inputs.filter('.maxArea');

      initSearchOptions();
    }
  }
}();


function findParams($uri, $container, type) {
  var urlParams = [];

  urlParams.push({name:'type', value:type});
  $container
          .find("input[value!='']:text").each(
          function () {
            var $this = $(this),
                    val = removeSpaces($this.val()),
                    name = $this.attr('name');
            if (name == 'minprice' || name == 'maxprice') val = (parseFloat(val * 1000)).toString();
            urlParams.push({name:name, value:val});
          }).end()
          .find('input:checkbox').each(function(i) {
            var $this = $(this),
                    val = $this.attr('checked') ? i : '';
            urlParams.push({name: $this.attr('name'), value: val});
          });

  location.href = $uri + "?" + decodeURIComponent($.param(urlParams));
}
