﻿var currentSearchFormId = 'search';
var currentSearchResultHolderId = 'listingResultsHolder';
var doNotClearRadios = false;

(function() {
  var methods = {
    defaultValueActsAsHint: function(element) {
      element = $(element);
      element._default = $(element + "Default") == null ? $(element).value : $(element + "Default").value;

      return element.observe('focus', function() {
        if (element._default != element.value) return;
        element.removeClassName('hint').value = '';
      }).observe('blur', function() {
        if (element.value.strip() != '' && element.value.strip() != element._default) return;
        element.addClassName('hint').value = element._default;
      }).addClassName('hint');
    }
  };

  $w('input textarea select').each(function(tag) { Element.addMethods(tag, methods) });
})();

function forgotPassword() {
    var emailValue = $('email').value;
    if (emailValue != "") {
        new Ajax.Request("/User/ForgotPassword", {
            method: 'get',
            parameters: { email: emailValue },
            onSuccess: function(t) {
                $('userCredentials').innerHTML = t.responseText;
                hideRegisterForms();
            }
        });
    } else {
        alert("введите в поле email тот адрес с которым вы регистрировались");
    }
}

function showSubregions(subRegionULID, subRegionCheckBoxID) {
  var id = subRegionULID.replace("sub", "");
  var value = $(id).value;
  var relkey = "hidden" + id;
  
  $$("[rel='subregions']").each(function (el) {
    el.hide();
  });
  if ($(subRegionCheckBoxID).type != "checkbox") {
    if ($(subRegionCheckBoxID).checked == true) {
      //    $(subRegionCheckBoxID).checked = false; 
      $$("input[name='" + $(subRegionCheckBoxID).name + "']").each(function(el) {
        el.checked = false;
      });
      $$("[rel='" + relkey + "']").each(function(el) {
        el.value = "";
      });
    } else {
      $$("input[name='" + $(subRegionCheckBoxID).name + "']").each(function(el) {
        el.checked = true;
        el.value = value;
      });
      //    $(subRegionCheckBoxID).checked = true; 
    }
  }
  $(subRegionULID).show();
}

function setRegion() {  
  var regionCount = 0;
  $$('input[rel="regionSelector"]').each(function(input) {
    if (input.checked) {
      regionCount = regionCount + 1;
      $$("input[name='" + input.name + "']").each(function(el) {
        el.value = input.value;
      });
    }
  });  
  var regionList = "все";
  if (regionCount > 0) {
    regionList = "выбрано " + regionCount + " ";
  }
  if (regionCount == 1) {
    regionList = regionList + 'район'
  }
  if (regionCount == 2 || regionCount == 3 || regionCount == 4) {
    regionList = regionList + 'района'
  }
  if (regionCount > 4) {
    regionList = regionList + 'районов'
  }
  $('regionTitle').innerHTML = regionList;
}

function parametrizeSearch(operationTypeRef, listingTypeRef) {
  $$('[name="query.OperationTypeRef"]').each(function(element) {
    element.value = operationTypeRef;
  });
  $$('[name="query.ListingTypeRef"]').each(function(element) {
    element.value = listingTypeRef;
  });
  $$('[name="query.NoSuggestion"]').each(function(element) {
    element.value = false;
  });
  searchListing();
}

function ImgSetOver(img) {
  if (img.src.indexOf("pressed") < 0) {
    img.src = img.src.replace(".gif", "over.gif");
  }
}

function ImgSetNormal(img) {
  img.src = img.src.replace("over.gif", ".gif");
}

function ImgSetProcessPress(img) {
  var roomsNumber = img.src.substr(img.src.indexOf("room") + 4, 1);
  if (img.src.indexOf("pressed") >= 0) {
    img.src = img.src.replace("pressed.gif", "over.gif");
    $('room' + roomsNumber).value = 0;
  } else {
    if (img.src.indexOf("over.gif") >= 0) {
      img.src = img.src.replace("over.gif", "pressed.gif");
    } else {
      img.src = img.src.replace(".gif", "pressed.gif");
    }
    $('room' + roomsNumber).value = roomsNumber;
  }
}

var selectedPropertyTypeForm;
var selectedPropertyDetailsForm;

function startSelection(ulElement) {
  ulElement.select('li').each(function(li) {
    $(li).observe('mouseover', function(event) {
      Event.element(event).addClassName('selected');
      Event.stop(event);
    });
    $(li).observe('mouseout', function(event) {
      Event.element(event).removeClassName('selected');
      Event.stop(event);
    });
  });
}

function openInNewWindow() {
  var count = 0;
  $$('input[rel="listingId"]').each(function(input) {
    if (input && input.value && input.checked) {
      if (count < 10) {
        openWindow("/Listing/Listing?id=" + input.value, "_view_" + input.value);
      }
      count++;
    }
  });
}

function openWindow(url, target) {
  window.open(url, target);
}

function sendToFriends(form, action) {
  $(form).action = action;
  $(form).method = "post";
  formRequest($(form));
}

function printSelected() {
  openWindow('/Listing/Print?' + $('selectedIDs').serialize(), '_print_window');
}

function deleteSelected() {
  if (currentDialog && currentDialog.hide) {
    currentDialog.hide();
  }
  new Ajax.Request("/Listing/DeleteSelected?" + $('selectedIDs').serialize(),
  {
    method: 'get',
    onSuccess: function(t) {
      alert(t.responseText);
      searchListing();
    }
  });
}

