﻿var spbest_ver = '20101227-2';

var spbestcfg = {
    'api' : {
        'countryTypeName': 'Country',
        'commSaleTypeName': 'CommercSale',
        'commRentTypeName': 'CommercRent',
        'sellTypeName': 'Second',
        'rentTypeName': 'Rent'
    },
    'countryTypeName': 'country',
    'commSaleTypeName': 'commercsale',
    'commRentTypeName': 'commercrent',
    'saleTypeName': 'second',
    'rentTypeName': 'rent'
};

/* jQuery plugins */
jQuery.fn.checkIsInteger = function( ) {
    var minPriceStrValue = this.val();
    if ( minPriceStrValue.length !== 0 && ! minPriceStrValue.match(/^\d+$/) ) {
        this.addClass('ui-state-error');
        return false;
    } else {
        if ( this.hasClass('ui-state-error') ) {
            this.removeClass('ui-state-error');
        }
        return true;
    }
};

// Открывает картинку в новом окне (для старой версии листингов (до CMS)
function enlarge(what, width, height) {
    www = "" + what;
    width = width + 20;
    height = height + 20;
    window.open(www, 'xxx', 'width=' + width + ',height=' + height + ',resizable=yes,scrollbars=no,top=50,left=50');
}

function show(value) {
    if (value == "0") {
        document.getElementById('0').style.display = '';
        document.getElementById('3').style.display = 'none';
    } else {
        document.getElementById('3').style.display = '';
        document.getElementById('0').style.display = 'none';
    }
}

// Получить выделенный текст
function getSelText() {
    var txt = '';
    if (window.getSelection) {
        txt = window.getSelection();
    } else if (document.getSelection) {
        txt = document.getSelection();
    } else if (document.selection) {
        txt = document.selection.createRange().text;
    }
    return txt;
}

// Сообщить об ошибке на сайте
function SubmitError() {
    var txt = getSelText();
    if (txt == '') {
        alert("Вы должны выделить текст!");
        return false;
    } else {
        document.suberr["Вопрос"].value = txt;
        document.suberr.submit();
    }
}


function sortArrayByProperty( propertyName ) {
	return function( a, b ) {
		if ( a[propertyName] > b[propertyName] )
			return 1;
		else if ( a[propertyName] < b[propertyName] )
			return -1;
		else
			return 0;
	};
}

function sortListingsDefault( a, b ) {
	// by sale rooms
	if ( a.sale_rooms && b.sale_rooms ){
		var sale_rooms_a = a.sale_rooms;
		var sale_rooms_b = b.sale_rooms;
		if (sale_rooms_a === 0 ) sale_rooms_a = Number.MAX_VALUE;
		if (sale_rooms_b === 0 ) sale_rooms_b = Number.MAX_VALUE;
		if (sale_rooms_a > sale_rooms_b) return 1;
		if (sale_rooms_a < sale_rooms_b) return -1;
	}

	if ( a.sale_rooms && !(b.sale_rooms) ) return -1;
	if ( !(a.sale_rooms) && b.sale_rooms ) return 1;

	var roomsA = a.rooms;
	var roomsB = b.rooms;
	if ( roomsA > roomsB ) return 1;
	if ( roomsA < roomsB ) return -1;
	if ( a.user_location > b.user_location ) return 1;
	if ( a.user_location < b.user_location ) return -1;

	return 0;
}

