var b_version = navigator.appVersion;
var isIE6 = b_version.search(/MSIE 6/i) != -1;
var query;
var wrapperCSS;
var xmlparser = new XMLparser();
var paramparser = new XMLparser();
var items;
var geocoder = new GClientGeocoder();
var Map;
var screenPolygon;
var markerManager;
var itemNumber = 0;
var itemResultsCount = 0;
var itemsPerPage = 11;
var currentListener;
var markers = [];
var objects = [];
var regions = [];
var regionOverlays = [];
var leftHtml =[];
var lefthtmlString='';
var currentPage = 0;
var selectItem = [];
var isSmallMap   = true;
var isFullScreen = false;
var parameters = {};
var paraString = {};
var addString = {};
addString.type = [];
var searchOpened = false;
var isPublic = true;
paraString.brand = [];
paraString.cuisine = [];
paraString.concurence = [];
var currentCityMetros;
var searchAdress, searchPoint;
var directionsPoint;
var checkedItems = [];
var checkedMarkers = [];
var pairs = [];
lineColors = ['#000099', '#CC0000', '#006600', '#33CCCC', '#990099', '#336666', '#000000', '#330000', '#666666', '#33FF00']
// feed url:
var feedUrl = 'RestaurantsFeed.aspx';

var host = window.location.href.substr(0, window.location.href.lastIndexOf('/'));
var centerPoint;
var fullScreenOpen = false;
var fullScreenCss;
var mapTemp;
var keepForm = false;
var rosinterBrands;
var addresses = [];
var indexes = [];
var cnt = 0;

paraString.location = "";
paraString.cityName = "";
paraString.metro = "";
paraString.view_mode = "map";
paraString.hasDelivery = "";

function getParams()
{
	var query = window.location.href.substr(window.location.href.indexOf('?')+1).split('&');
	var res = new Array();
	for(i=0; i<query.length; i++)
	{
		var p = query[i].split('=');
		res[p[0]] = p[1];
	}
	return res;
}

// initialize:
function initialize() 
{
	showBlocker();
    // get params:
	query = getParams();
	
	// if specified hasDelivery flag:
	if (typeof(query["hasDelivery"]) != "undefined" && query["hasDelivery"] != null && query["hasDelivery"] != "")
	{
	    paraString.hasDelivery = "1";
	    //document.getElementById("deliverySwitch").checked = true;
	}
	
    // create feed url:
	var feedString = feedUrl + "?city=" + paraString.city + "&location="+encodeURI(paraString.location)+"&lang="+lang + "&brand=" + paraString.brands + "&cuisine=" + encodeURI(paraString.cuisines) + "&metro=" + encodeURI(paraString.metro) + "&hasDelivery=" + paraString.hasDelivery;
	// get brands (???):
	//rosinterBrands = getRosinterBrands();
	showElement("loading");

        // if mode is list:
        if (query && query["mode"] && query["mode"] == "list")
        {
            switchToList();
        }
        else
        {
	    loadFeed(feedString);
        }

	if (GBrowserIsCompatible()) 
        {
		Map = new GMap2(document.getElementById("map"));

		Map.addControl(new GLargeMapControl());
		Map.addControl(new GMapTypeControl());
		Map.addControl(new GScaleControl());

        	// if specified coordinates for the city:
                if (__citiesCoordinates && __citiesCoordinates[paraString.city])
                {
                    Map.setCenter(new GLatLng(__citiesCoordinates[paraString.city]["latitude"], __citiesCoordinates[paraString.city]["longitude"]), 11);
                    centerPoint = new GLatLng(__citiesCoordinates[paraString.city]["latitude"], __citiesCoordinates[paraString.city]["longitude"]);
                }
                else
	        {     	
        	    Map.setCenter(new GLatLng(55.752,37.616), 11);
                    centerPoint = new GLatLng(55.752,37.616); 
			geocoder.getLatLng(
			    paraString.cityName,
			    function(point) 
                            {
			      if (!point) centerPoint = new GLatLng(55.752,37.616);
			      else centerPoint = point;
			      Map.setCenter(centerPoint, 11);
                            }
			 );	 
	        }
		            
	        markerManager = new MarkerManager(Map);				
		
        GEvent.addListener(Map, 'zoomend', zoomChanged);
	}
        if(isIE6) connect(window, 'onresize', unbreakIE);
}

// get rosinter brands:
function getRosinterBrands()
{	var bs = [];
	for(var key in iconsInfo) bs.push(key);
	return '&brand='+bs.join(';');}

// load feed:
function loadFeed(feedString){
	currentPage = 0;
	$('lis1').innerHTML = '<span class="loadingMessage"> &nbsp; &nbsp;'+resources['Loading']+'</span>';
	$('resultNumValue').innerHTML = 0 + ' '+resources['Results'];
	xmlLoad(feedString, handleRouter);
}

function handleRouter(req) {
    var xml = req.responseXML;
    routerxml = new XmlDoc(xml);
	loadRouter(routerxml.xml);
}

function loadRouter(xml){
    leftHtml =[];
	while(markers.length){
	  var m = markers.pop();
	  Map.removeOverlay(m);
	}
	addresses = [];
	indexes = [];
	checkedItems = [];
	clearDistance();
	//$('distanceIcon').style.visibility = 'hidden';
	disconnect('forward','onclick',forward);
	disconnect('back','onclick',back);
	$('forward').src='/locator/resources/images/arrow_r.gif';
	$('back').src='/locator/resources/images/arrow_l.gif';

	xmlparser.setXmlDoc(xml);
	var Restoraunts = xmlparser.getFirstChild(xml, '/Rosinterfeed/Restaurants');
	if(xmlparser.getAttributeNode(xmlparser.getFirstChild(xml, '/Rosinterfeed'), "feedtype") != "public") isPublic = false;
	var itemNodes = xmlparser.getChildren(Restoraunts, 'item');
        
    itemNumber = 0;
    itemResultsCount = xmlparser.getAttributeNode(xmlparser.getFirstChild(xml, '/Rosinterfeed'), "resultsCount");

    items =map(getItems,itemNodes);

    markerManager.clearMarkers();
    map(groupItems, items);
    for(ll in addresses) makeMap(addresses[ll]);

    // if got nothing:
    if (itemNumber == 0 && itemResultsCount > 0)
    {
        switchToList();
        return;
    }


    Map.closeInfoWindow();
    markerManager.refresh();

	callLater(1,function(){
						if((itemNumber % itemsPerPage && itemNumber !== 0)){
						lefthtmlString += '</ul>'
						leftHtml.push(lefthtmlString);
						}
                        if(leftHtml.length) {
							$('lis1').innerHTML = leftHtml[0];
							connectItemEvents();
						}
                        else
                        $('lis1').innerHTML = '';
						$('resultNumValue').innerHTML = routerResultsTitle(currentPage, itemNumber);
						if(leftHtml.length > 1){
							connect('forward','onclick',forward);
							connect('back','onclick',back);
							$('forward').src='/locator/resources/images/arrow_r_a.gif';
						}
						if(markers.length && searchAdress == null){
						  Map.setCenter(centerPoint, 11);
						}
						if(markers.length == 0 && searchAdress != null)
						{
							//Map.openInfoWindowHtml(searchPoint, '<b>'+searchAdress+'</b><div>'+resources['NoRestaurantsFoundAtAddress']+'</div><div style="border-top:1px solid #000; margin-top: 10px;">'+resources['CalculateDistanceFromHereToAddress']+':<br/><input id="distanceToAddress" type="text" /><input type="button" value="'+resources['Calculate']+'" onclick="distanceToAddress();"/></div>');
							Map.openInfoWindowHtml(searchPoint, '<b>'+searchAdress+'</b><div>'+resources['NoRestaurantsFoundAtAddress']+'</div>');
						}

                                                // if not all items are shown on the map:
						if (itemNumber > 0 && itemResultsCount > 0 && itemNumber < itemResultsCount)
                                                {
                                                    var _point = searchPoint;
                                                    if (!_point) _point = centerPoint;
                                                    Map.openInfoWindowHtml(_point, '<b>' + resources["RestaurantMap"] + '</b><br/><br/><div><p class="addr">' + resources["NotAllObjectsAreShownOnTheMap"] + '</p><p class="addr"><a href="javascript:switchToList()">' + resources["SwitchToTheList"] + '</a> ' + resources["ToGetAllInformation"] + "</p></div>");
                                                }

						searchAdress = null;

						// call to form builder goes here.
                        // think about this
                        //if (!keepForm) loadForm(xml);
                        hideBlocker();
	 });
}

