// browser detection function

(function($) {
  var userAgent = navigator.userAgent.toLowerCase();
  var ie_version = -1;
  if (navigator.appName == 'Microsoft Internet Explorer') {
   var re = new RegExp("msie ([0-9]{1,}[\.0-9]{0,})");
   if (re.exec(userAgent) != null)
   ie_version = parseFloat(RegExp.$1);
  }
  $.browser = {
    version: (ie_version>-1)?ie_version:(userAgent.match( /.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/ ) || [0,'0'])[1],
    safari: /webkit/.test( userAgent ),
    opera: /opera/.test( userAgent ),
    msie: /msie/.test( userAgent ) && !/opera/.test( userAgent ),
    mozilla: /mozilla/.test( userAgent ) && !/(compatible|webkit)/.test( userAgent )
  };
})(jQuery);

cfg_slider = {
	"price": {
        "min": 0, 
        "max": 550,
        "line": ["0","&nbsp;","110","&nbsp;","220","&nbsp;","330","&nbsp;","440","&nbsp;",">550&nbsp;тыс.&nbsp;у.е."],
        "values": [0, 550]
    },
	"dist": {
        "min": 0, 
        "max": 30,
        "line": ["0","&nbsp;","5","&nbsp;","10","&nbsp;","15","&nbsp;","20","&nbsp;","25","&nbsp;",">30&nbsp;км"],
        "values": [0, 30]
    }
};

color_map = {
    0:{"marker": "lightbluePoint", "web": "#ADD8E6"},
    1:{"marker": "whitePoint", "web": "#FFFFFF"},
    2:{"marker": "greenPoint", "web": "#008000"},
    3:{"marker": "redPoint", "web": "#FF0000"},
    4:{"marker": "yellowPoint", "web": "#FFFF00"},
    5:{"marker": "bluePoint", "web": "#0000FF"},
    6:{"marker": "orangePoint", "web": "#FFA500"},
    7:{"marker": "greyPoint", "web": "#808080"},
    8:{"marker": "pinkPoint", "web": "#FFC0CB"},
    9:{"marker": "darkorangePoint", "web": "#FF8C00"},
    10:{"marker": "violetPoint", "web": "#EE82EE"}
}
is_areas_loaded = false;
applyZagorodMode = false;
cotteges_only = true;
flat_placemark = '';

function setPlaceLink(map) {
    typeConverter = new TypeConverter();
    var url = "http://" + siteurl + "/" + path + "/" +
        "?l=" + typeConverter.typeToName(map.getType()) +
        "&ll=" + map.getCenter().toString() +
		"&spn=" + map.getBounds().getSpan().toString(6);    
    $("#placelink_url").attr("value", url);
    $("#placelink_site").attr("value", '<a href="' + url + '">Посмотреть на Яндекс картах</a>');        
    $("#placelink_print").attr("href", url += "&print=1");
}


function TypeConverter () {

    // Доступные типы карты
    var types = [YMaps.MapType.MAP, YMaps.MapType.SATELLITE, YMaps.MapType.HYBRID],

    // Имена карт
    names = ["map", "sat", "hyb"];

    // Возвращает имя карты по ее типу
    this.typeToName = function (type) {
        return names[valid(YMaps.jQuery.inArray(type, types))];
    };

    // Возвращает тип карту по имени
    this.nameToType = function (name) {
        return types[valid(YMaps.jQuery.inArray(name, names))];
    };

    // Проверяет правильность полученного индекса
    function valid (index) {
        return (index == -1) ? 0 : index;
    }
}


function setFilterParams(init, tpl) {
	var params = [];
	
    if (true == tpl) params.push("tpl=true");
	if (false == init){
		for (var f in cfg_slider) {
			params.push(f + "_from=" + $("#" + f + "_from").val());
			if (($("#" + f + "_to").val()).substr(0,1) != '>') {
				params.push(f + "_to=" + $("#" + f + "_to").val());
			}
		}
        var dir_ids = [];
        if ($("#directions > div.current").length > 0) {
            $("#directions > div.current").each(function(i){
                dir_ids[i] = $(this).attr("id").replace("direction_", "");
            });
        }
        if ($("#custom_select").val() != '' && $("#custom_select").val() != 0 && $("#custom_select").val() != null) 
        {
            dir_ids = [];
            dir_ids[0] = $("#custom_select").val();
        }
        if (dir_ids.length > 0) params.push("directions=" + dir_ids.join(","));
	}
    if (true == tpl) {
        params.push("show_all=" + $("#pager_show_all").attr("value"));
        params.push("page_n=" + $("#page_n").attr("value"));
    } else {
        // show all markers
        params.push("show_all=1");
        params.push("page_n=1");
    }  
	params.push("subtype=" + $("#subtype").attr("value"));
	
	var date = new Date(); 
	params.push("dt=" + date.getUTCMilliseconds());
    
    return params.join("&"); 
}

function filterList(init, showResults, extra_params, skip_map, extra_params2)
{
	if (showResults)
		$("#page_n").attr("value", "1");
	var params = setFilterParams(init, false);
    if (extra_params != undefined) {
        params += '&' + extra_params;
        ajax_handler = '/pub/objects.json.php';
        cotteges_only = false;
    }
    else ajax_handler = '/pub/buildings.json.php';

    if (false == skip_map)
    {
        $.ajax({
            type: "GET",
            cache: false,
            dataType: "json",
            url: relpath + ajax_handler + '?' + params,
            success: function(d) {
                data = d;
                if (true !== is_areas_loaded && true == showResults) appendAreas(data["Areas"]);
                map.removeAllOverlays();
                addMarkers(data, cotteges_only); 
            }
        }); 
    }
    if (true == showResults) getHtml(init, extra_params2);    
}