function searchListing(dirrect) {
  if (dirrect && (currentSearchFormId != 'search')) {
    $('search').getInputs().each(function(input) {
      input.value = input.value.replace("улица", "");
      input.value = input.value.replace("слово, фраза или номер обьявления", "");
    });
    $('search').action = "/Home/Index";
    $('search').submit();
  }
  $(currentSearchFormId).getInputs().each(function(input) { 
    input.value = input.value.replace("улица", "");
    input.value = input.value.replace("слово, фраза или номер обьявления", "");
  });
  if ($(currentSearchResultHolderId)) {
    $(currentSearchFormId).request({
      method: "get",
      onSuccess: function(t) {
        $(currentSearchResultHolderId).innerHTML = t.responseText;
        setProperTabSwitches();
      },
      onFailure: function() {
        $(currentSearchResultHolderId).innerHTML = "Произошла ошибка, пожалуйста, попробуйте еще раз.";
      },
      onLoading: function() {
        $(currentSearchResultHolderId).innerHTML = $(currentSearchResultHolderId + 'Loading').innerHTML;
      }
    });
    loadFeatured();
  } else {
    $('search').getInputs().each(function(input) {
      input.value = input.value.replace("улица", "");
      input.value = input.value.replace("слово, фраза или номер обьявления", "");
    });
    $('search').action = "/Home/Index";
    $('search').submit();
  }
}

function setProperTabSwitches() {  
  var operationType = $('query.OperationTypeRefValue').value;
  var propertyType = $('query.ListingTypeRef').value;
  $$('li[rel="tabOperation' + operationType + '"]').each(function(el) {
    makeActiveTab(el);
  });
  var activationA;
  var typeHeader;
  if ($('realEstateTypes')) {
      $('realEstateTypes').select('td').each(function(element) {
          if (element.down('input') && element.down('input').value == propertyType) {
              activationA = element.down('a');
              typeHeader = element.title;
          }
      });
      var group = $('propertyGroupContainer').down('[rel="' + typeHeader + '"]');
      setActiveSubItems(group);
      setActiveListingType(activationA);
  }
//  var typeHolder = $('realEstateTypes').down("input[value='" + propertyType + "']");
//  var td = typeHolder.up('td');
}

function loadFeatured() {
  if ($("featuredHolder")) {
    new Ajax.Request("/Listing/Featured?" + $(currentSearchFormId).serialize(),
    {
      method: 'get',
      onSuccess: function(t) {
        $('feaduredListingsContainer').innerHTML = t.responseText;
        if ($("featuredHolder")) {
          hCarousel = new UI.Carousel("featuredHolder", { previousButton: ".featuredLeftArrow",
            nextButton: ".featuredRightArrow", scrollInc: 3, animating: false
          });
        }
      },
      onLoading: function() {
        $('feaduredListingsContainer').innerHTML = $('feaduredListingsContainerLoading').innerHTML;
      }
    });
  }
}

var selectedPropertyDetailsForm = null;
var selectedPropertyTypeForm = null;

function activateForm(input, form) {
  $('listingRoomDetails').hide();
  $('listingAppartmentDetails').hide();
  $('listingHouseDetails').hide();
  $('listingGarageDetails').hide();
  $('listingCommercialDetails').hide();
  $('listingPlotDetails').hide();
  selectedPropertyTypeForm = input.up('form');
  selectedPropertyDetailsForm = $(form.id + "Form");
  form.show();
}

function previewListing() {
  var aditionalParams = new $H();
  aditionalParams = aditionalParams.merge($('listingOperationTypeForm').serialize(true));
  aditionalParams = aditionalParams.merge($('listingTypeForm').serialize(true));
  aditionalParams = aditionalParams.merge($('personalData').serialize(true));

  if (!selectedPropertyTypeForm) {
    selectedPropertyTypeForm = $('livingRealEstateTypes').down('form');
  }

  aditionalParams = aditionalParams.merge(selectedPropertyTypeForm.serialize(true));
  aditionalParams = aditionalParams.merge($('personalData').serialize(true));
  //  aditionalParams = aditionalParams.merge(selectedPropertyDetailsForm.serialize(true));

  selectedPropertyDetailsForm.request({
    parameters: aditionalParams.toQueryString(),
    method: "POST",
    onSuccess: function(t) {
      openWindow(t.responseText, "pre_view_");
    }
  });
}

function newListing() {
  var aditionalParams = new $H();

  if (validateForm(selectedPropertyDetailsForm) && validateForm('personalData')) {
    aditionalParams = aditionalParams.merge($('listingOperationTypeForm').serialize(true));
    aditionalParams = aditionalParams.merge($('listingTypeForm').serialize(true));
    aditionalParams = aditionalParams.merge($('personalData').serialize(true));


    aditionalParams = aditionalParams.merge(selectedPropertyTypeForm.serialize(true));
    aditionalParams = aditionalParams.merge($('personalData').serialize(true));
    //  aditionalParams = aditionalParams.merge(selectedPropertyDetailsForm.serialize(true));

    if (!selectedPropertyTypeForm) {
      selectedPropertyTypeForm = $('livingRealEstateTypes').down('form');
    }

    selectedPropertyDetailsForm.request({
      parameters: aditionalParams.toQueryString(),
      method: "POST",
      onSuccess: function(t) {
        location.href = t.responseText;
      },
      onLoading: function() {
        $('postListingButton').hide();
        $('postListingLoader').show();
      },
      onFailure: function() {
        $('postListingFailure').show();
      }
    });
  }
}

function changeSelectedListingPropertyType(input) {
  if (input.checked == true) {
    $('livingRealEstateTypes').hide();
    $('commercialRealEstateTypes').hide();
    $('plotRealEstateTypes').hide();
    $(input.id + 'Types').show();

    selectedPropertyTypeForm = $(input.id + 'Types').down('form');
  }
}

function reloadLogo() {
  new Ajax.Request("/User/Logo", {
    method: 'get',
    contentType: "text/html",
    onSuccess: function(transport) {
      $('userLogoImg').innerHTML = transport.responseText;
    }
  });
}

function orderBy(fieldName, th) {
  if (!th.order) {
    th.order = 'asc';
  } else {
    if (th.order == 'desc') {
      th.order = 'asc';
    } else {
      th.order = 'desc'
    }
  }
  $('orderField').value = fieldName;
  $('orderDirection').value = th.order;
  searchListing();
}

var currentDialog;