function routerResultsTitle(current, total) 
{
    if (total == 0)
        return resources['ResultsCount']+' 0 ' + resources['ResultsTo'] + ' 0 ' + resources['ResultsOf'] + ' 0';
       
    return resources['ResultsCount']+' ' +
        ((current * itemsPerPage) + 1) +
        ' '+resources['ResultsTo']+' ' + Math.min((current + 1) * itemsPerPage, total) +
        ' '+resources['ResultsOf']+' ' + total;
}

function connectItemEvents()
{
	var items = $('lis1').getElementsByTagName('DIV');
	for(i=0; i<items.length; i++) connect(items[i].id, 'onclick', openWindows);
}

function toPage(num)
{
	if(currentPage == num) return;
	currentPage = num;
	$('lis1').innerHTML = leftHtml[currentPage];
	connectItemEvents();
	fillCheckboxes();
        $('resultNumValue').innerHTML = routerResultsTitle(currentPage, itemNumber);
	if(currentPage == 0) $('back').src='/locator/resources/images/arrow_l.gif';
	else $('back').src='/locator/resources/images/arrow_l_a.gif';
	if(currentPage == (leftHtml.length-1)) $('forward').src='/locator/resources/images/arrow_r.gif';
	else $('forward').src='/locator/resources/images/arrow_r_a.gif';
}

function pageOfItem(index)
{
	//if(index > 0) index--;
	return Math.floor(index/itemsPerPage);
}

function forward(){
	if(currentPage == (leftHtml.length-1)) return;
	currentPage++;
	$('lis1').innerHTML = leftHtml[currentPage];
	connectItemEvents();
	fillCheckboxes();
    $('resultNumValue').innerHTML = routerResultsTitle(currentPage, itemNumber);
	$('back').src='/locator/resources/images/arrow_l_a.gif';
	if(currentPage == (leftHtml.length-1))
	$('forward').src='/locator/resources/images/arrow_r.gif';
}

function back(){
	if(currentPage == 0) return;
	currentPage--;
	$('lis1').innerHTML = leftHtml[currentPage];
	connectItemEvents();
	fillCheckboxes();
    $('resultNumValue').innerHTML = routerResultsTitle(currentPage, itemNumber);
	$('forward').src='/locator/resources/images/arrow_r_a.gif';
	if(currentPage == 0)
	$('back').src='/locator/resources/images/arrow_l.gif';
}

// get item from XML feed:
function getItems (node)
{
	var itemObj = {};
    itemObj.id = xmlparser.getSingleChildText(node, 'id');
	itemObj.cuisine = xmlparser.getSingleChildText(node, 'cuisine');
	itemObj.brand = xmlparser.getSingleChildText(node, 'brand').replace(/^\s+|\s+$/g,'');
	itemObj.brandFriendlyUrl = xmlparser.getSingleChildText(node, 'brandFriendlyUrl');
	itemObj.holding = xmlparser.getSingleChildText(node, 'holding');
	itemObj.city = xmlparser.getSingleChildText(node, 'city');
	itemObj.address = xmlparser.getSingleChildText(node, 'address');
	itemObj.restaurant = xmlparser.getSingleChildText(node, 'restaurant ');
	itemObj.type = xmlparser.getSingleChildText(node, 'type');
	itemObj.telephone = xmlparser.getSingleChildText(node, 'telephone');
	itemObj.email = xmlparser.getSingleChildText(node, 'email');
	itemObj.metro = xmlparser.getSingleChildText(node, 'metro');
	itemObj.latitude = xmlparser.getSingleChildText(node, 'latitude');
	itemObj.longitude = xmlparser.getSingleChildText(node, 'longitude');
	itemObj.ll = itemObj.latitude+','+itemObj.longitude;
    itemObj.opentime = xmlparser.getSingleChildText(node, 'opentime');
    itemObj.siteurl = xmlparser.getSingleChildText(node, 'siteurl');
    itemObj.addressDescription = xmlparser.getSingleChildText(node, 'addressDescription');
    itemObj.hasDelivery = xmlparser.getSingleChildText(node, 'hasDelivery');
    itemObj.deliveryPhone = xmlparser.getSingleChildText(node, 'deliveryPhone');
    itemObj.deliveryMenuContentId = xmlparser.getSingleChildText(node, 'deliveryMenuContentId');
	var p = xmlparser.getChildren(node, 'photos/photo');
	itemObj.photos = map(getPhotos, p);
	itemObj.index = null;

	return itemObj;
}

function getPhotos(node)
{
	return xmlparser.getText(node);
}

function makeIcon(iconInfo) {
    var icon = new GIcon();
    icon.image = iconInfo.fileName;
    icon.iconSize = new GSize(iconInfo.size[0], iconInfo.size[1]);
    if (iconInfo.iconAnchor)
    {   
        icon.iconAnchor = new GPoint(iconInfo.iconAnchor[0], iconInfo.iconAnchor[1]);
    }
    else
    {
        icon.iconAnchor = new GPoint(10,10);
    }
    if (iconInfo.infoWindowAnchor)
    {
        icon.infoWindowAnchor = new GPoint(iconInfo.infoWindowAnchor[0], iconInfo.infoWindowAnchor[1]);
    }
    else
    {
	icon.infoWindowAnchor = new GPoint(10,10);
    }

    return icon;
}

function makeMarker(latlng, icon, item) {
    var marker = new GMarker(new GLatLng(item.latitude, item.longitude), {icon: icon});
    marker.item = item;
    GEvent.addListener(marker, 'click', beforeOpenWindow);
    return marker;
}