function getHtml(init, extra_params2) {
	var params = setFilterParams(init, true);
    if (extra_params2 != undefined) params += '&' + extra_params2;
	$.ajax({
		type: "GET",
		cache: false,		
		url: relpath + '/pub/buildings.json.php?p='+is_print+'&' + params,
		success: function(d) {
			$("#c_list").empty();
            $("#c_list")[0].innerHTML = d;
			initPager(); 
            initPrint();
		}
	});		
}


function addMarkers(data, cotteges_only) {
	var directions_size = data["Areas"].length;
	var directions = new Array(directions_size);
	for (var i = 0; i < directions_size; i ++) {
		var id = data["Areas"][i]["id"];
		directions[id] = color_map[i]["marker"];
	}
	var items_size = data["items"].length;
    var items = data["items"];
    var is_opened = 0;
	for (var i = 0; i < items_size; i ++) {
        
        
        
		// apply marker type based on build_type
		var placemark;
        var count = 1;
        var count_hint = '';
        if (items[i]['n'] != undefined) count = items[i]['n'];
		switch(items[i]["build_type"])
		{
			case 'view_cotteges': 
			    if (cotteges_only == true)
				   placemark = addCottedgeMarker(items[i], directions);
			    else {
                    if (items[i]['coordinates2'] == 0 || items[i]['coordinates2'] == '') {
                        addGeoCottedgeMarkerWithTpl(items[i], directions, data)
                    } else {
                        addCottedgeMarkerWithTpl(items[i], directions, data);
                    }
			   }
            break;
                
			case 'newbuilding':
				placemark = addNewbuildingMarker(items[i], directions);
				if (count > 1) placemark.setIconContent(count);
            break;			
                
           
			case 'view_flats':
            case 'view_eflats':
                if (items[i]['coordinates2'] == 0 || items[i]['coordinates2'] == '') {
                    addGeoFlatMarker(items[i], directions, data)
                } else {
                    addFlatMarker(items[i], directions, data);
                }
	        break;  

			case 'rent_elit':
                if (items[i]['coordinates2'] == 0 || items[i]['coordinates2'] == '') {
                    addGeoRenteliteMarker(items[i], directions, data)
                } else {
                    addRenteliteMarker(items[i], directions, data);
                }            
				//placemark = addRenteliteMarker(items[i], directions);
				//if (count > 1) placemark.setIconContent(count);
            break;  
			
			case 'rent_flats':
				addGeoRentFlatsMarker(items[i], directions, data);
            break; 			

			case 'comm_building':
				placemark = addCommbuildingMarker(items[i], directions);
				if (count > 1) placemark.setIconContent(count);
            break;    

			case 'comm_arenda':
				placemark = addCommArendaMarker(items[i], directions);
				if (count > 1) placemark.setIconContent(count);
            break; 
			
			case 'comm_dolevoe':
            case 'comm_prodaja':
				placemark = addCommdolevoeMarker(items[i], directions);
				if (count > 1) placemark.setIconContent(count);
            break; 

			case 'sproj':
				placemark = addSuperprojectMarker(items[i], directions);
				if (count > 1) placemark.setIconContent(count);
            break;             
			
			case 'office':
				placemark = addOfficeMarker(items[i], directions);
	        break;
			
			case 'settlement':
				var titleHtml = items[i]['name'];
				if (count > 1) titleHtml += ' (' + count + ')';
				placemark = addSettlementMarker(items[i], directions);
				placemark.setIconContent(titleHtml);
            break;
		}
        if (cotteges_only == true)
            map.addOverlay(placemark);
		else if (items[i]["build_type"] != 'view_flats' && items[i]["build_type"] != 'view_eflats' && items[i]["build_type"] != 'rent_elit' && items[i]["build_type"] != 'view_cotteges')
        {
            map.addOverlay(placemark);
            if (code != -1 && $.inArray(code, items[i]["keys"]) != -1 && items[i]["build_type"] == data["main"]) {
                placemark.openBalloon();
            }
            
            if (code == -1 && items[i]["build_type"] == data["main"] && map.getBalloon() == null) {
                placemark.openBalloon();
            }               
        }
	}
}