function openDialog(dialogButton, position) {
  var dialogId = dialogButton.id + 'Dialog';
  if (currentDialog && currentDialog.hide && currentDialog == $(dialogId).dialog && $(dialogId).dialog.dialog_box.style.display != 'none') {
    currentDialog.hide();
  } else
  if (currentDialog && currentDialog.hide && currentDialog == $(dialogId).dialog && $(dialogId).dialog.dialog_box.style.display == 'none') {
    currentDialog.show();
  } else {
    if (currentDialog && currentDialog.hide) {
      currentDialog.hide();
    }

    if (currentDialog && currentDialog.close) {
      currentDialog.close();
    }    
  
    if (!$(dialogId).dialog) {
      $(dialogId).dialog = new Dialog.Box(dialogId, '', dialogButton.id, position);
      $(dialogId).dialog.show();
    }

    if (currentDialog != $(dialogId).dialog) {
      $(dialogId).dialog.show();
    }
  
    currentDialog = $(dialogId).dialog;    
  }  
}

function setHiddenInputAndLabelValue(element, value, updateName) {
  var dialog = element.up('[class="popupBoxModel"]');
  var id = dialog.id.replace("Dialog", "");
  $(id).innerHTML = element.innerHTML;
  if (!updateName) {
    updateName = id;
  }
  $$("[name='" + updateName + "']").each(function(input) {
    input.value = value;
  });
  $(updateName).innerHTML = element.innerHTML;
  currentDialog.hide();
}

document.observe("dom:loaded", function() {
  //  var carousel = new UI.Carousel("featuredHolder", { previousButton: "featuredLeftArrow",
  //    nextButton: "featuredRightArrow"
  //  });


  if ($("featuredHolder")) {
    hCarousel = new UI.Carousel("featuredHolder", { previousButton: ".featuredLeftArrow",
      nextButton: ".featuredRightArrow", scrollInc: 3, animating: false
    });
  }
  $$('input[rel="StatusControl"]').each(function(element) {
    element.stat = new StatusValue(element);
  });

  $$('input[rel="StatusReadOnlyControl"]').each(function(element) {
    stat = new StatusReadOnlyValue(element);
  });

  if (!doNotClearRadios) {
    $$('input[type="radio"]').each(function(element) {
      if (element.checked) {
        element.checked = false;
      }
    });
  }

  $$('input[rel="emptyvalueContainer"]').each(function(element) {
    emptyText(element);
  });

  $$('form').each(function(form) {
    form.observe("submit", validateForm);
  });


  $('search').select("input").each(function(element) {
    element.observe("keypress", function(event) {
      if (event.keyCode == Event.KEY_RETURN) {
        searchListing();
      }
    });
  });


  $$('select[rel="othersPossible"]').each(function(element) {
    var option = new Element("option");
    option.text = "Другое ...";
    var input = new Element("input");
    input.hide();
    element.insert({
      after: input
    });

    element.observe("change", function(event) {
      if (event.element().options[event.element().selectedIndex].text == "Другое ...") {
        input.show();
      } else {
        input.hide();
      }
    });


    input.observe("change", function(event) {
      option.value = event.element().value;
    });

    try {
      element.add(option, null); // standards compliant; doesn't work in IE
    }
    catch (ex) {
      element.add(option); // IE only
    }
  });

  setInputValuesFromParameters();


  //  LazyLoader.load('http://maanimo.com/informer/currencySmall');
  //  LazyLoader.load('http://mapia.com.ua/api/0.9.0/mapiaapi.js?apikey=9a45d41e968ee3c211d9d7a285ae18c3');
  //  LazyLoader.load('http://ua.adocean.pl/files/js/ado.js');
  //  LazyLoader.load('/Scripts/externals.js');

  //  $("inputStreet").defaultValueActsAsHint();
  //  $("selectDistrict").defaultValueActsAsHint();
  //  $('additionalInput').defaultValueActsAsHint();
  //  $('additionalInput').defaultValue = $('additionalInput').value;
  //  $('actionChooser').observe("change", respondToChange);  
});

function setInputValuesFromParameters(params) {
  if (!params) {
    params = window.location.href.toQueryParams();
  }
  for (name in params) {
    if (name != '') {
      $$('[name="' + name + '"]').each(function(element) {
        element.value = params[name];
        var controlType = element.getAttribute('rel');
        if (controlType == "img" && element.value != 0) {
          ImgSetProcessPress($(element.id + "Img"));
        }
      });
    }
  }
}

String.prototype.trim = function() {
  return this.replace(/^\s+|\s+$/g, "");
}

var elementToHide;

function validateForm(form) {
  form = $(form);

  var result = true;
  form.getElements().each(function(input) {  
    if (result == true && input.classNames().member("importantInput")) {
      input.value = input.value.trim();
      if (input.value == "") {
        alert("Не все необходимые поля заполнены");
        input.focus();
        result = false;
      }
    }
    if (input.hasAttribute('maxlength') && result) {
      input.maxLength = input.getAttribute('maxlength');
      if (input.value.length > input.maxLength) {
        alert("Поле позволяет ввести до " + input.maxLength + " символов. Пожалуйста сократите текст");
        input.focus();
        result = false;
      }
    }
  });
  return result;
}


function respondToChange(event) {
  $('actionChooser').selectedIndex = 0;
  sendParameters.body = $('listingHolder').innerHTML;
  new Ajax.Request("Home/SendMailItemsController", {
    method: 'get',
    parameters: sendParameters
  });
}

function hideRegisterForms() {
  $('loginFormPrivate').style.display = 'none'
}


function showEditor(button, formId) {
  var id = button.id;
  var editor = $(id + '_editor');
  var label = $(id + '_label');
  var form = $(formId);
  var header = $(id + '_header');

  if (editor.type == "checkbox") {
    if (label.innerHTML.trim() == header.innerHTML.trim()) {
      editor.checked = true;
    } else {
      editor.checked = false;
    }
  } else {
    editor.value = label.innerHTML;
  }
  editor.show();
  label.hide();
  editor.observe("blur", function() {
    if (form) {
      form.request({
        method: "get",
        onSuccess: function(transport) {
          hideEditor(editor);
        },
        onFailure: function(t) {
          alert('Произошла ошибка');
        }
      });
    } else {
      hideEditor(this);
    }
  })
}