function makeTabsMarker(latlng, icon, address) {
    var marker = new GMarker(new GLatLng(address[0].latitude, address[0].longitude), {icon: icon});
    marker.item = address[0];
    marker.address = address;
    GEvent.addListener(marker, 'click', beforeOpenTabsWindow);
    return marker;
}

// group items by latitude & longitude:
function groupItems(item)
{
    if(item.latitude == 0 || item.longitude == 0) return;
    //Grouping items by latlng
    if(addresses[item.ll])
    {
    	addresses[item.ll].push(item);
    }
    else
    {
    	addresses[item.ll] = new Array();
    	addresses[item.ll][0] = item;
    }
}

function makeMap(address)
{
	if(address.length == 1)
	{
	    var item = address[0];
	    item.number = itemNumber;
            // big icon:
	    var bigIcon = makeIcon(
	        iconsInfo[item.brandFriendlyUrl] ||
	        iconsInfo['Rosinter'] 
	    );

            // if combo || complex:
	    if(item.type.indexOf('Combo') == 0) bigIcon = makeIcon(iconsInfo["RosinterCombo"]);
	    if(item.type.indexOf('Complex') == 0) bigIcon = makeIcon(iconsInfo["RosinterComplex"]);

            // small icon:
	    var smallIcon = makeIcon(
	        iconsInfo['RosinterSmall']
	    );

	    if(item.latitude != 0 && item.longitude != 0)
	    {
	        var latlng = new GLatLng(item.latitude, item.longitude);
	        var bigMarker = makeMarker(latlng, bigIcon, item);
	        markerManager.addMarker(bigMarker, 11);
			markers.push(bigMarker);
			var smallMarker = makeMarker(latlng, smallIcon, item);
	        markerManager.addMarker(smallMarker, 1, 10);
			indexes[indexes.length] = {"marker":(markers.length-1), "tab":null, "number":itemNumber, "small":smallMarker};

			if(!(itemNumber % itemsPerPage)){
				lefthtmlString = '<ul>'
			}
			var itemAddress = item.address;
			if(item.address.length > 50) itemAddress = item.address.substr(0, 50)+'...';
			lefthtmlString += '<div id="item'+itemNumber+'">' +
	                    '<li>' +
	                        (itemNumber + 1) +'. ' +
	                        //'<span><input type="checkbox"/>' + item.brand + '</span><br />' +
                                '<span>' + item.brand + '</span><br />' + 
	                        item.address +
	                    '</li>' +
	                '</div>';
			itemNumber++;
			if(!(itemNumber % itemsPerPage)){
				lefthtmlString += '</ul>'
				leftHtml.push(lefthtmlString);
			}
		} else {
			//console.log('Item: '+item.latitude+'x'+item.longtitute+ 'not geocoded!');
		}
		$('resultNumValue').innerHTML = itemNumber + ' '+resources['Results'];
		showElement('fullscreen');
	}
	else
	{
    	    var bigIcon = makeIcon(iconsInfo['RosinterMulti']);

	    var smallIcon = makeIcon(
	        iconsInfo['RosinterSmall']
	    );

	    if(address[0].latitude != 0 && address[0].longitude != 0)
	    {
		    var latlng = new GLatLng(address[0].latitude, address[0].longitude);
	        var bigMarker = makeTabsMarker(latlng, bigIcon, address);
	        markerManager.addMarker(bigMarker, 11);
			markers.push(bigMarker);

	        var smallMarker = makeTabsMarker(latlng, smallIcon, address);
	        markerManager.addMarker(smallMarker, 1, 10);
        }

     	for(i=0; i<address.length; i++)
     	{
     		var item = address[i];
     		item.number = itemNumber;
		    if(item.latitude != 0 && item.longitude != 0)
		    {
                indexes[indexes.length] = {"marker":(markers.length-1), "tab":i, "number":itemNumber, "small":smallMarker};

				if(!(itemNumber % itemsPerPage)){
					lefthtmlString = '<ul>'
				}
				var itemAddress = item.address;
				if(item.address.length > 50) itemAddress = item.address.substr(0, 50)+'...';
				lefthtmlString += '<div id="item'+itemNumber+'">' +
		                    '<li>' +
		                        (itemNumber + 1) +'. ' +
		                        //'<span><input type="checkbox"/>' + item.brand + '</span><br />' +
					'<span>' + item.brand + '</span><br />' + 
		                        item.address +
		                    '</li>' +
		                '</div>';
				itemNumber++;
				if(!(itemNumber % itemsPerPage)){
					lefthtmlString += '</ul>'
					leftHtml.push(lefthtmlString);
				}
			} else {
				//console.log('Item: '+item.latitude+'x'+item.longtitute+ 'not geocoded!');
			}
		}

		$('resultNumValue').innerHTML = itemNumber + ' '+resources['ResultsTo'];
		showElement('fullscreen');
	}
}

function beforeOpenWindow()
{
	openWindow(this);
	highlightItem(this.item.number);
}

function beforeOpenTabsWindow()
{
	openTabsWindow(this);
	highlightItem(this.item.number);
}

function openWindows(elem)
{
    var index = parseInt(elem.src().id.replace('item', ''));
    if(elem.target().tagName == 'INPUT')
    {
	checkItem(index, elem.target());
    }
    else
    {
	highlightItem(index);
	//var cbx = elem.src().getElementsByTagName('INPUT')[0];
	//if(!cbx.checked)
	//{
	//	cbx.checked = true;
	//	checkItem(index, cbx);
	//}
	if(indexes[index].tab == null) openWindow(markers[indexes[index].marker]);
	else openTabsWindow(markers[indexes[index].marker], indexes[index].tab);
    }
}

function highlightItem(index)
{
    try
    {
	if(selectItem.length)
        {
		if(selectItem[0]==index) return;
		removeElementClass('item'+selectItem[0],'selectedColor');
	}
    } catch(e){}
    toPage(pageOfItem(index));
    addElementClass('item'+index,'selectedColor');
    selectItem[0] = index;
}