function addCottedgeMarker(oneitem, directions) {
	
		 if (typeof(directions[direction_id]) !== undefined) {
		    var objlink = (applyZagorodMode === true) ? zagpath + oneitem["unid"]  : relpath +'/buy/cotteges/cottege_one/code=' + oneitem["code"]; 
			 
            var direction_id = oneitem["direction_id"];
            var marker_color = "default#" + directions[direction_id];
            var point = new YMaps.GeoPoint(oneitem["country_x2"], oneitem["country_y2"]);
            var placemark = new YMaps.Placemark(point, {style: marker_color, hasHint: true});
            // add hint
            var placemarkHtml = oneitem["town_name"] + ", " + oneitem["object_type"];
            if (oneitem["price"] != 0) placemarkHtml += ", " + oneitem["price"] + " у.е.";
            placemark.setHintContent(placemarkHtml);
            // add balloon
            var content = '';
            content += '<a target="_blank" href="' + objlink + '/">';
            content += '<img src="' + relpath +'/upload/view_cotteges/thumbs/img_' + oneitem["code"] + '_main.jpg" width="134" onError="return loadNoImage(this)">';
            //content += '<img src="' + relpath + '/images/spacer.gif" />';
            content += '</a><br />';
            if ('' != oneitem["town_name"]) {
                //if (110 != oneitem["direction_id"]) content += '<a target="_blank" href="' + relpath +'/buy/cotteges/settlement/code=' + oneitem["town_id"] + '/">';
                content += oneitem["town_name"];
                //if (110 != oneitem["direction_id"]) content += '</a>'; 
                content += '<br />'; 
            }
            if ('' != oneitem["direction_name"]) {
                if (110 == oneitem["direction_id"]) 
                {
                    content += '<a target="_blank" href="' + objlink + '/">';
                    content += oneitem["street_name"];
                    if (oneitem["house_number"] != 0) content += oneitem["house_number"];
                    content += '</a><br />';                    
                }
                else content += oneitem["direction_name"] + ' направление<br />';
            }
	        content += '<a target="_blank" href="' + objlink + '/">';
            content += oneitem["object_type"] + '</a><br />';
            if (0 != oneitem["area_total"]) content += oneitem["area_total"] + ' кв.м <br />';
            if (0 != oneitem["area_ground"]) content += oneitem["area_ground"] + ' сот.<br />';
            if (0 != oneitem["price"]) content += '<span class="f16 c-red">' + oneitem["price"] + ' у.е.</span>';
            placemark.description = content;
			return placemark;
		}
}

function addCottedgeMarkerWithTpl(oneitem, directions, data) {
	var direction_id = oneitem["direction_id"];
	var marker_color = "default#" + directions[direction_id];
	var cd = oneitem['coordinates2'].toString().split(",");
	var point = new YMaps.GeoPoint(cd[0], cd[1]);
	var placemark = new YMaps.Placemark(point, {style: marker_color, hasHint: true});
	// add hint
	var placemarkHtml = oneitem["town_name"] + ", " + oneitem["object_type"];
	if (oneitem["price"] != 0) placemarkHtml += ", " + oneitem["price"] + " у.е.";
	placemark.setHintContent(placemarkHtml);

	placemark.description = oneitem['tpl'];
    map.addOverlay(placemark);
    count = 1;
    if ( oneitem['n'] != undefined) count =  oneitem['n'];
    if (count > 1) placemark.setIconContent(count);
    
    if (code != -1 && $.inArray(code, oneitem["keys"]) != -1 && oneitem["build_type"] == data["main"]) {
        placemark.openBalloon();
    }
    if (code == -1 && oneitem["build_type"] == data["main"] && map.getBalloon() == null) {
        placemark.openBalloon();
    }       
	//return placemark;
}

function addGeoCottedgeMarkerWithTpl(oneitem, directions, data) {

    var query = oneitem['coordinates'].replace(' ', '+');
    var geocoder = new YMaps.Geocoder(query);
	var direction_id = oneitem["direction_id"];
	var marker_color = "default#" + directions[direction_id];

    YMaps.Events.observe(geocoder, geocoder.Events.Load, function (geocoder) {
        if (this.length()) {
            
            var geoccords = geocoder.get(0).getGeoPoint();
            var cd = geoccords.toString().split(",");
            var point = new YMaps.GeoPoint(cd[0], cd[1]);
            var placemark = new YMaps.Placemark(point, {style: marker_color, hasHint: true});
            
            // add hint
            var placemarkHtml = oneitem["town_name"] + ", " + oneitem["object_type"];
            if (oneitem["price"] != 0) placemarkHtml += ", " + oneitem["price"] + " у.е.";
            placemark.setHintContent(placemarkHtml);

            placemark.description = oneitem['tpl'];
            map.addOverlay(placemark);
            if ( oneitem['n'] != undefined) count =  oneitem['n'];
            if (count > 1) placemark.setIconContent(count);
            
            if (code != -1 && $.inArray(code, oneitem["keys"]) != -1 && oneitem["build_type"] == data["main"]) {
                placemark.openBalloon();
            }
            if (code == -1 && oneitem["build_type"] == data["main"] && map.getBalloon() == null) {
                placemark.openBalloon();
            }       
            //return placemark;
        }
    });
}

function addSettlementMarker(oneitem, directions) {
	var cd = oneitem["map_point"].split(",");
	var marker_color = "default#greyPoint";
	var point = new YMaps.GeoPoint(cd[0], cd[1]);
	var placemark = new YMaps.Placemark(point, {style: marker_color, hasHint: true});
	// add hint
	var placemarkHtml = oneitem["name"];
	placemark.setHintContent(placemarkHtml);
	// add balloon
	placemark.description = oneitem['tpl'];
    
	return placemark;
}

function addNewbuildingMarker(oneitem, directions) {
	var cd = oneitem["map_point"].split(",");
	var marker_color = "default#bluePoint";
	var point = new YMaps.GeoPoint(cd[0], cd[1]);
	var placemark = new YMaps.Placemark(point, {style: marker_color, hasHint: true});
	// add hint
	var placemarkHtml = oneitem["name"];
	if (oneitem["building_year"] != '') placemarkHtml += ', ' + oneitem["building_year"];
	placemark.setHintContent(placemarkHtml);
	// add balloon
	placemark.description = oneitem['tpl'];
	return placemark;
}