function showListings( data ) {
	var min_price = 0, max_price = 15000, min_square = 0, max_square = 40, min_rooms = 1, max_rooms = 3;

	if ( data.length > 0 ) {
		for (var i in data) {
			if ( !data[i].user_location ) continue;

			// Картинка
			var imgCell = jQuery('<td></td>');
			if (data[i].thumbnail) {
				var img = jQuery('<img />').attr('src',data[i].thumbnail);
				if ( data[i].user_location ) {
					img.attr('alt', data[i].user_location).attr('title', data[i].user_location);
				}
				if (data[i].link) {
					var imgLink = jQuery('<a></a>')
						.attr('href',data[i].link)
						.attr('target','_blank')
						.append(img);
					imgCell.append(imgLink);
				} else {
					imgCell.append(img);
				}
			} else {
				imgCell.text( jQuery('#lang_no_photo').text() );
				imgCell.css( 'text-align', 'center' );
			}

			var row = jQuery('<tr></tr>').append(imgCell);

			// Адрес
			row.append(
				jQuery('<td></td>').append(
					jQuery('<a></a>')
						.text(data[i].user_location)
						.attr('href', data[i].link)
						.attr('target','_blank')
				)
			);

			// Тип коммерческой недвижимости
			if (data[i].type === 'CommercSale' || data[i].type === 'CommercRent') {
				var typeName = data[i].commTypeShortName;
				if (data[i].stand_alone) {
					typeName = ''.concat(typeName, ' (', jQuery(document).data( 'lang.commtype_stand_alone' ), ')' );
				}
				row.append(jQuery('<td></td>').text(typeName).css('text-align', 'center'));
			}

			// Комнат
			if ( data[i].type === 'Second' || data[i].type === 'Rent' ) {
				var rooms_text = '';
				if ( data[i].rooms ) {
					if (data[i].sale_rooms != 0 && jQuery(document).data('listings_type') != 'Rent') {
						rooms_text = ''.concat(data[i].sale_rooms, '/', data[i].rooms);
					} else {
						rooms_text = data[i].rooms;
					}
					if ( data[i].rooms < min_rooms ) min_rooms = data[i].rooms;
					if ( data[i].rooms > max_rooms ) max_rooms = data[i].rooms;
				}
				row.append(jQuery('<td></td>').text(rooms_text).css('text-align', 'center'));
			}

            // Площадь участка (только загород)
            if ( data[i].type === spbestcfg.api.countryTypeName ) {
                var text = data[i].sq_land;
                row.append(jQuery('<td></td>').text( text ));
            }

			// S (не нужно для загорода)
            if ( data[i].type !== spbestcfg.api.countryTypeName ) {
                row.append(jQuery('<td></td>').text(data[i].sq_all).css('text-align', 'center'));
                if ( data[i].sq_all < min_square ) min_square = data[i].sq_all;
                if ( data[i].sq_all > max_square ) max_square = data[i].sq_all;
            }

			// Price
			row.append(jQuery('<td></td>').text(data[i].price).css('text-align', 'center'));
			if ( data[i].price < min_price ) min_price = data[i].price;
			if ( data[i].price > max_price ) max_price = data[i].price;


			// Price per m^2
			if (data[i].type === 'CommercSale' || data[i].type === 'CommercRent') {
			    var mult = data[i].type === 'CommercSale' ? 1000 : 1;
				var text = (data[i].price_psqm) ? Math.floor( data[i].price_psqm / mult ) :  '';
				row.append( jQuery('<td></td>').text(text).css('text-align', 'center') );
			}

			jQuery('#listings_list > tbody').append(row);
		}
		jQuery('#listings_list').show();
		jQuery('#listings_list_nothing').hide();
		jQuery('#listings_list > tbody > tr:odd').addClass('odd_row');
	} else {
		jQuery('#listings_list_nothing').show();
		jQuery('#listings_list').hide();
	}

	return {'min_price':min_price, 'max_price':max_price,
			'min_rooms':min_rooms, 'max_rooms':max_rooms,
			'min_square':min_square, 'max_square':max_square
	};
}


function setupListingsShow( items ) {
	items.sort(sortListingsDefault);
	jQuery(document).data('items', items );

	showListings(items);
	jQuery('#listings_list_loading').hide();
	filterItems();
}


/**
	Обнуление параметров поиска.
*/
function reset_search() {
	jQuery('#has_photo').attr('checked', false);
	jQuery('#min_price_box, #max_price_box, #min_square_box, #max_square_box, ' +
		'#min_rooms_box, #max_rooms_box, #district-chooser').val( '' );
}


/**
    Проверяет, доступен ли поиск объектов для данной страницы
*/
function isSearchFormAvailable() {
    var value = $('#search_form').length !== 0
        && ( $(document).data('listings_type') === spbestcfg.saleTypeName
            || $(document).data('listings_type') === spbestcfg.rentTypeName
        );
    return value;
}