function openWindow(marker)
{
	var item = marker.item;
	var windowWidth = 450;
	//if(item.address.length > 12) windowWidth += 100;

        // photos:
	var photosString = [];
	if(item.photos.length > 0)
	{
		photosString = ['<div class="PhotosContainer">'];
		for(i=0; i<item.photos.length; i++) photosString[photosString.length] = ['<img src="preview.php?photo=', item.photos[i].substr(item.photos[i].lastIndexOf('/')+1), '" onclick="showPhoto(\''+item.photos[i]+'\');" alt=""/>'].join('');
		photosString[photosString.length] = '</div>';
		if(item.photos.length > 4 && windowWidth < 450) windowWidth = 450;
	}

	var openingString = '';
	var metroString = '';
	if(!isPublic) openingString = '<p class="addr" style="margin-top:5px;">'+resources['OpeningField']+': '+item.opening+'</p>';
	//if(item.metro != '' && item.metro != null) metroString = '<p class="addr" style="margin-top:5px;">'+resources['MetroField']+': '+item.metro+'</p>';
        if(item.metro != '' && item.metro != null) metroString = '<p class="addr" style="margin-top:5px;"><img src="/locator/resources/images/i-subway.gif" alt="' + resources['MetroField'] + '" border="0" width="13" height="10"/>&nbsp;&nbsp;' + item.metro+'</p>';
        else metroString = '<br/>';
	var linksString = '<div class="linksContainer">';

        // address string:
        var addressDescriptionString = '';
        if (item.addressDescription != '' && item.addressDescription != null) addressDescriptionString = '<p class="addr" style="margin-top:5px;">(' + item.addressDescription + ')</p>';                   

        // phone string:
        var phoneString = '';
        if (item.telephone != null && item.telephone != '') phoneString = '<p class="addr">' + item.telephone.replace(',','<br/>') + '</p>'; 
        
        // if specified working hours:
        if (item.opentime != null && item.opentime != "")
        {
            linksString += "<p class=\"addr\">" + resources["OpenTime"] + ": " + item.opentime + "</p>";
        }        

        // if specified e-mail:
        if (item.email != null && item.email != "")
        {
            linksString += "<p class=\"addr\">" + "E-mail: <a href=\"mailto:" + item.email + "\">" + item.email + "</a></p>";
        }

        // if specified site url:
        if (item.siteurl != null && item.siteurl != "")
        {
            linksString += "<p class=\"addr\">" + "Web: <a href=\"" + item.siteurl + "\" target=\"_blank\">" + item.siteurl + "</a></p>";
        }
        
        // if restaurant has delivery service:
        if (item.hasDelivery != null && item.hasDelivery == "1" && item.deliveryPhone != null && item.deliveryPhone != "")
        {
            if (item.deliveryMenuContentId != null && item.deliveryMenuContentId != "" && item.deliveryMenuContentId != "0")
            {
                linksString += "<p class=\"addr\"><b>" + resources["Delivery"] + ": " + item.deliveryPhone + "</b>&nbsp;&nbsp;<a href=\"javascript:showAttachedContent(" + item.deliveryMenuContentId + ", 'DeliveryMenu')\">" + resources["SeeDeliveryMenuLink"]  +  "</a></p>";
            }
            else
            {
                linksString += "<p class=\"addr\"><b>" + resources["Delivery"] + ": " + item.deliveryPhone + "</b></p>";
            }    
        }

	linksString += '</div>';
	var htmlString = '<div style="width:'+windowWidth+'px;"><div style="float: left; width: 160px;" class="openInfoWindow"><b><a href="javascript:showRestaurantOnTheMap(' + item.id + ')" title="' + resources["AdditionalInfo"] + '">'+item.brand+'</a></b><br/><br/><p class="addr">'+resources['CuisineField']+': '+item.cuisine +'</p><p class="addr">'+item.address+'</p>' + addressDescriptionString + phoneString + '</div><div style="float: right; margin-right: 12px; margin-top:0px; width: 270px">'+metroString+openingString+linksString+'</div>'+photosString.join('')+'</div>';	
	Map.openInfoWindowHtml(new GLatLng(item.latitude, item.longitude), htmlString);
//	Map.panTo(new GLatLng(item.latitude, item.longitude));
}

function openTabsWindow(marker, tab)
{
	var htmlTabs = [];
	var windowWidth = 450;
	//if(marker.address.length > 3) windowWidth = marker.address.length * 100;
	//if(marker.address[0].address.length > 12) windowWidth += 100;
	for(i=0; i<marker.address.length; i++)
	{
		var item = marker.address[i];

		var photosString = [];
		if(item.photos.length > 0)
		{
			photosString = ['<div class="PhotosContainer">'];
			for(j=0; j<item.photos.length; j++) photosString[photosString.length] = '<img src="preview.php?photo='+item.photos[i].substr(item.photos[i].lastIndexOf('/')+1)+'" onclick="showPhoto(\''+item.photos[i]+'\');" alt=""/>';
			photosString[photosString.length] = '</div>';
			if(item.photos.length > 4 && windowWidth < 450) windowWidth = 450;
		}

		var openingString = '';
		var metroString = '';
		if(!isPublic) openingString = '<p class="addr" style="margin-top:5px;">'+resources['OpeningField']+': '+item.opening+'</p>';
		//if(item.metro != '' && item.metro != null) metroString = '<p class="addr" style="margin-top:5px;">'+resources['MetroField']+': '+item.metro+'</p>';
		if(item.metro != '' && item.metro != null) metroString = '<p class="addr" style="margin-top:5px;"><img src="/locator/resources/images/i-subway.gif" alt="' + resources['MetroField'] + '" border="0" width="13" height="10"/>&nbsp;&nbsp;' + item.metro+'</p>';
	        else metroString = '<br/>';
		var linksString = '<div class="linksContainer">';

	        // address string:
        	var addressDescriptionString = '';
	        if (item.addressDescription != '' && item.addressDescription != null) addressDescriptionString = '<p class="addr" style="margin-top:5px;">(' + item.addressDescription + ')</p>';                   

        	// phone string:
	        var phoneString = '';
        	if (item.telephone != null && item.telephone != '') phoneString = '<p class="addr">' + item.telephone.replace(',','<br/>') + '</p>'; 

	        // if specified working hours:
        	if (item.opentime != null && item.opentime != "")
        	{
            	    linksString += "<p class=\"addr\">" + resources["OpenTime"] + ": " + item.opentime + "</p>";
        	}        

	        // if specified e-mail:
        	if (item.email != null && item.email != "")
        	{
            	    linksString += "<p class=\"addr\">" + "E-mail: <a href=\"mailto:" + item.email + "\">" + item.email + "</a></p>";
        	}

                // if specified site url:
                if (item.siteurl != null && item.siteurl != "")
                {
                    linksString += "<p class=\"addr\">" + "Web: <a href=\"" + item.siteurl + "\" target=\"_blank\">" + item.siteurl + "</a></p>";
                }
                
                // if restaurant has delivery service:
                if (item.hasDelivery != null && item.hasDelivery == "1" && item.deliveryPhone != null && item.deliveryPhone != "")
                {
                    if (item.deliveryMenuContentId != null && item.deliveryMenuContentId != "" && item.deliveryMenuContentId != "0")
                    {
                        linksString += "<p class=\"addr\"><b>" + resources["Delivery"] + ": " + item.deliveryPhone + "</b>&nbsp;&nbsp;<a href=\"javascript:showAttachedContent(" + item.deliveryMenuContentId + ", 'DeliveryMenu')\">" + resources["SeeDeliveryMenuLink"]  +  "</a></p>";
                    }
                    else
                    {
                        linksString += "<p class=\"addr\"><b>" + resources["Delivery"] + ": " + item.deliveryPhone + "</b></p>";
                    }    
                }

		linksString += '</div>';
		var brandName = item.brand;
		if(brandName.length > 11) brandName = brandName.substr(0, 10)+'..';
		htmlTabs[htmlTabs.length] = new GInfoWindowTab(brandName, '<div style="width:'+windowWidth+'px;"><div style="float: left; width: 160px;" class="openInfoWindow"><b><a href="javascript:showRestaurantOnTheMap(' + item.id + ')" title="' + resources["AdditionalInfo"] + '">'+item.brand+'</a></b><br/><br/><p class="addr">'+resources['CuisineField']+': '+item.cuisine +'</p><p class="addr">'+item.address+'</p>' + addressDescriptionString + phoneString + '</div><div style="float: right; margin-right: 12px; margin-top:0px; width: 270px">'+metroString+openingString+linksString+'</div>'+photosString.join('')+'</div>');
	}
	//Map.panTo(new GLatLng(marker.address[0].latitude, marker.address[0].longitude));
	if(tab != null)
	{
                Map.openInfoWindowTabs(new GLatLng(marker.address[0].latitude, marker.address[0].longitude), htmlTabs, {"selectedTab":tab}) 
		//marker.openInfoWindowTabs(htmlTabs, {"selectedTab":tab});
	}
	else
	{
                Map.openInfoWindowTabs(new GLatLng(marker.address[0].latitude, marker.address[0].longitude), htmlTabs) 
		//marker.openInfoWindowTabs(htmlTabs);
	}
}