function hideEditor(editor) {
  var id = editor.id.replace("_editor", "");
  var label = $(id + '_label');
  var header = $(id + '_header');

  if (editor.type == "checkbox") {
    if (editor.checked) {
      label.innerHTML = header.innerHTML;
    } else {
      label.innerHTML = "";
    }
  } else if (editor.tagName == "SELECT" && editor.multiple == true) {
    var value = "";
    for (var i = 0; i < editor.options.length; ++i) {
      var option = editor.options[i];
      if (option.selected == true) {
        value = value + option.value;
        value = value + ",";
      }
    }
    value = value.substr(0, value.length - 1);
    label.innerHTML = value;
  } else {
    label.innerHTML = editor.value;
  }

  editor.hide();
  label.show();
}

function createUser() {
  if (validateForm('CreateUserForm')) {
    $('CreateUserForm').request({
      method: "get",
      contentType: "text/html",
      onSuccess: function(t) {
        $('userCredentials').innerHTML = t.responseText;
        hideRegisterForms();
      }
    });
  }
}

function createRealtor() {
  if (validateForm('CreateRealtorForm')) {
    $('CreateRealtorForm').request({
      method: "get",
      contentType: "text/html",
      onSuccess: function(t) {
        $('userCredentials').innerHTML = t.responseText;
        hideRegisterForms();
      }
    });
  }
}

function signIn() {
  if (validateForm('signInForm')) {
    $('signInForm').request({
      method: 'POST',
      //        contentType: "text/html",
      onSuccess: function(t) {
        $('userCredentials').innerHTML = t.responseText;
        hideRegisterForms();
      },
      onFailure: function() {
        alert("Аутентификация не успешна");
      }
    });
  }
}

function loadNewLogo() {
  $('userLogoForm').request({
    method: 'POST',
    contentType: "text/html",
    onSuccess: function(t) {
      $('userLogoForm').innerHTML = t.responseText;
    },
    onFilure: function() {
      alert("Загрузка не успешна")
    }
  });
}

function setPressedSrc(img) {
  img.src = img.src.replace(".gif", "Pressed.gif").replace(".png", "Pressed.png");
  if (img.oSrc) {
    img.oSrc = img.oSrc.replace(".gif", "Pressed.gif").replace(".png", "Pressed.png");
  }
}

function setNotPressedSrc(img) {
  img.src = img.src.replace("Pressed.gif", ".gif").replace("Pressed.png", ".png");
  if (img.oSrc) {
    img.oSrc.src = img.oSrc.replace("Over.gif", "Pressed.gif").replace("Over.png", "Pressed.png");
  }
}

function applyAction() {
  if ($('actionChooser_combo')) {
    $('actionChooser_combo').value = $('actionChooser').options[0].text;
  } else {
    new Autocompleter.SelectBox('actionChooser');
  }
  var actionName = $('actionChooser').options[$('actionChooser').selectedIndex].value;
  if (actionName == 'MarkOnTheMap') {
    markSelectedListingsOnTheMap();
  }
}

function markSelectedListingsOnTheMap() {
  objManager.removeAll();
  $$('[title="Select listing"]').each(function(element) {
    if (!element.checked) {
      objManager.add(element.greyPlacemark);
    } else {
      objManager.add(element.placemark);
    }
  });

}

function registerRoleTypeChanged() {
  //    $('loginFormRealtor').style.display = 'none'
  //    $('loginFormPrivate').style.display = 'block'
  if ($('radioRegisterRealtor').checked == true) {
    $('registerPrivatePersonData').style.display = "none";
    $('registerRealtorData').style.display = "block";
  } else {
    $('registerRealtorData').style.display = "none";
    $('registerPrivatePersonData').style.display = "block";
  }
}

//function showRegisterform() {
//    $('loginFormPrivate').style.display = 'none'
//    $('loginFormRealtor').style.display = 'block'
//}

var map, geoResult;

function showTableSettings() {
  if (!$('tableSettings').dialog) {
    $('tableSettings').dialog = new Dialog.Box('tableSettings', '', 'tableSettingsButton');
  }
  $('tableSettings').dialog.show();
}

function showHideColumn(checkbox) {
  var fieldName = checkbox.getAttribute('rel')
  if (checkbox.checked) {
    $$('td.[rel="' + fieldName + '"]').each(function(element) { element.show(); });
    $$('th.[rel="' + fieldName + '"]').each(function(element) { element.show(); });
  } else {
    $$('td.[rel="' + fieldName + '"]').each(function(element) { element.hide(); });
    $$('th.[rel="' + fieldName + '"]').each(function(element) { element.hide(); });
  }
}

function processColumnCollapserClick() {
  if ($('leftColumn').columnCollapsed) {
    $('OperationTypeSelector').removeClassName('contentColumnExpanded');
    $('leftColumn').removeClassName('leftColumnCollapsed');
    $('columnCollapser').src = $('columnCollapser').src.replace("Expander", "Collapser");
    $('searchButtonForCollapsedLeftColumn').style.display = "none";
    $('leftColumn').columnCollapsed = false;
//    $('premiumBanner').removeClassName('bannerFloat');
//    $('premiumBanner').addClassName('premiumBanner');
//    $('premiumBanner').show();
    $('hidePremiumBanner').hide();
  } else {
    $('OperationTypeSelector').addClassName('contentColumnExpanded');
    $('leftColumn').addClassName('leftColumnCollapsed');
    $('columnCollapser').src = $('columnCollapser').src.replace("Collapser", "Expander");
    $('searchButtonForCollapsedLeftColumn').style.display = "block";
    $('leftColumn').columnCollapsed = true;
//    $('premiumBanner').removeClassName('premiumBanner');
//    $('premiumBanner').addClassName('bannerFloat');
//    $('hidePremiumBanner').style.display = 'block';
  }
}

function hidePremiumBanner() {
  $('premiumBanner').hide();
}

var objManager;
var map;