function addOfficeMarker(oneitem, directions) {
	var s = new YMaps.Style();
	s.iconStyle = new YMaps.IconStyle();
	s.iconStyle.offset = new YMaps.Point(-15, -15);
	s.iconStyle.href = relpath + "/images/logo_small3.gif";
	s.iconStyle.size = new YMaps.Point(31, 24);
	
	var point = new YMaps.GeoPoint(oneitem['prop1'], oneitem['prop2']);
	var placemark = new YMaps.Placemark(point, {style: s, hasHint: true});
	// add hint
	var placemarkHtml = oneitem["name"];
	placemark.setHintContent(placemarkHtml);
	// add balloon
	placemark.description = oneitem['tpl'];
	return placemark;
}

function addGeoFlatMarker(oneitem, directions, data) {
    var query = 'Беларусь, ' + oneitem["town_name"] + ', ' + oneitem["street_name"];
    if (oneitem["house_number"] != '') query += ', ' + oneitem["house_number"];
    var geocoder = new YMaps.Geocoder(query.replace(' ', '+'));
    var marker_color = "";
    if (oneitem["is_elite"] == 1)  marker_color = "default#orangePoint";
    else if (oneitem["is_mpg"] == 1)  marker_color = "default#greenPoint";
    else marker_color = "default#bluePoint";
    YMaps.Events.observe(geocoder, geocoder.Events.Load, function (geocoder) {
        if (this.length()) {
            
            var geoccords = geocoder.get(0).getGeoPoint();
            var cd = geoccords.toString().split(",");
            var point = new YMaps.GeoPoint(cd[0], cd[1]);
            var placemark = new YMaps.Placemark(point, {style: marker_color, hasHint: true});
            
            var placemarkHtml = oneitem["rooms"].replace('0', '1') + '/' + oneitem["separate_rooms"];
            if (oneitem["town_name"] != 'Минск') placemarkHtml += ', ' + oneitem["town_name"];
            placemarkHtml += ', ' + oneitem["street_name"];
            if (oneitem["house_number"] != '') placemarkHtml += ', ' + oneitem["house_number"];
            if (oneitem["price"] != '') placemarkHtml += ', ' + oneitem["price"] + " у.е.";
            placemark.setHintContent(placemarkHtml); 

            placemark.description = oneitem['tpl'];
            
            if (oneitem['n'] != undefined && oneitem['n'] > 1) placemark.setIconContent(oneitem['n']);
            
            //flat_placemark = placemark;
            map.addOverlay(placemark);
            
            if (code != -1 && $.inArray(code, oneitem["keys"]) != -1 && oneitem["build_type"] == data["main"]) {
                placemark.openBalloon();
            }
            if (code == -1 && oneitem["build_type"] == data["main"] && map.getBalloon() == null) {
                placemark.openBalloon();
            }       
            //return placemark;
        }
    });
}

function addFlatMarker(oneitem, directions, data) {

    var marker_color = "";
    if (oneitem["is_elite"] == 1)  marker_color = "default#orangePoint";
    else if (oneitem["is_mpg"] == 1)  marker_color = "default#greenPoint";
    else marker_color = "default#bluePoint";
    
    var cd = oneitem['coordinates2'].split(",");
    
	var point = new YMaps.GeoPoint(cd[0], cd[1]);
    var placemark = new YMaps.Placemark(point, {style: marker_color, hasHint: true});
    var placemarkHtml = oneitem["rooms"].replace('0', '1') + '/' + oneitem["separate_rooms"];
    if (oneitem["town_name"] != 'Минск') placemarkHtml += ', ' + oneitem["town_name"];
    placemarkHtml += ', ' + oneitem["street_name"];
    if (oneitem["house_number"] != '') placemarkHtml += ', ' + oneitem["house_number"];
    if (oneitem["price"] != '') placemarkHtml += ', ' + oneitem["price"] + " у.е.";
    placemark.setHintContent(placemarkHtml); 

    placemark.description = oneitem['tpl'];
    
    if (oneitem['n'] != undefined && oneitem['n'] > 1) placemark.setIconContent(oneitem['n']);
    
    //flat_placemark = placemark;
    map.addOverlay(placemark);
    
    if (code != -1 && $.inArray(code, oneitem["keys"]) != -1 && oneitem["build_type"] == data["main"]) {
        placemark.openBalloon();
    }
    if (code == -1 && oneitem["build_type"] == data["main"] && map.getBalloon() == null) {
        placemark.openBalloon();
    }       
 
}


function addGeoRenteliteMarker(oneitem, directions, data) {
    var query = oneitem["coordinates"];
    var geocoder = new YMaps.Geocoder(query.replace(' ', '+'));
    var marker_color = "default#orangePoint";
    YMaps.Events.observe(geocoder, geocoder.Events.Load, function (geocoder) {
        if (this.length()) {
            
            var geoccords = geocoder.get(0).getGeoPoint();
            var cd = geoccords.toString().split(",");
            var point = new YMaps.GeoPoint(cd[0], cd[1]);
            var placemark = new YMaps.Placemark(point, {style: marker_color, hasHint: true});
            
            // add hint
            var placemarkHtml = oneitem["rooms"].replace('0', '1') + ', ' + oneitem["address"];
            if (oneitem["price"] != '') placemarkHtml += ', ' + oneitem["price"] + " у.е. в мес.";
            placemark.setHintContent(placemarkHtml);
            // add balloon
            placemark.description = oneitem['tpl'];
            
            if (oneitem['n'] != undefined && oneitem['n'] > 1) placemark.setIconContent(oneitem['n']);
            
            map.addOverlay(placemark);
            
            if (code != -1 && $.inArray(code, oneitem["keys"]) != -1 && oneitem["build_type"] == data["main"]) {
                placemark.openBalloon();
            }
            if (code == -1 && oneitem["build_type"] == data["main"] && map.getBalloon() == null) {
                placemark.openBalloon();
            }       
            //return placemark;
        }
    });    
}