/**
	Инициализирует элементы управления фильтрацией.
*/
function init_search( ) {
	if (!isSearchFormAvailable()) return;
	jQuery('#search_button').button();
	jQuery('#reset_search_button').button();

	// Init search events only for old style category view.
	if (jQuery('#listings_list').length > 0 && !jQuery(document).data('listings_type_id') ) {
		jQuery('#search_button').click( filterItems );
		jQuery('#reset_search_button').click( reset_search );

		jQuery('#second_type_group').buttonset();
		if ( $('#district-chooser').length > 0 ) {
			$.getJSON('/api/' + $(document).data('lang') + '/district/1/', {'r': Math.floor(Math.random()*4096) }  , function(data){

				var chooser = $('#district-chooser');
				var anyDistrict = $('#district-chooser > option[value="any"]').clone().val('');
				chooser.empty();
				chooser.append(anyDistrict);
				for ( var i in data ) {
					console.log(data[i].id);
					chooser.append( '<option value="' + data[i].id + '" class="anthony">'+ data[i].name +'</option>' );
				}
				chooser.removeAttr('disabled');
			} );
		}
	}
}

function is_room( listing ) {
	return Number(listing.sale_rooms) > 0;
}

function filterItems() {
	// prevent running if not possible
	if ( !isSearchFormAvailable() ) return;

    /* Делать И с check надо после вызова функции, чтобы после нахождения ошибки, остальные тоже проверялись. */
    var priceIsValid = $('#min_price_box').checkIsInteger();
    priceIsValid = $('#max_price_box').checkIsInteger( ) && priceIsValid;
    var squareIsValid = $('#min_square_box').checkIsInteger();
    squareIsValid = $('#max_square_box').checkIsInteger( ) && squareIsValid;
    var roomsIsValid = $('#min_rooms_box').checkIsInteger();
    roomsIsValid = $('#max_rooms_box').checkIsInteger( ) && roomsIsValid;
    if ( priceIsValid ) { $('#price-format-error').hide(); } else { $('#price-format-error').show(); }
    if ( squareIsValid ) { $('#square-format-error').hide(); } else { $('#square-format-error').show(); }
    if ( roomsIsValid ) { $('#rooms-format-error').hide(); } else { $('#rooms-format-error').show(); }
    if ( !priceIsValid || !squareIsValid || !roomsIsValid ) {
        $('#search-form-error-row').show();
        return;
    } else {
        $('#search-form-error-row').hide()
    }

	// цена
	var minPrice = Math.max( jQuery('#min_price_box').val(), 0 );
	var maxPrice = jQuery('#max_price_box').val();
	if (!maxPrice) { maxPrice = Number.MAX_VALUE; }

    var secondTypePredicate = function(n){ return true; };
    if ( $('#second_type_group').length > 0 ) {
        var second_type = jQuery('#second_type_group label[aria-pressed=true]').attr('for');

        secondTypePredicate = function(n) {
            var r = is_room(n) && (second_type == 'second_type_room');
            var f = !is_room(n) && (second_type == 'second_type_flat');
            return r || f;
        }
    }

	// Фото
	var has_photo = jQuery('#has_photo').attr('checked');

	// Комнаты
	var minRooms = Math.max( jQuery('#min_rooms_box').val(), 0 );
	var maxRooms = jQuery('#max_rooms_box').val();
	if (!maxRooms) { maxRooms = Number.MAX_VALUE; }

	// Площадь
	var minArea = Math.max( jQuery('#min_square_box').val(), 0 );
	var maxArea = jQuery('#max_square_box').val();
	if (!maxArea) { maxArea = Number.MAX_VALUE; }

	// Район
	var district = $('#district-chooser').length > 0 ? parseInt($('#district-chooser').val()) : 0;

	var items = jQuery(document).data('items');
	var filtered = jQuery.grep(items, function(n, i){
		var minp = n.price >= minPrice;
		var maxp = n.price <= maxPrice;
		/*var r = is_room(n) && (second_type == 'second_type_room');
		var f = !is_room(n) && (second_type == 'second_type_flat');*/
		var foto = n.thumbnail || !has_photo;

		var roomsPred = (n.rooms >= minRooms) && (n.rooms <= maxRooms);
		var areaPred = (n.sq_all >= minArea) && (n.sq_all <= maxArea);
		var districtPredicate = (!district) || district === n.district;

		var res = minp && maxp && secondTypePredicate(n)/* (r || f )*/ && foto && roomsPred && areaPred && districtPredicate;
		return res;
	});

	jQuery('#listings_list > tbody').empty();
	showListings( filtered );
}