function showLisingOnThMap(category, address, logo, id, price) {
  var mapHolder = $('mapHolderConainer');
  if (mapHolder.style.display == '' || mapHolder.style.display == 'none') {
    $('mapHolderConainer').style.display = 'block';
    map = new Mapia('mapHolder');
    map.addMarker('marker' + id, address,
      {
        title: "#" + id + ", " + address + ", " + price,
        category_name: category,
        icon_url: 'http://address.com.ua/img/key.gif',
        url: "http://address.com.ua/Listing/Listing?id=" + id,
        logo: "http://address.com.ua" + logo
      }
    );
    mapHolder.mapIsLoaded = true;
    map.setZoom(10);
    mapHolder.style.display = 'block';
    return;
  }
  if (mapHolder.style.display == 'block') {
    mapHolder.style.display = 'none';
  }
}

function showResultsOnTheMap(category) {
  var mapHolder = $('mapHolderConainer');
  if (mapHolder.style.display == '' || mapHolder.style.display == 'none') {
    $('mapHolderConainer').style.display = 'block';
    map = new Mapia('mapHolder');

    var listings = $('listingContainerTable').rows;
    for (var i = 0; i < listings.length; ++i) {
      var listing = listings[i];
      var address = listing.select('td.[rel="Address"]');
      var id = listing.select('td.[rel="id"]');
      if (id.length > 0) {
        id = id[0].down('a').innerHTML.replace("<br>", "");
      }
      var price = listing.select('td.[rel="price"]');
      if (price.length > 0) {
        price = price[0].down('a').innerHTML.replace("<br>", "");
      }
      var logo = listing.select('td.[rel="PictureSmallLogoPath"]');
      if (logo.length > 0) {
        logo = logo[0].down('.listingImage').src.replace("small", "feature");
      }
      if (address.length > 0) {
        address = address[0].down('a').innerHTML.replace("<br>", "");
        map.addMarker('marker' + id, address,
          {
            title: address + ", " + price + ", ID:" + id,
            category_name: category,
            icon_url: 'http://address.com.ua/img/key.gif',
            url: "http://address.com.ua/Listing/Listing?id=" + id,
            logo: logo
          }
        );
      };
    }

    mapHolder.mapIsLoaded = true;
    map.setZoom(10);
    mapHolder.style.display = 'block';
    return;
  }
  if (mapHolder.style.display == 'none') {
    mapHolder.style.display = 'block';
    var listings = $('listingContainerTable').rows;
    for (var i = 0; i < listings.length; ++i) {
      var listing = listings[i];
      var address = listing.select('td.[rel="Address"]');
      var id = listing.select('td.[rel="id"]');
      if (id.length > 0) {
        id = id[0].down('a').innerHTML.replace("<br>", "");
      }
      var price = listing.select('td.[rel="price"]');
      if (price.length > 0) {
        price = price[0].down('a').innerHTML.replace("<br>", "");
      }
      var logo = listing.select('td.[rel="PictureSmallLogoPath"]');
      if (logo.length > 0) {
        logo = logo[0].down('.listingImage').src;
      }
      if (address.length > 0) {
        address = address[0].down('a').innerHTML.replace("<br>", "");
        map.addMarker('marker' + id, address,
          {
            title: "#" + id + ", " + address + ", " + price,
            category_name: category,
            icon_url: 'http://address.com.ua/img/key.gif',
            url: "http://address.com.ua/Listing/Listing?id=" + id,
            logo: logo
          }
        );
      };
    };
    return;
  }
  if (mapHolder.style.display == 'block') {
    mapHolder.style.display = 'none';
  }
}



function updateMyListings() {
  $('myListingForm').request({
    method: "get",
    onSuccess: function(t) {
      $('myListingsHolder').innerHTML = t.responseText;
    },
    onLoading: function() {
      $('myListingsHolder').innerHTML = $('myListingsHolderLoading').innerHTML;
    }
  });
}

function showAddress(mapInfo, s, sgray, objManager) {
  map.removeOverlay(geoResult);
  var geocoder = new YMaps.Geocoder(mapInfo.address, { results: 200, boundedBy: map.getBounds() });
  geocoder.setStyle(null);
  YMaps.Events.observe(geocoder, geocoder.Events.Load, function() {
    if (this.length()) {
      var point = this.get(0).getGeoPoint();

      var placemark = new YMaps.Placemark(point, { style: s })
      var greyPlacemark = new YMaps.Placemark(point, { style: sgray })

      $('checker' + mapInfo.listingId).placemark = placemark;
      $('checker' + mapInfo.listingId).greyPlacemark = greyPlacemark;

      ////            map.addOverlay(geoResult);
      ////            gCollection.add(geoResult

      objManager.add(placemark);

      YMaps.Events.observe(placemark, placemark.Events.MouseOver, function() {
        this.setOptions({ hideIcon: false });
        this.openBalloon(mapInfo.address);
      });
      YMaps.Events.observe(placemark, placemark.Events.Click, function() {
        loadListing(mapInfo.listingId);
      });

      YMaps.Events.observe(greyPlacemark, greyPlacemark.Events.MouseOver, function() {
        this.setOptions({ hideIcon: false });
        this.openBalloon(mapInfo.address);
      });
      YMaps.Events.observe(greyPlacemark, greyPlacemark.Events.Click, function() {
        loadListing(mapInfo.listingId);
      });
    }
  });
}

String.prototype.trim = function() { return this.replace(/^\s+|\s+$/g, ''); }

function getCssRule(ruleName) {
  if (!document.styleSheets) return;
  var result;
  var thecss = new Array();
  if (document.styleSheets[0].cssRules)  // Standards Compliant
  {
    thecss = document.styleSheets[0].cssRules;
  }
  else {
    thecss = document.styleSheets[0].rules;  // IE
  }
  for (i = 0; i < thecss.length; ++i) {
    //alert(thecss[i].selectorText);
    if (thecss[i].selectorText)
      if (thecss[i].selectorText.toLowerCase() == ruleName.toLowerCase()) {
      result = thecss[i].style;
    }
  }
  return result;
}