function addGeoRentFlatsMarker(oneitem, directions, data) {
    var query = oneitem["coordinates"];
    var geocoder = new YMaps.Geocoder(query.replace(' ', '+'));
    var marker_color = "default#bluePoint";
    YMaps.Events.observe(geocoder, geocoder.Events.Load, function (geocoder) {
        if (this.length()) {
            
            var geoccords = geocoder.get(0).getGeoPoint();
            var cd = geoccords.toString().split(",");
            var point = new YMaps.GeoPoint(cd[0], cd[1]);
            var placemark = new YMaps.Placemark(point, {style: marker_color, hasHint: true});
            
            // add hint
            var placemarkHtml = oneitem["separate_rooms"] + '/' + oneitem["rooms"] + ', ' + oneitem["street_name"] + ' ' + oneitem['house_number'];
            if (oneitem["price"] != '') placemarkHtml += ', ' + oneitem["price"] + " у.е. в мес.";
            placemark.setHintContent(placemarkHtml);
            // add balloon
            placemark.description = oneitem['tpl'];
            
            if (oneitem['n'] != undefined && oneitem['n'] > 1) placemark.setIconContent(oneitem['n']);
            
            map.addOverlay(placemark);
            
            if (code != -1 && $.inArray(code, oneitem["keys"]) != -1 && oneitem["build_type"] == data["main"]) {
                placemark.openBalloon();
            }
            if (code == -1 && oneitem["build_type"] == data["main"] && map.getBalloon() == null) {
                placemark.openBalloon();
            }       
            //return placemark;
        }
    });    
}

function addRenteliteMarker(oneitem, directions, data) {
	
    var cd = oneitem['coordinates2'].split(",");
    var marker_color = "default#bluePoint";
	
	var point = new YMaps.GeoPoint(cd[0], cd[1]);
    var placemark = new YMaps.Placemark(point, {style: marker_color, hasHint: true});
    var placemarkHtml = oneitem["rooms"].replace('0', '1') + ', ' + oneitem["address"];
    
    if (oneitem["price"] != '') placemarkHtml += ', ' + oneitem["price"] + " у.е. в мес.";
    placemark.setHintContent(placemarkHtml);
    // add balloon
    placemark.description = oneitem['tpl'];
    
    if (oneitem['n'] != undefined && oneitem['n'] > 1) placemark.setIconContent(oneitem['n']);
    
    map.addOverlay(placemark);
    
    if (code != -1 && $.inArray(code, oneitem["keys"]) != -1 && oneitem["build_type"] == data["main"]) {
        placemark.openBalloon();
    }
    if (code == -1 && oneitem["build_type"] == data["main"] && map.getBalloon() == null) {
        placemark.openBalloon();
    }   
}

function addCommbuildingMarker(oneitem, directions) {
	var cd = oneitem["map_point"].split(",");
	var marker_color = "default#bluePoint";
    if (oneitem["catalog_type"].indexOf("бизнес") != -1) marker_color = "default#greenPoint";
    //if (oneitem["catalog_type"].indexOf("торговый") != -1) marker_color = "default#bluePoint";    
	var point = new YMaps.GeoPoint(cd[0], cd[1]);
	var placemark = new YMaps.Placemark(point, {style: marker_color, hasHint: true});
	// add hint
	var placemarkHtml = oneitem["name"];
	if (oneitem["square_all"] != '') placemarkHtml += ', ' + oneitem["square_all"];
	placemark.setHintContent(placemarkHtml);
	// add balloon
	placemark.description = oneitem['tpl'];
	return placemark;
}

function addCommdolevoeMarker(oneitem, directions) {
	var cd = oneitem["map_point"].split(",");
	var marker_color = "default#bluePoint";
	var point = new YMaps.GeoPoint(cd[0], cd[1]);
	var placemark = new YMaps.Placemark(point, {style: marker_color, hasHint: true});
	// add hint
	var placemarkHtml = oneitem["function"];
    if (oneitem["square"] != '') placemarkHtml += ', ' + oneitem["square"];
	if (oneitem["price"] != '') placemarkHtml += ', ' + oneitem["price"];
	placemark.setHintContent(placemarkHtml);
	// add balloon
	placemark.description = oneitem['tpl'];
	return placemark;
}

function addCommArendaMarker(oneitem, directions) {
	var cd = oneitem["map_point"].split(",");
	var marker_color = "default#bluePoint";
	var point = new YMaps.GeoPoint(cd[0], cd[1]);
	var placemark = new YMaps.Placemark(point, {style: marker_color, hasHint: true});
	// add hint
	var placemarkHtml = oneitem["address"];
    if (oneitem["function"] != '') placemarkHtml += ', ' + oneitem["function"];
	if (oneitem["price"] != '') placemarkHtml += ', ' + oneitem["price"] + '&euro;';
	placemark.setHintContent(placemarkHtml);
	// add balloon
	placemark.description = oneitem['tpl'];
	return placemark;
}