(function(){
// jQuery.noConflict();
jQuery(document).ready(function() {
    var isRusLanguage = !location.pathname.match( /^\/eng\// ) && !location.pathname.match( /lang=eng/ );
    if (isRusLanguage) {
        $(document).data('lang', 'rus');
    } else {
        $(document).data('lang', 'eng');
    }

    if (jQuery('#gMap').length > 0) {
        gMapLoad();
		gMapsShowAddress(true);
    }

	/* Lightbox */
	if (jQuery.fn.lightBox) {
        // Attention to extensions. Original files are GIF and mine are PNG!
        var imgBase = '/images/lightbox/',
            closeBtn = imgBase + (isRusLanguage ? 'close.png' : 'close_en.gif'),
            prevBtn = imgBase + (isRusLanguage ? 'prev.png' : 'prev_en.gif'),
            nextBtn = imgBase + (isRusLanguage ? 'next.png' : 'next_en.gif'),
            txtImage = isRusLanguage ? 'Изображение' : 'Image',
            txtOf = isRusLanguage ? 'из' : 'of';
        jQuery('a.lightbox').lightBox({
        	imageLoading: imgBase + 'loading.gif',
        	imageBtnClose: closeBtn,
        	imageBtnPrev: prevBtn,
        	imageBtnNext: nextBtn,
        	imageBlank: imgBase + 'blank.gif',
        	txtImage: txtImage,
        	txtOf: txtOf
        });
    }

    if (jQuery('#listings_list').length > 0 && !jQuery(document).data('listings_type_id') ) {
		jQuery('#listings_list').hide();
		var type = jQuery(document).data('listings_type');
		var p = {'type': type, 'lang': jQuery(document).data('language') };
        jQuery.getJSON('/api/' + p.lang + '/' + p.type + '/', { r: Math.floor(Math.random()*100000) }, setupListingsShow );
    }
	init_search();

    /* Setting up transparent items highlight */
    var hoverInHandler = function(){
        var t = $(this);
        /* Store value if there is none. */
        if ( !t.data('opacity') ) { t.data('opacity', t.css('opacity') ); }
        t.animate( {'opacity': 1.0 }, 'fast' );
    };
    var hoverOutHandler = function(){
        var t = $(this);
        t.animate( {'opacity': t.data('opacity') }, 'fast' );
    };
    $('.opaque-on-hover').hover( hoverInHandler, hoverOutHandler );

    if ( $('div.staff-agents-view-block').length > 0 ) {
    var agentsApiAddress = '/api/' + (isRusLanguage?'rus':'eng') + '/user/onlyAgents/';
        $.getJSON(agentsApiAddress, {'r':Math.floor(Math.random()*4096)}, function(data) {
            var list = $('<ul class="tab inlines" id="staff"></ul>');
            for (var i in data) {
                var item = $('<li></li>');
                var agentLink = $('<a></a>');
                agentLink.attr('href', data[i].webAddress);
                var opaqueBlock = $('<div class="opaque-on-hover"></div>');
                opaqueBlock.css('background-image', 'url('+data[i].avatar + ')');
                var vcard = $('<div class="vcard"></div>');
                vcard.append(['<div class="family-name">',data[i].surname,'</div>'].join(''));
                vcard.append(['<div class="given-name">',data[i].name,' ',
                              (isRusLanguage ? data[i].fatherName : '') ,'</div>'].join(''));
                vcard.append(['<div class="role">',data[i].position,'</div>'].join(''));
                opaqueBlock.append(vcard);
                agentLink.append(opaqueBlock);
                item.append(agentLink);
                list.append(item);
            }
            $('div.staff-agents-view-block')
                .show()
                .append(isRusLanguage?'<h1>Агенты</h1>':'<h1>Agents</h1>')
                .append(list);
            $('.staff-agents-view-block .opaque-on-hover').hover( hoverInHandler, hoverOutHandler );
        } );
    }

});
})();