function checkItem(num, cbx)
{
	clearDistance();
	if(cbx.checked)
	{
		if(checkedItems.length == 0) hideAll();
		markers[indexes[num].marker].show();
		indexes[num].small.show();
		checkedItems.push(num);
	}
	else
	{
		markers[indexes[num].marker].hide();
		indexes[num].small.hide();
		checkedItems.splice(checkedItems.indexOf(num), 1);
		if(checkedItems.length == 0) showAll();
	}
	//if(checkedItems.length > 1 && checkedItems.length < 7) $('distanceIcon').style.visibility = 'visible';
	//else $('distanceIcon').style.visibility = 'hidden';
}

function checkAll()
{
    checkedItems = [];
    clearDistance();
    //$('distanceIcon').style.visibility = 'hidden';
    for(i=0; i<indexes.length; i++)
    {
    	checkedItems.push(indexes[i].number);
    }
    var items = $('lis1').getElementsByTagName('INPUT');
    for(i=0; i<items.length; i++) items[i].checked = true;
    showAll();
}

function unCheckAll()
{
    checkedItems = [];
    clearDistance();
    //$('distanceIcon').style.visibility = 'hidden';
    var items = $('lis1').getElementsByTagName('INPUT');
    for(i=0; i<items.length; i++) items[i].checked = false;
    showAll();
}

function hideAll()
{
    for(i=0; i<markers.length; i++)
    {
    	markers[i].hide();
    	indexes[markers[i].item.number].small.hide();
    }
}

function showAll()
{
    for(i=0; i<markers.length; i++)
    {
    	markers[i].show();
    	indexes[markers[i].item.number].small.show();
    }
}

function zoomChanged(z1, z2)
{
	if(!z1)
	{
		if(checkedItems.length == 0 || checkedItems.length > (indexes.length - 1)) return;
		hideAll();
		for(i=0; i<checkedItems.length; i++)
		{
			markers[indexes[checkedItems[i]].marker].show();
	    	indexes[checkedItems[i]].small.show();
		}
		return;
	}
	if((z1 < 11 && z2 > 10) || (z1 > 10 && z2 < 11))
	{
		setTimeout("zoomChanged()", 50);
	}
}

function fillCheckboxes()
{
	for(i=0; i<checkedItems.length; i++)
	{
		if($('item'+checkedItems[i]) != null)
		{
			$('item'+checkedItems[i]).getElementsByTagName('input')[0].checked = true;
		}
	}
}

function clearDistance()
{
	for(i=0; i<pairs.length; i++)
	{
		if(pairs[i].line != null) Map.removeOverlay(pairs[i].line);
		if(pairs[i].marker != null) Map.removeOverlay(pairs[i].marker);
	}
	pairs = [];
	checkedMarkers = [];
}

function showDistance()
{
	clearDistance();
	checkMarkers();
	Map.closeInfoWindow();
	var p1, p2;
	for(i=0; i<checkedMarkers.length-1; i++)
	{
		for(j=i+1; j<checkedMarkers.length; j++)
		{
			pairs.push({"point1":checkedMarkers[i].getPoint(), "point2":checkedMarkers[j].getPoint(), "item1":checkedMarkers[i].item, "item2":checkedMarkers[j].item,  "distance":null, "line":null, "marker":null, "directions":(new GDirections())});
			getDistance(pairs.length-1);
		}
	}
}

function checkMarkers()
{
	checkedMarkers = [];
	for(i=0; i<checkedItems.length; i++)
	{
		var marker = markers[indexes[checkedItems[i]].marker];
		checkedMarkers.push(marker);
	}
}

function getDistance(num)
{
    pairs[num].directions.loadFromWaypoints([pairs[num].point1, pairs[num].point2], {"getPolyline":true});
  	checkDirectionsStatus(num, 0);
}

function checkDirectionsStatus(num, iter)
{
	if(pairs[num].point1.equals(pairs[num].point2)) return;
	var st;
	try
	{
		st = pairs[num].directions.getStatus().code;
	}
	catch(e)
	{
		if(iter > 2)
		{			checkStraightLine(num);
			return;		}
		setTimeout("checkDirectionsStatus("+num+", "+(iter+1)+")", 1000);
		return;
	}
	if(st != 200)
	{
		if(iter > 2)
		{
			checkStraightLine(num);
			return;
		}
		setTimeout("checkDirectionsStatus("+num+", "+(iter+1)+")", 1000);
		return;
	}
	if(num > 9) var color = lineColors[(0 + Math.floor(10*Math.random()))]
	else var color = lineColors[num];
	pairs[num].distance = pairs[num].directions.getDistance().html;
	pairs[num].line = pairs[num].directions.getPolyline();
	Map.addOverlay(pairs[num].line);
	pairs[num].line.setStrokeStyle({"color":color, "opacity":0.6});
	var lineCenter = pairs[num].line.getVertex(Math.floor(pairs[num].line.getVertexCount()/2));
	var distIcon = new GIcon();
	distIcon.image = '/locator/resources/images/dist.png';
	distIcon.iconSize = new GSize(40, 18);
	distIcon.iconAnchor = new GPoint(20, 9);
    pairs[num].marker = new LabeledMarker(lineCenter, {icon: distIcon, labelText: pairs[num].distance.replace('&nbsp;'+resources['KM'], ''), labelOffset: new GSize(-16, -10), labelClass: 'DistanceLabel', zIndexProcess:function(){return 100;}});
    GEvent.addListener(pairs[num].marker, "click", function() {
  		Map.openInfoWindowHtml(lineCenter, '<div style="width:400px;">'+resources['DistanceBetween']+' <b>'+pairs[num].item1.brand+' ('+pairs[num].item1.address+')</b> '+resources['And']+' <b>'+pairs[num].item2.brand+' ('+pairs[num].item2.address+')</b> = <b>'+pairs[num].distance+'</b></div>');
	});
    Map.addOverlay(pairs[num].marker);
}