function processListingPicturesButtonClick() {
  var pictures = $$('.listingImage');
  if ($("showPictureOfListing").checked) {
    for (i = 0; i < pictures.length; ++i) {
      pictures[i].style.display = "block";
    }
  } else {
    for (i = 0; i < pictures.length; ++i) {
      pictures[i].style.display = "none";
    }
  }
}

function setStatusValueByNumber(inputId, number) {
  var input = $(inputId);
  var i = 1;
  for (; i <= input.value; ++i) {
    $(input.id + "_status_" + i).src = "/img/plus.gif";
  }
  for (; i <= 5; ++i) {
    $(input.id + "_status_" + i).src = "/img/minus.gif";
  }
}

function setStatusValue(inputId, img) {
  var input = $(inputId);
  var i = 1;
  input.value = img.title;
  for (; i <= input.value; ++i) {
    $(input.id + "_status_" + i).src = "/img/plus.gif";
  }
  for (; i <= 5; ++i) {
    $(input.id + "_status_" + i).src = "/img/minus.gif";
  }
}

function setValueProposal(inputId, img) {
  var input = $(inputId);
  var i = 1;
  for (; i <= img.title; ++i) {
    $(input.id + "_status_" + i).src = "/img/plus.gif";
  }
  for (; i <= 5; ++i) {
    $(input.id + "_status_" + i).src = "/img/minus.gif";
  }
}

function removeValueProposal(inputId, img) {
  var input = $(inputId);
  var i = 1;
  for (; i <= input.value; ++i) {
    $(input.id + "_status_" + i).src = "/img/plus.gif";
  }
  for (; i <= 5; ++i) {
    $(input.id + "_status_" + i).src = "/img/minus.gif";
  }
}

StatusValue = Class.create({
  initialize: function(input) {
    this.input = input;
    this.input.id = this.input.identify();
    this.input.statusValue = this;
    this.element = "<p>"
    var i = 1;
    for (; i <= input.value; ++i) {
      this.element = this.element + "<img onmouseout='removeValueProposal(\"" + input.id + "\", this)' onmouseover='setValueProposal(\"" + input.id + "\", this)' style='cursor:pointer' onclick='setStatusValue(\"" + input.id + "\", this)' height='13' width='13' src='/img/plus.gif' id='" + input.id + "_status_" + i + "' title='" + i + "'/>"
    }
    for (; i <= 5; ++i) {
      this.element = this.element + "<img onmouseout='removeValueProposal(\"" + input.id + "\", this)' onmouseover='setValueProposal(\"" + input.id + "\", this)' style='cursor:pointer' onclick='setStatusValue(\"" + input.id + "\", this)' height='13' width='13' src='/img/minus.gif' id='" + input.id + "_status_" + i + "' title='" + i + "'/>"
    }
    this.element = this.element + "<p>"
    new Insertion.After(input, this.element);
    this.input.hide();
  }
});

StatusReadOnlyValue = Class.create({
  initialize: function(input) {
    this.input = input;
    this.input.id = this.input.identify();
    this.input.statusValue = this;
    this.element = "<p>"
    var i = 1;
    for (; i <= input.value; ++i) {
      this.element = this.element + "<img height='13' width='13' src='/img/plus.gif' />"
    }
    for (; i <= 5; ++i) {
      this.element = this.element + "<img height='13' width='13' src='/img/minus.gif' />"
    }
    this.element = this.element + "<p>"
    new Insertion.After(input, this.element);
    this.input.hide();
  }
});

var FormRequestProcessor = Class.create({
  initialize: function(formId, callback) {
    this.formId = formId;
    //TODO:add callback processing here
  },

  getForm: function() {
    return $(this.formId);
  },

  //Returns parameters from external controls. External control used has to have following mask : {form_id} + '_param_' + {paramName}
  getFormExternalParams: function() {
    var externalParams = $$('*[id^=' + this.formId + '_param_]').inject([],
      function(elements, child) {
        if (Form.Element.Serializers[child.tagName.toLowerCase()])
          elements.push(Element.extend(child));
        return elements;
      });
    var result = new Hash();
    for (var i = 0; i < externalParams.length; ++i) {
      var elem = externalParams[i];
      var elemId = elem.id.replace(this.formId + '_param_', '');
      result.set(elemId, elem.value);
    }
    return result;
  },

  submit: function() {
    if ($('additionalInput').value == $('additionalInput').defaultValue) {
      $('additionalInput').value = '';
      $('additionalInput').setDefaultValue = true;
    } else {
      $('additionalInput').setDefaultValue = false;
    }
    this.getForm().request({
      parameters: this.getFormExternalParams().toQueryString(),
      method: "get",
      contentType: "text/html",
      onSuccess: function(t) {
        $('search_result').innerHTML = t.responseText;
        hideColumns();

        if ($('additionalInput').setDefaultValue) {
          $('additionalInput').value = $('additionalInput').defaultValue;
        }


        var key = Date().toString().substring(0, 15).replace(/ /gi, '_');
        var historyObject = searchHistory.get(key);
        if (!historyObject) {
          historyObject = new Object();
        }
        var formerParams = former.getForm().serialize(true);
        var queryByValues = new Object();
        for (paramName in formerParams) {
          var valueContainer = $$('[name="' + paramName + '"]');
          if (valueContainer) {
            valueContainer = valueContainer[0];
            if (valueContainer.value) {
              var paramValue = valueContainer.value.replace(/%/gi, '').replace(/улица/gi, '');
              if (paramValue && paramValue != '') {
                queryByValues[paramName] = paramValue;
              }
            }
          }
        }
        currentTime = Date().toString().substring(16, 21).replace(/ /gi, '_');
        historyObject[currentTime] = queryByValues;
        searchHistory.put(key, historyObject);

        new Autocompleter.SelectBox('actionChooser');
        $("inputStreet").defaultValueActsAsHint();
        $("selectDistrict").defaultValueActsAsHint();
        $('additionalInput').defaultValueActsAsHint();
        $('additionalInput').defaultValue = $('additionalInput').value;
      }
    });
  }
});