function addSuperprojectMarker(oneitem, directions) {

	var marker_color = "default#redPoint";
	var point = new YMaps.GeoPoint(oneitem['prop1'], oneitem['prop2']);
	var placemark = new YMaps.Placemark(point, {style: marker_color, hasHint: true});
	// add hint
	var placemarkHtml = oneitem["name"];
	placemark.setHintContent(placemarkHtml);
	// add balloon
	placemark.description = oneitem['tpl'];
	return placemark;
}

function loadNoImage(obj) {
	//obj.src="'" + relpath + "/images/spacer.gif'";
	//obj.width=1;
    $(obj).remove();
}

function appendAreas(directions) {
    if (false == is_areas_loaded) $("#dirs_n").text("не важно");
	var html = '';
	for(var i = 0; i < directions.length; i ++) {
		if (0 != directions[i]["n"]) {
            html += '<div class="active" onclick="setDirection(\'' + directions[i]["id"] + '\');" id="direction_' + directions[i]["id"] + '">';
            html += '<span class="box" style="background-color:' + color_map[i]["web"] + '">&nbsp;</span>';
            html += directions[i]["name"];
            html += '<span class="count">' + directions[i]["n"] + '</span>'
            html += '</span></div>';
		} else {
            html += '<div class="inactive">';
            html += '<span class="box">&nbsp;</span>';
            html += directions[i]["name"];
            html += '<span class="count">0</span>'
            html += '</span></div>';
		}
	}	
	//$("#directions").html();
    var inner = $("#directions")[0].innerHTML;
    $("#directions")[0].innerHTML = inner + html;
    $("#direction_ > span.count")[0].innerText = data["ItemsTotalCount"];
	is_areas_loaded = true;
}

function setDirection(id) {
    if ('' == id) {
        $("#directions > div.current").removeClass("current", "");
        $("#direction_").addClass("current", "");
        $("#dirs_n").text("не важно");
    }
    else {
        $("#direction_" + id).toggleClass("current", "");
        if ($("#directions > div.current").length == 0) {
            $("#direction_").addClass("current", "");
            $("#dirs_n").text("не важно");
        }
        else {
            $("#direction_").removeClass("current", "");
            $("#dirs_n").text("выбрано " + $("#directions > div.current").length);
        }
    }
    var cd = coords_init.split(',');
    map.setCenter(new YMaps.GeoPoint(cd[0],cd[1]), scale);
    filterList(false, true);
}

function initPager(){
	$("#set_show_all span").click(function(){
		$("#pager_show_all").attr("value", "1");
		$("#page_n").attr("value", "1");
		getHtml(false);
	});
	$("#unset_show_all").click(function(){
		$("#pager_show_all").attr("value", "0");
		getHtml(false);
	});
	$("#ajax_pager a.pager").click(function(){
		$("#page_n").attr("value", ($(this).attr("name")));
		getHtml(false);
		document.location = "#top";
	});
	
}

function initMap() {
    $("#YMapsID").empty();
	typeConverter = new TypeConverter();
    map = new YMaps.Map(document.getElementById("YMapsID"));
    centerPoint = new YMaps.GeoPoint(coords[0],coords[1]);
    map.setCenter(centerPoint, scale);
	
	if(1 == enable_zoom) map.enableScrollZoom();
    map.addControl(new YMaps.Zoom());
    map.addControl(getCustomToolbar());
    map.addControl(new YMaps.TypeControl());
    map.addControl(new YMaps.SearchControl());
	
    setPlaceLink(map);
    YMaps.Events.observe(map, [map.Events.BoundsChange, map.Events.TypeChange],  function () {
        setPlaceLink(map);
    });    
}

function setDirections2(selected)
{
    $.ajax({
        type: "GET",
        cache: false,
        dataType: "json",
        url: relpath + '/pub/objects.json.php?objs=directions',
        success: function(d) {
            $("#custom_select").empty();
            var html = '<option value="">Все&nbsp;направления&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</option>';
            var items = d["items"];
            var sHtml = '';
            for(var i = 0; i < items.length; i ++) {
                if (selected == items[i]["id"]) sHtml = ' selected="selected"';
                else sHtml = '';
                html += '<option value="'  + items[i]["id"] + '"' + sHtml + '>' + items[i]["name"] + '</option>';
            }
            $("#custom_select").html(html);   
            $('select#custom_select').selectmenu({style:'dropdown'});            
        }
    }); 
}

function filterReset(skip_map) {
    var param = '';
    for (var p in cfg_slider) {
        param = cfg_slider[p];
        $('#slider_' + p + '_slider').slider('values', 0, param.min);
        $('#slider_' + p + '_slider').slider('values', 1, param.max);
    }
    $("#custom_select").val('');
    $("span.ui-selectmenu-status").text('Все направления')
    if (skip_map == false) 
        setDirection('');
    else filterList(false, true, '', true);
}

/////////////// SLIDERS