function checkStraightLine(num)
{
	if(num > 9) var color = lineColors[(0 + Math.floor(10*Math.random()))]
	else var color = lineColors[num];
	pairs[num].line = new GPolyline([pairs[num].point1,pairs[num].point2], color, 5, 0.6);
	var l = pairs[num].line.getLength();
	pairs[num].distance = Math.floor(l/1000) + Math.abs(Math.round((Math.floor(l/1000) - l/1000)*10)/10);
	Map.addOverlay(pairs[num].line);
	var lineCenter = pairs[num].line.getBounds().getCenter();
	var distIcon = new GIcon();
	distIcon.image = "/locator/resources/images/dist.png";
	distIcon.iconSize = new GSize(40, 18);
	distIcon.iconAnchor = new GPoint(20, 9);
    pairs[num].marker = new LabeledMarker(lineCenter, {icon: distIcon, labelText: pairs[num].distance.replace('&nbsp;'+resources['KM'], ''), labelOffset: new GSize(-16, -10), labelClass: 'DistanceLabel', zIndexProcess:function(){return 100;}});
    GEvent.addListener(pairs[num].marker, "click", function() {
  		Map.openInfoWindowHtml(lineCenter, '<div style="width:400px;">'+resources['DistanceBetween']+' <b>'+pairs[num].item1.brand+' ('+pairs[num].item1.address+')</b> '+resources['And']+' <b>'+pairs[num].item2.brand+' ('+pairs[num].item2.address+')</b> = <b>'+pairs[num].distance+'</b>&nbsp;'+resources['KM']+'</div>');
	});
    Map.addOverlay(pairs[num].marker);
}

// initialize brands:
function initializeBrands(ctx)
{
    paraString.brands = "";

    var ul = getFirstParentByTagAndClassName(ctx, 'ul');

    // create parastring:
    forEach
    (
	getElementsByTagAndClassName('input', null, ul),
        function(i) 
        {
            if (i.value != "" && paraString.brands != "all" && i.checked)
            {
                if (paraString.brands != "")
                    paraString.brands += ",";
                paraString.brands += i.value;
            }
            else if (i.checked && i.value == "")
            {
                paraString.brands = "all";
            }
        }
    ); 
}

// initialize cuisines:
function initializeCuisines(ctx)
{
    paraString.cuisines = "";

    var ul = getFirstParentByTagAndClassName(ctx, 'ul');

    // create parastring:
    forEach
    (
	getElementsByTagAndClassName('input', null, ul),
        function(i) 
        {
            if (i.value != "" && paraString.cuisines != "all" && i.checked)
            {
                if (paraString.cuisines != "")
                    paraString.cuisines += ",";
                paraString.cuisines += i.value;
            }
            else if (i.checked && i.value == "")
            {
                paraString.cuisines = "all";
            }
        }
    ); 
}

// checkbox function for brands:
function checkBrands(ctx)
{
    paraString.brands = "";

    var ul = getFirstParentByTagAndClassName(ctx, 'ul');

    // if all values:
    if (ctx.value == "")
    {
        paraString._brandsChecked = ctx.checked;
        // process over all elements:

        forEach
        (
             getElementsByTagAndClassName('input', null, ul),
             function(i) 
             {
                i.checked = ctx.checked;
                if(i != ctx && i.value != '') i.checked = paraString._brandsChecked;
             }
        );              
    }
    else
    {
        forEach
        (
             getElementsByTagAndClassName('input', null, ul),
             function(i) 
             {
                if (i.value == "")
                {
                    i.checked = false;
                }
             }
        );                      
    }

    // create parastring:
    forEach
    (
	getElementsByTagAndClassName('input', null, ul),
        function(i) 
        {
            if (i.value != "" && paraString.brands != "all" && i.checked)
            {
                if (paraString.brands != "")
                    paraString.brands += ",";
                paraString.brands += i.value;
            }
            else if (i.checked && i.value == "")
            {
                paraString.brands = "all";
            }
        }
    ); 
}

// checkbox function for cuisines:
function checkCuisines(ctx)
{
    paraString.cuisines = "";

    var ul = getFirstParentByTagAndClassName(ctx, 'ul');

    // if all values:
    if (ctx.value == "")
    {
        paraString._cuisinesChecked = ctx.checked;
        // process over all elements:

        forEach
        (
             getElementsByTagAndClassName('input', null, ul),
             function(i) 
             {
                i.checked = ctx.checked;
                if(i != ctx && i.value != '') i.checked = paraString._cuisinesChecked;
             }
        );              
    }
    else
    {
        forEach
        (
             getElementsByTagAndClassName('input', null, ul),
             function(i) 
             {
                if (i.value == "")
                {
                    i.checked = false;
                }
             }
        );                      
    }

    // create parastring:
    forEach
    (
	getElementsByTagAndClassName('input', null, ul),
        function(i) 
        {
            if (i.value != "" && paraString.cuisines != "all" && i.checked)
            {
                if (paraString.cuisines != "")
                    paraString.cuisines += ",";
                paraString.cuisines += i.value;
            }
            else if (i.checked && i.value == "")
            {
                paraString.cuisines = "all";
            }
        }
    ); 
}

function checkBox(ctx, groupId) {
    var vv = ctx.value;
    var li = getFirstParentByTagAndClassName(ctx, 'li');
    var ul = getFirstParentByTagAndClassName(ctx, 'ul');
    groupId = groupId || ul.id;
    if(ctx.checked) {
        paraString[groupId].push(vv);
        ctx.pindex = paraString[groupId].length - 1;
        addElementClass(li, 'checked');
    } else {
        var checkboxes = ul.getElementsByTagName('INPUT');
        checkboxes[checkboxes.length - 1].checked = false;
        paraString[groupId][ctx.pindex] = '';
        removeElementClass(li, 'checked');
    }
}

function checkBoxAll(ctx){
    var ul = getFirstParentByTagAndClassName(ctx, 'ul');
    forEach(
        getElementsByTagAndClassName('input', null, ul),
        function(i) {
            i.checked = ctx.checked;
            if(i != ctx && i.value != '') i.onclick();
        }
    );
}

function checkRadio(ctx){
    var vv = ctx.value;

    if(ctx.value == 'mmyyyy'){

	$('month').disabled = false;
	$('year').disabled = false;
	return;
	}

	if(ctx.checked){
	$('month').disabled = true;
	$('year').disabled = true;
	paraString[ctx.parentNode.parentNode.id]  = vv;
    }
}

// initialize location:
function initializeCity(ctx)
{     
    paraString.cityName = ctx.options[ctx.selectedIndex].text;
}

// change location (city):
function changeLocation(ctx, metroControl, metroPanel, metros)
{
    var vv = ctx.value;
    paraString.city = vv;
    paraString.cityName = ctx.options[ctx.selectedIndex].text;

    if (ctx.options[ctx.selectedIndex].value == "1")
    {
        document.getElementById("head_none").innerHTML = resources['RestaurantLocator'];
    }
    else
    {
        document.getElementById("head_none").innerHTML = resources['RestaurantLocatorNoDelivery'];
    }

    // clear old entries:
    metroControl.selectedIndex = 0;
    var lastIndex = metroControl.options.length-1;
    for (var i = lastIndex; i > 0; i--)
    {
        metroControl.options[i] = null;
    }        

    // check metro:
    if (metros && metros[vv])
    {
        for (var i = 0; i < metros[vv].length; i++)
        {
            metroControl.options[metroControl.options.length] = new Option(metros[vv][i], metros[vv][i]);
        }
        metroPanel.style.display="";
    }
    else
    {
        metroPanel.style.display="none";
    }

    paraString.metro = "";
}