function makeActiveTab(li) {
  var activeTabId = "activeTabYellow";
  var image = $(activeTabId).getElementsBySelector('img')[0];
  image.src = "/img/tabRssMonochrome.gif";
  $(activeTabId).id = "";
  li.id = activeTabId;
  image = $(activeTabId).getElementsBySelector('img')[0];
  image.src = "/img/tabRss.gif";
  $$("[name='query.PageIndex']").each(function(el) {
    el.value = 1;
  });
//  $('query.PageIndex').value = 1;
  $$("[name='query.OperationTypeRef']").each(function(el) {
    if (el.value) {
      el.value = $(activeTabId).getElementsBySelector('[rel="operationType"]')[0].down('input').value;
    }
    if (el.innerHTML) {
      el.innerHTML = li.down("a").innerHTML;
    }
  });    
//  setActiveOptionByValue($("todo"), $(activeTabId).getElementsBySelector('[rel="operationType"]')[0].down('input').value);
  return false;
}

function setActiveOptionByValue(select, optionValue) {
  optionValue = optionValue.trim();
  for (i = 0; i < select.options.length; ++i) {
    var optionText = select.options[i].value.trim();
    if (optionText == optionValue) {
      select.selectedIndex = i;
    }
  }
}

function setActiveOptionByContainer(select, optionValue) {
  optionValue = optionValue.trim();
  for (i = 0; i < select.options.length; ++i) {
    var optionText = select.options[i].innerHTML.trim();
    if (optionText == optionValue) {
      select.selectedIndex = i;
    }
  }
}

function setActiveSubItems(li) {
  for (i = 0; i < li.up().children.length; ++i) {
    var invisibleTitle = li.up().children[i].innerHTML;
    $$('[title="' + invisibleTitle + '"]').each(function(element) {
      element.hide();
      element.down().removeClassName("subActive");
    });
    $$('[title="' + invisibleTitle + '"]')[0].down().addClassName("subActive");
  }
  var activeSubItemsTitle = li.innerHTML;
  $$('[title="' + activeSubItemsTitle + '"]').each(function(element) {
    element.style.display = "";
  });
  currentDialog.hide();
  var id = li.up("[class='popupBoxModel']").id.replace("Dialog", "");
  $(id).innerHTML = li.innerHTML;
  return false;
}

function pageIndexControl() {
  return $(currentSearchFormId).select('[name="query.PageIndex"]')[0];
}


function pageIndex() {
  return (pageIndexControl().value * 1);
}

function goToNextPage() {
  goToPage(pageIndex() + 1);
}

function goToPrevioustPage() {
  goToPage(pageIndex() - 1);
}

function goToPage(pageIndex) {
  pageIndexControl().value = pageIndex;
  searchListing();
}

function setDateFrom(fromDate) {
  $(currentSearchFormId).select('[name="query.FromDate"]')[0].value = fromDate;
  searchListing();
}

function setPageSize(pageSize) {
  $(currentSearchFormId).select('[name="query.PageSize"]')[0].value = pageSize;
  searchListing();
}

function setActiveListingType(anchor) {
  var listingType = anchor.innerHTML;
  var listingTypeCode = anchor.down("input").value;

  var select = $('listingGroupSelector');
  $$('[href="#search"]').each(function(el) {
    el.removeClassName("subActive");
  });
  
  $$('[name="query.PageIndex"]').each(function (pi) {
    pi.value = 1;
  });
  
  
  $$('[name="query.ListingTypeRef"]').each(function(el) {
    if (el.innerHTML) {
      el.innerHTML = listingType;
    };
    if (el.value) {
      el.value = listingTypeCode;
    };
  });
  
    
  anchor.addClassName("subActive");    

  return false;
}

function getRowIndexForColumnPositioner(img) {
  return img.up('tr').rowIndex;
}

function exchangeListingColumns(colRel1, colRel2) {
  var th1 = $('listingContainerTable').down('th.[rel="' + colRel1 + '"]');
  var th2 = $('listingContainerTable').down('th.[rel="' + colRel2 + '"]');
  var thBanner = th1.innerHTML;
  th1.innerHTML = th2.innerHTML;
  th2.innerHTML = thBanner;
  var buffer;
  var tds1 = $('listingContainerTable').select('td.[rel="' + colRel1 + '"]');
  var tds2 = $('listingContainerTable').select('td.[rel="' + colRel2 + '"]');
  for (var i = 0; i < tds1.length; ++i) {
    buffer = tds1[i].innerHTML;
    tds1[i].innerHTML = tds2[i].innerHTML;
    tds2[i].innerHTML = buffer;
  }
}

function formRequest(form) {
  if (form && validateForm(form)) {
    form.request({
      //      method: "get",
      onSuccess: function(t) {
        alert(t.responseText);
        if (currentDialog) {
          currentDialog.hide();
        }
        if (elementToHide && elementToHide.hide) {
          elementToHide.hide();
        }
      },
      onFailure: function(t) {
        alert('Произошла ошибка');
      }
    });
  }
}

function moveListingColumnDown(img) {
  var colRel1 = img.getAttribute('rel');
  var colRel2 = img.up('tr').next().down('input.[type="checkbox"]').getAttribute('rel');
  exchangeListingColumns(colRel1, colRel2);
  var tr1 = img.up('tr');
  var tr2 = tr1.next();
  var buffer = tr1.innerHTML;
  tr1.innerHTML = tr2.innerHTML;
  tr2.innerHTML = buffer;
}

function moveListingColumnUp(img) {
  var colRel1 = img.getAttribute('rel');
  var colRel2 = img.up('tr').previous().down('input.[type="checkbox"]').getAttribute('rel');
  exchangeListingColumns(colRel1, colRel2);
  var tr1 = img.up('tr');
  var tr2 = tr1.previous();
  var buffer = tr1.innerHTML;
  tr1.innerHTML = tr2.innerHTML;
  tr2.innerHTML = buffer;
}