/////////////////////////////////////////////////////// sliders
function render_slider_scale(slider_width,marks_ar,id) {
	var part_width = Math.floor(slider_width/marks_ar.length);
	var slider_width_real = part_width*(marks_ar.length-1);
	var slider_offset = Math.floor((slider_width-slider_width_real)/2);
	
	var slider_scale_marks = '';
	var slider_scale = '';
	for(var i=0; i<marks_ar.length; i++) {
		slider_scale_marks += '<div class="ui-slider-marks">'+marks_ar[i]+'</div>';
		if(i < marks_ar.length-1) slider_scale += '<div class="ui-slider-scale"></div>'
	}
	var scale = '<div class="slider-scale-marks-iebug"><div class="slider-scale-marks">'+slider_scale_marks+'<div class="clr"></div></div><div class="slider-scale">'+slider_scale+'<div class="clr"></div></div></div>';	
	
	$('#'+id).empty().append(scale)
		.append('<div id="'+id+'_slider"></div>')
		.append('<div class="slider_bg"></div>');
		
	$('.ui-slider-marks','#'+id).width(part_width+2);	// + 2px border	
	$('.ui-slider-scale','#'+id).width(part_width);
	
	// real width + 1px border twice + 2px own border
	$('#'+id+'_slider').width(slider_width_real+marks_ar.length*2-2).css({marginLeft: -5+'px'}); 
	$('.slider_bg','#'+id).width(slider_width_real+marks_ar.length*2-2)
	$('.slider-scale-marks','#'+id).css({position: 'relative', left: -slider_offset+'px'});

	if($.browser.msie == true && ($.browser.version).toString().substr(0,1) == '6') {
		$('.slider-scale-marks','#'+id).css({position: 'absolute', left: -slider_offset+'px'});
		$('.slider-scale','#'+id).css({paddingTop: '13px'}).parent().css({height: '10px'});
	}
	
	return slider_width_real;
}

function slider_handler(e,ui) {
    var thisid = this.id;
    var id = thisid.replace("_slider", "").replace("slider_", "");
	var tmp = Math.round($("#" + thisid).slider('values', 1));

	if(tmp == cfg_slider[id]["max"]) tmp = '>' + cfg_slider[id]["max"];
	var min = Math.round($("#" + thisid).slider('values', 0));
	var max = tmp;
    
	$("#" + id + "_from").val(min); 
	$("#" + id + "_to").val(max); 
}

function initSliders(sliderWidth) {

	if (null == sliderWidth) sliderWidth = 290;
    var param = '';
    for (var p in cfg_slider) {
        param = cfg_slider[p];
        
        render_slider_scale(sliderWidth, param.line, "slider_" + p);
        $('#slider_' + p + '_slider').slider({
            min: param.min, 
            max: param.max,
            step: 1,
            range: true,
            values: param.values,
            slide: slider_handler,
            change: slider_handler
        });
        $('#slider_' + p + '_slider').slider('values', 1, param.max);
    }

    $('#price_from').keyup(function (){
        var tmp = parseInt($(this).val());
        if(isNaN(tmp) || tmp > parseInt($('#price_to').val())) return;
        $('#slider_price_slider').slider('values',0,tmp);
    });
    $('#price_to').keyup(function (){
        var tmp = (($(this).val()).substr(0,1)=='>')?($(this).val()).substr(1):$(this).val();
        tmp = parseInt(tmp);
        if(isNaN(tmp) || tmp <= parseInt($('#price_from').val())) return;
        $('#slider_price_slider').slider('values',1,tmp);
    });
    $('#dist_from').keyup(function (){
        var tmp = parseInt($(this).val());
        if(isNaN(tmp) || tmp > parseInt($('#dist_to').val())) return;
        $('#slider_dist_slider').slider('values',0,tmp);
    }); 
    $('#dist_to').keyup(function (){
        var tmp = (($(this).val()).substr(0,1)=='>')?($(this).val()).substr(1):$(this).val();
        tmp = parseInt(tmp);
        if(isNaN(tmp) || tmp <= parseInt($('#dist_from').val())) return;
        $('#slider_dist_slider').slider('values',1,tmp);
    });
    
}