function makeActive(ul) {
    map(
        function(l) {
            removeElement(l);
        },
        getElementsByTagAndClassName('div', 'loader', ul.parentNode)
    );
    removeElementClass(ul, 'inactive');
}

function makeInactive(ul) {
    var loader = DIV({'class': 'loader'});
    loader.innerHTML = '<img width="16" height="16" alt="'+resources['Loading']+'" src="/locator/resources/images/loader.gif"/>';
    insertSiblingNodesBefore(ul, loader);
    addElementClass(ul, 'inactive');
}

// search feed:
function searchFeed()
{
    showBlocker();
    Map.clearOverlays();
    loadFeed(makefeedString());
}

function setCenterToCity()
{
        // if specified coordinates for the city:
        if (__citiesCoordinates && __citiesCoordinates[paraString.city])
        {
            Map.setCenter(new GLatLng(__citiesCoordinates[paraString.city]["latitude"], __citiesCoordinates[paraString.city]["longitude"]), 11);
            searchPoint = new GLatLng(__citiesCoordinates[paraString.city]["latitude"], __citiesCoordinates[paraString.city]["longitude"]);
        }
        else
	{     	
            geocoder.getLatLng(
	         paraString.cityName,
		 function(point) 
                 {
		      if (!point) Map.setCenter(centerPoint, 11);
		      else 
                      {
                         Map.setCenter(point, 11);
                         searchPoint = point;

                      }
		 }
	    );	 
	}
}

function makefeedString()
{
    // create feed url:
    var feedString = feedUrl + "?city=" + paraString.city + "&location="+encodeURI(paraString.location)+"&lang="+lang + "&brand=" + paraString.brands + "&cuisine=" + encodeURI(paraString.cuisines) + "&metro=" + encodeURI(paraString.metro) + "&hasDelivery=" + paraString.hasDelivery;

    // if specified address:
    if (paraString.location && paraString.location != "")
    {
	geocoder.getLatLng(
	    paraString.cityName+ ', '+paraString.location,
            function(point) 
            {
                searchAdress = paraString.cityName+ ', '+paraString.location;
	        if (!point) setCenterToCity();
		else
		{
		    Map.setCenter(point, 13);	            
	            searchPoint = point;
		}
	    }
	);

    }
    else if (paraString.metro && paraString.metro != "")
    {
       	geocoder.getLatLng(
	    paraString.cityName+ ', Subway '+paraString.metro,
            function(point) 
            {
                searchAdress = paraString.cityName+ ', ' + resources['Loading'] + ' ' + paraString.metro;
	        if (!point) setCenterToCity();
		else
		{
		    Map.setCenter(point, 13);
	            searchPoint = point;
		}
	    }
	);

    }
    // set center point to city:
    else
    {
        setCenterToCity();
        searchAdress = paraString.cityName;
    }


    return feedString;
}

// change address:
function changeAddress(ctx, metroControl)
{
    paraString.location = ctx.value;
    paraString.metro = "";
    metroControl.selectedIndex = 0;
}

// change delivery switch:
function changeDeliverySwitch(ctx)
{
    if (ctx.checked)
    {
        paraString.hasDelivery = "1";
    }
    else
    {
        paraString.hasDelivery = "";
    }
}

// change metro:
function changeMetro(ctx, locationControl)
{
    paraString.metro = ctx.options[ctx.selectedIndex].value;
    locationControl.value = "";
    paraString.location = "";
}

function saveAs(st,g){
	var feedurl = makefeedString() + st;
    if (g)
        document.location.href = feedurl;
    else
        window.open(feedurl);
}

function unbreakIE(){
	var bodyWidth = document.body.clientWidth;
	var bodyHeight = document.documentElement.clientHeight;
if(!fullScreenOpen) {
    // var left = $('m1').offsetLeft;
    // var top = $('m1').offsetTop;
    // setStyle('lis',{'top':(top + 24) + 'px', 'left': (left + 8)+ 'px'});
    // if(isSmallMap){
    // setStyle('map',{'top': (top + 24) + 'px', 'left': (left+ 229) + 'px'});
    // }else {
    // setStyle('map',{'top': (top + 24) + 'px', 'left': (left+ 23) + 'px'});
    // }
}else{
     setStyle('map',{'width': (bodyWidth- 249) + 'px', 'height': bodyHeight + 'px'});
     setStyle('lis1',{'height': (bodyHeight-22) + 'px'});
}
}

/**
* Toggles left results column
*/
function  changeMapSize(){
  var em = $('sidebar');
  var en = $('main');
  if(parseInt(en.style.width) == 100){
    em.style.display  = 'block'
	en.style.width  = '80%'
  } else {
    em.style.display  = 'none'
	en.style.width  = '100%'
  }
  Map.checkResize();
}

/**
* Toggles fullscreen mode
*/
function sc(){
  var em = $('wrap');
  if(isFullScreen){
	$('wrapper').style.width  = '930px';
	$('wrapper').style.height = 'auto';
    em.style.height = '450px'
	em.style.position = 'relative'
	$('band').style.display = 'block';
	$('footer').style.display = 'block';
	$('head_none').style.display = 'block';
	$('m2').style.display = 'block';
	isFullScreen = false;
  } else {
	$('wrapper').style.width  = '100%';
	$('wrapper').style.height = '100%';
	em.style.height = '100%'
	em.style.position = 'absolute'
	em.style.top = '0'
	em.style.left = '0'
	$('band').style.display = 'none';
	$('footer').style.display = 'none';
	$('head_none').style.display = 'none';
	$('m2').style.display = 'none';
	isFullScreen = true;
  }
  Map.checkResize();
}

/* show blocker screen */
function showBlocker()
{
    CMF.showLB();
}

/* hide blocker screen */
function hideBlocker()
{
    CMF.closeLB();
}

// Distance to address
function distanceToAddress()
{
	var addr = $('distanceToAddress').value;
	geocoder.getLatLng(
	    paraString.location+', '+addr,
	    function(point) {
	      if (!point) {$('distanceToAddress').value = resources['AddressNotFound'];}
	      else
	      {
	      	directionsPoint = {"point":point, "address":addr, "directions":(new GDirections())};
	      	directionsPoint.directions.loadFromWaypoints([searchPoint, point], {"getPolyline":true});
  			checkDistanceStatus(0);
	      }
		}
	);
}