//function moveListingColumnDown(img) {
//  var cellIndex = getRowIndexForColumnPositioner(img);
//  var settingsTable = img.up('table');
//  var settingItemInnerHtml = settingsTable.rows[cellIndex].innerHTML;
//  settingsTable.deleteRow(cellIndex);
//  settingsTable.insertRow(cellIndex + 1);
//  settingsTable.rows[cellIndex + 1].innerHTML = settingItemInnerHtml;

//  if (cellIndex == 0) {
//    settingsTable.rows[0].down('[title="MoveUp"]').style.display = 'none';
//    settingsTable.rows[1].down('[title="MoveUp"]').style.display = '';
//  }


//  if (cellIndex == settingsTable.rows.length - 2) {
//    settingsTable.rows[settingsTable.rows.length - 1].down('[title="MoveDown"]').style.display = 'none';
//    settingsTable.rows[settingsTable.rows.length - 2].down('[title="MoveDown"]').style.display = '';
//  }

//  cellIndex++;
//  var rows = $('listingContainerTable').rows;

//  for (i = 0; i < rows.length; ++i) {
//    var cellInnerHTML = rows[i].cells[cellIndex].innerHTML;
//    rows[i].deleteCell(cellIndex);
//    rows[i].insertCell(cellIndex + 1);
//    if (i == 0) {
//      rows[i].cells[cellIndex + 1].addClassName('tablelistingTableth');
//    }
//    rows[i].cells[cellIndex + 1].innerHTML = cellInnerHTML;
//  }
//}

//function moveListingColumnUp(img) {
//  var cellIndex = getRowIndexForColumnPositioner(img);

//  var settingsTable = img.up('table');
//  var settingItemInnerHtml = settingsTable.rows[cellIndex].innerHTML;
//  settingsTable.deleteRow(cellIndex);
//  settingsTable.insertRow(cellIndex - 1);
//  settingsTable.rows[cellIndex - 1].innerHTML = settingItemInnerHtml;

//  if (cellIndex == 1) {
//    settingsTable.rows[0].down('[title="MoveUp"]').style.display = 'none';
//    settingsTable.rows[1].down('[title="MoveUp"]').style.display = '';
//  }

//  if (cellIndex == settingsTable.rows.length - 1) {
//    settingsTable.rows[settingsTable.rows.length - 1].down('[title="MoveDown"]').style.display = 'none';
//    settingsTable.rows[settingsTable.rows.length - 2].down('[title="MoveDown"]').style.display = '';
//  }

//  cellIndex++;

//  var rows = $('listingContainerTable').rows;
//  for (i = 1; i < rows.length; ++i) {
//    var cellInnerHTML = rows[i].cells[cellIndex].innerHTML;
//    rows[i].deleteCell(cellIndex);
//    rows[i].insertCell(cellIndex - 1);
//    if (i == 0) {
//      rows[i].cells[cellIndex + 1].addClassName('tablelistingTableth');
//    }
//    rows[i].cells[cellIndex - 1].innerHTML = cellInnerHTML;
//  }
//}

function changeRoomCountSelection(img) {
  if (!img.checked) {
    img.oSrc = img.src.replace("Over", "Pressed");
    $(img.id + "CheckBox").checked = true;
    img.checked = true;
  } else {
    img.oSrc = img.src.replace("Over.gif", ".gif");
    $(img.id + "CheckBox").checked = false;
    img.checked = false;
  }
}

function showHistorySearch() {
  $('listingHolder').style.display = 'none';
  $('historyResults').style.display = 'block';
  var keys = searchHistory.getKeys();
  for (var i = 0; i < keys.length; ++i) {
    var key = keys[i];
    var headingTemplate = new Template('<h4>#{searchDate}</h4><ul>#{historyItems}</ul>');
    var templateParams = { searchDate: key.replace(/_/gi, ' ') }
    //$('searchHistoryMessages').innerHTML = '<h4>' + key.replace(/_/gi, ' ') + '</h4>' + $('searchHistoryMessages').innerHTML;
    var historyItems = '';
    var searchDate = searchHistory.get(key);
    for (searchTime in searchDate) {
      var searchItemTimeTemplate = new Template('<li><span class="time">#{time}</span></li><div><a href="#" class="historyRssIcon"><img src="img/greenRss.png" /></a><a href="#">#{searchQuery}</a></div>');
      var query = '';
      for (queryParam in searchDate[searchTime]) {
        query = query + ', ' + searchDate[searchTime][queryParam];
      }
      query = query.substring(2, query.length);
      var historyItemData = { time: searchTime, searchQuery: query };

      historyItems = searchItemTimeTemplate.evaluate(historyItemData) + historyItems;
    }
    templateParams = { searchDate: templateParams.searchDate, historyItems: historyItems };
    var historyPart = headingTemplate.evaluate(templateParams);
    $('searchHistoryMessages').innerHTML = historyPart;
  }

  //$('searchHistoryMessages').innerHTML = + $('searchHistoryMessages').innerHTML;

  hideNavigationControlsAll();
}



function setAllListingsSelection() {
  $$('[rel="listingId"]]').each(function(element) {
    element.checked = $('selectAllListings').checked;
  });
}

//function getWantedPrefix(form) {
//  var actionName = form.action;
//  actionName = actionName.replace(new RegExp("/", "g"), "_");
//  actionName += "_parameter_";
//  return actionName;
//}

//function buildParameters(prefix_id) {
//  var elems = $$('*[id^=' + prefix_id + ']');
//  var hash = new Hash();
//  elems.each(function(elem) {
//    hash.set(elem.name, elem.value);
//  });
//  return hash.toQueryString();
//}

//function doRequest(formElement) {
//  var prefix = getWantedPrefix(formElement);
//  var pars = buildParameters(prefix);
//  alert(pars);
//  //    formElement.request({
//  //        parameters: pars,
//  //        contentType: "text/html",
//  //        onSuccess: function(t) {
//  //            $('formResult').innerHTML = t.responseText;
//  //        }
//  //    });
//  return false;
//} 