// ----------------   Элемент управления "Информация"  ------------
function InformationControl () {
	var geoResult, clickPlace, listener, map;

	// Вызывается при добавлении элемента управления на карту
	this.onAddToMap = function (parentMap) {
		map = parentMap;

		map.addCursor(YMaps.Cursor.HELP);

		// Создание обработчика кликов по карте
		listener = YMaps.Events.observe(map, map.Events.Click, function (map, mEvent) {
			// Выключаем обработчиков событий, чтобы к геокодеру ушло не более одного запроса
			// (по окончанию геокодированияю включаем обработчик вновь)
			listener.disable();

			// Координаты клика мышью
			var clickPoint  = mEvent.getGeoPoint();

			// Удаляем предыдущие результаты (если они были добавлены на карту)
			if (geoResult) {
				map.removeOverlay(geoResult);
				result = null;
			}

			if (clickPlace) {
				map.removeOverlay(clickPlace);
				clickPlace = null;
			}

			// Отмечаем точку по которой щелкнул пользователь
			clickPlace = new YMaps.Placemark(clickPoint, {style: anchorStyle});
			clickPlace.description = clickPoint.toString();
			map.addOverlay(clickPlace);

			// Запуск процесс геокодирования
			this.geocode(clickPoint);
		}, this);
	}

	// Геокодирует точку
	this.geocode = function (clickPoint) {
		// Запуск процесса геокодирования
		var geocoder = new YMaps.Geocoder(clickPoint);

		// Обработчик успешного завершения геокодирования
		YMaps.Events.observe(geocoder, geocoder.Events.Load, function (geocoder) {
			// Получение результата поиска
			geoResult = this.getResult(geocoder);

			if (geoResult) {
				geoResult.setStyle(markStyle);

				// Задаем содержимое балуна
				var sep = ', ',
					names = (geoResult.text || '').split(sep),
					index = geoResult.kind === 'house' ? -2 : -1;
				geoResult.setBalloonContent("<b>" + names.slice(index).join(sep) + "</b><div>" + names.slice(0, index).join(sep) + "</div>");

				// Открываем балун
				map.addOverlay(geoResult);
				geoResult.openBalloon();
			} else {
				alert("Ничего не найдено!");
			}

			// Включаем обработчик кликов по карте
			listener.enable();
		}, this);

		// Обработчик неудачного геокодирования
		YMaps.Events.observe(geocoder, geocoder.Events.Fault, function (geocoder, err) {
			alert("Произошла ошибка при геокодировании: " + err);

			// Включаем обработчик кликов по карте
			listener.enable();
		});
	}

	// Возвращает результат различной точности в зависимости от масштаба
	this.getResult = function (geocoder) {
		// Точность: город, страна
		function isOther (result) {
			return result.precision == "other";
		}

		// Точность: улица
		function isStreet (result) {
			return result.precision == "street";
		}

		// Точность: дом
		function isHouse (result) {
			return !isOther(result) && !isStreet(result);
		};

		// Выбор точности поиска
		var filter = isHouse;
		if (map.getZoom() < 10) {
			filter = isOther;
		} else if (map.getZoom() < 15) {
			filter = isStreet;
		}

		// Возвращает первый найденный результат
		return geocoder.filter(filter)[0];
	}

	// Вызывается при удалении элемента управления с карты
	this.onRemoveFromMap = function () {
		map.removeCursor(YMaps.Cursor.HELP);

		// Удаляем метки с карты, если они были добавлены
		if (geoResult) {
			map.removeOverlay(geoResult);
		}

		if (clickPlace) {
			map.removeOverlay(clickPlace);
		}

		// Удаляем обработчик кликов по карте
		listener.cleanup();

		map = geoResult = clickPlace = listener = null;
	}
	
	// Создадим стили для значков
	var anchorStyle = new YMaps.Style();
	anchorStyle.iconStyle = new YMaps.IconStyle();
	anchorStyle.iconStyle.href = relpath + '/images/b-location-balloon.anchor.png';  // "http://maps.yandex.ru/css/b-location-balloon/b-location-balloon.anchor.png";
	anchorStyle.iconStyle.size = new YMaps.Point(18, 18);
	anchorStyle.iconStyle.offset = new YMaps.Point(-9, -18);

	var markStyle = new YMaps.Style();
	markStyle.iconStyle = new YMaps.IconStyle();
	markStyle.iconStyle.href =  relpath + '/images/b-location-balloon.mark.png';  // "http://maps.yandex.ru/css/b-location-balloon/b-location-balloon.mark.png";
	markStyle.iconStyle.size = new YMaps.Point(21, 19);
	markStyle.iconStyle.offset = new YMaps.Point(-1, -18);
}

function getCustomToolbar() {
	// Создание элемента управления "Информация"
	var informationControl = new InformationControl();
	
	// Создание новой кнопки
	// Добавляем ее к стандартной группе кнопок на панеле инструментов
	var buttonInformation = new YMaps.ToolBarRadioButton(YMaps.ToolBar.DEFAULT_GROUP, {
	   icon: relpath + "/images/b-location-mapinfo.png",// "http://maps.yandex.ru/i/buttons/info.png",
	   hint: "Информация"
	});
	
	// Включение/выключение инструмента "Информация"
	YMaps.Events.observe(buttonInformation, buttonInformation.Events.Select, function () {
	   map.addControl(informationControl);
	});
	
	YMaps.Events.observe(buttonInformation, buttonInformation.Events.Deselect, function () {
	   map.removeControl(informationControl);
	});
	
	// Добавление элементов управления на карту
	var toolBar = new YMaps.ToolBar();
	toolBar.add(buttonInformation);
	return toolBar;
}
// ------------------------------------------------

function initPrint()
{
	//$('#criteria').hide();
    if (is_print) $("div.map_filters").hide();
 
	$('input.check-print').click( function()
	  {
	    $(this).parents("td").toggleClass('check-td');
		
		if (this.checked) $('#' + this['name']).attr('value', '1');
		else $('#' + this['name']).attr('value', '0');
    var idn = (this.id).replace('print-', '');
	$.ajax({
		type: "GET",
		cache: false,		
		url: relpath + '/pub/print_session.php?id='+idn+'&v='+$("#ch_"+idn).val()
	});		
        
	});
 
	$('#print').click( function()
	{
		var old_action = $('#form-pager').attr('action')
		var action = old_action  + 'print=1/';
		$('#form-pager').attr('action', action);
		
		var old_page_submit = $('#page-submit').attr('value');
		
		$('#form-pager').attr('target', '_blank');
		$('#page-submit').attr('value', '1');
	    $('#form-pager').submit();
		
		// restore defaults
		$('#form-pager').attr('action', old_action);
		$('#form-pager').attr('target', '_self');
		$('#page-submit').attr('value', old_page_submit);
	});		
			

}