function checkDistanceStatus(iter)
{
	var code;
	try{ code = directionsPoint.directions.getStatus().code; }
	catch(e) { setTimeout("checkDistanceStatus("+(iter+1)+")", 1000); return; }
	if(directionsPoint.directions.getStatus().code != 200)
	{
		if(iter > 2)
		{
			checkStraightLineDistance();
			return;
		}
		setTimeout("checkDistanceStatus("+(iter+1)+")", 1000);
		return;
	}
	var distance = directionsPoint.directions.getDistance().html;
	var line = directionsPoint.directions.getPolyline();
	Map.addOverlay(line);
	Map.closeInfoWindow();
	var bounds = line.getBounds();
	var lineZoom = Map.getBoundsZoomLevel(bounds);
	var boundsCenter = bounds.getCenter();
	var lineCenter = line.getVertex(Math.floor(line.getVertexCount()/2));
	Map.setCenter(boundsCenter, lineZoom);
	var distIcon = new GIcon();
	distIcon.image = "http://gadgets.sterno.ru/rosinter/dist.php?text="+distance.replace('&nbsp;км', '');
	distIcon.iconSize = new GSize(40, 18);
	distIcon.iconAnchor = new GPoint(20, 9);
    var marker = new GMarker(lineCenter, {icon: distIcon, zIndexProcess:function(){return 10000;}});
    GEvent.addListener(marker, "click", function() {
  		Map.openInfoWindowHtml(lineCenter, '<div style="width:400px;">'+resources['DistanceBetween']+' <b>'+paraString.metro+'</b> '+resources['And']+' <b>'+directionsPoint.address+'</b> = <b>'+distance+'</b></div>');
	});
    Map.addOverlay(marker);
}

function checkStraightLineDistance()
{
	var line = new GPolyline([searchPoint,directionsPoint.point]);
	var l = line.getLength();
	var distance = Math.floor(l/1000) + Math.abs(Math.round((Math.floor(l/1000) - l/1000)*10)/10);
	Map.addOverlay(line);
	Map.closeInfoWindow();
	var lineZoom = Map.getBoundsZoomLevel(line.getBounds());
	var lineCenter = line.getBounds().getCenter();
	Map.setCenter(lineCenter, lineZoom);
	var distIcon = new GIcon();
	distIcon.image = "http://gadgets.sterno.ru/rosinter/dist.php?text="+distance;
	distIcon.iconSize = new GSize(40, 18);
	distIcon.iconAnchor = new GPoint(20, 9);
    var marker = new GMarker(lineCenter, {icon: distIcon, zIndexProcess:function(){return 10000;}});
    GEvent.addListener(marker, "click", function() {
  		Map.openInfoWindowHtml(lineCenter, '<div style="width:400px;">'+resources['DistanceBetween']+' <b>'+paraString.metro+'</b> '+resources['And']+' <b>'+directionsPoint.address+'</b> = <b>'+distance+'</b>&nbsp;км</div>');
	});
    Map.addOverlay(marker);
}

function showPhoto(src)
{
	wrapperCSS = $('wrapper').style.cssText;
	$('wrapper').style.cssText = wrapperCSS + 'filter:alpha(opacity=50); opacity: 0.5; -moz-opacity:0.5;';
	$('whiteScreen').style.display = 'block';
	$('photoWrapper').innerHTML = '<img src="'+src+'" alt="" />';
	$('photoWrapper').style.display = 'block';
}

function hidePhoto(){
	$('photoWrapper').style.display = 'none';
	$('wrapper').style.cssText = wrapperCSS;
	$('whiteScreen').style.display = 'none';
}


// Rosinter menu functions
function openLangMenu() {
 document.getElementById("menulang").style.visibility = "visible";
}

function closeLangMenu() {
 document.getElementById("menulang").style.visibility = "hidden";
}

function closeElement(event, elementId){
 var mCur = mousePageXY(event);
 var el = document.getElementById(elementId);

 var eX = el.offsetLeft;
 var eY = el.offsetTop;
 var eW = el.offsetWidth;
 var eH = el.offsetHeight;

 var mX = mCur.x;
 var mY = mCur.y;

 if(mX < (eX+3) || mX > (eX+eW-3) || mY < (eY+3) || mY > (eY+eH-3)){
  el.style.visibility="hidden";
 }
}

function mousePageXY(e){
var x = 0, y = 0;

if (!e) e = window.event;

if (e.pageX || e.pageY)
{
x = e.pageX;
y = e.pageY;
}
else if (e.clientX || e.clientY)
{
x = e.clientX + (document.documentElement.scrollLeft || document.body.scrollLeft) - document.documentElement.clientLeft;
y = e.clientY + (document.documentElement.scrollTop || document.body.scrollTop) - document.documentElement.clientTop;
}

return {"x":x, "y":y};
}

function redirectToLanguage(l)
{	var url = host+'?lang='+l;
	if(query['location']) url += '&location='+query['location'];
	if(query['brand']) url += '&brand='+query['brand'];
        if(query['city']) url += '&city='+query['city'];
        if(query['mode']) url += '&mode='+query['mode'];
	window.location.href = url;
}

// switch to list:
function switchToList()
{ 
    showBlocker();

    // create url:
    var feedString = "RestaurantsList.aspx?city=" + paraString.city + "&location="+encodeURI(paraString.location)+"&lang="+lang + "&brand=" + paraString.brands + "&cuisine=" + encodeURI(paraString.cuisines) + "&metro=" + encodeURI(paraString.metro) + "&hasDelivery=" + paraString.hasDelivery;

    AJAXLib.ajax({
         type: "GET",
         url: feedString,

            // on complete:
            complete: function(response, status)
            {
	        $("wrap").style.display = "none";
                $("listWrap").innerHTML = response.responseText;
                $("wrap_list").style.display = "block";
		$("searchFormBlock").style.paddingTop = "10px";
                $("showAsList").style.display = "none";
                $("showAsMap").style.display = "";
                paraString.view_mode = "list";
                hideBlocker();    
            }
    });                
}

// search list:
function searchList()
{
    showBlocker();

    // create url:
    var feedString = "RestaurantsList.aspx?city=" + paraString.city + "&location="+encodeURI(paraString.location)+"&lang="+lang + "&brand=" + paraString.brands + "&cuisine=" + encodeURI(paraString.cuisines) + "&metro=" + encodeURI(paraString.metro) + "&hasDelivery=" + paraString.hasDelivery;

    AJAXLib.ajax({
         type: "GET",
         url: feedString,

            // on complete:
            complete: function(response, status)
            {
                $("listWrap").innerHTML = response.responseText;
                hideBlocker();    
            }
    });                
}

// switch to map:
function switchToMap()
{ 
    showBlocker();
    $("wrap").style.display = "";
    $("wrap_list").style.display = "none";
    $("showAsList").style.display = "";
    $("showAsMap").style.display = "none";
    $("searchFormBlock").style.paddingTop = "32px";
    paraString.view_mode = "map";
    searchFeed();
}

// search:
function searchRestaurants()
{
    if (paraString.view_mode == "map")
        searchFeed();
    else if (paraString.view_mode == "list")
        searchList();
}

// show restaurant on the map:
function showRestaurantOnTheMap(id)
{
    window.open("ViewLocation.aspx?Id=" + id + "&lang=" + lang, "", "location=1,status=0,scrollbars=1,width=680px,height=650px");
}

// show attached content:
function showAttachedContent(id, labelName)
{
    window.open("ShowAttachedContent.aspx?Id=" + id + "&lang=" + lang + "&labelName=" + labelName, "", "location=1,status=0,scrollbars=1,width=800px,height=650px,resizable=1");
}
