//картинки для предлоада
var imgList = [
  '/images/ico-tw.gif',
  '/images/ico-lj.gif',
  '/images/ico-fb.gif'
];
var clickXY = [];
var idCities = { 1: 'msk', 2: 'spb' }
var SRCH_TEXT = SF_CULTURE == 'ru' ? 'введите имя' : 'enter name';
var mapLoaded = false;
var metroLoaded = false;
var getMetroUrl = 'http://artguide.ru/'+SF_CULTURE+'/'+CITY+'/default/metro';

$(function(){

  $('#global-loading').hide();
  $('.map-wrap').bind('click', function(e){clickXY = [e.pageX, e.pageY]});

  $('#gmap-info span a').click(function(){$('#gmap-info').hide(); return false;});
  $('a.print','#header').click(function(){window.print()});

  $('#slider','#map').slider({
    orientation: 'vertical',
    value: 100,
    slide: function(e, ui){
      $('#metromap-pop').scrollTop(306 * (100 - ui.value) / 100 );
    }
  });

  $('#list-slider','#map').slider({
    orientation: 'vertical',
    value: 100,
    slide: function(e, ui){

      $('div.list-wrap', '#map').scrollTop(($('div.list-wrap ul', '#map').height() + $('div.list-wrap h4', '#map').height() - 478) * (100 - ui.value) / 100 );

    }
  });

  $('#list-slider','#map').slider('disable');

  //city select
  $('a.city','div.city-select').click(function(){
    
    var $cityLink = $(this);

    $cityLink.toggleClass('opened');
    if ($cityLink.hasClass('opened')) {
      $cityLink.siblings('span.city-list').css({display: 'block', top: $cityLink.height() + 16});
    } else {
      $cityLink.siblings('span.city-list').css({display: 'none'});
    }

    $('body').bind('click.city',function(e){
      if (($(e.target).parents('.city').length == 0 && !$(e.target).hasClass('city')) ||
          ($(e.target).parents('.city-list').length == 0 && !$(e.target).hasClass('city-list'))) {
        $cityLink.removeClass('opened');
        $cityLink.siblings('span.city-list').css({display: 'none'});
        $(this).unbind('click.city');
      }
    });

    return false;
  });


  // enable autocomplete
  $('input.autocomplete').each(function() {
    var $input = $(this);
    var $target = $('#' + $input.attr('set_id'));

    if (typeof $input.autocomplete != 'function') {
      return false;
    }

    if (!$target.length) {
      return true;
    }

    $target.attr('text_value', $input.val());

    $input.autocomplete($input.attr('source'), {
      matchSubset: 0,
      matchContains: 0,
      cacheLength: 0,
      maxItemsToShow: 10,
      selectFirst: true,
      width: 239,
      onItemSelect: function(item) {
        if (item.extra) {
          var val = String($input.val()).replace(/\s*<em>.*<\/em>/, '');
          $target.val(item.extra[0]).attr('text_value', val);
          $input.val(val);
        }
        else {
          $target.val('').attr('text_value', '')
        }
        $input.trigger('change.auto');
      }
    }).change(function() {
      $input.val($target.attr('text_value'));
    });
  });


  $('ul.service-nav a.feedback-call','#footer').click(function(){
    $('#new-place').hide();
    if ($('#feedback').is(':visible')) {
      $('body').unbind('click.feedback');
      $('#feedback').hide();
    }
    else {
      $('input[type=text], textarea', '#feedback').val('');
      $('#feedback').show().find('input[type=text]').focus();

      $('body').bind('click.feedback',function(e){
        if ($(e.target).parents('#feedback').length == 0 && e.target.id != 'feedback') {
          $('#feedback').hide();
          $(this).unbind('click.feedback');
        }
      });
    }
    return false;
  });

  $('input[type=submit]','#feedback').click(function(){
    var form = $(this).parents('form');
    var where = form.attr('action');
    $.post(where, form.serialize(), function(){
      $('body').trigger('click.feedback');
    });
    return false;
  });

  $('ul.service-nav a.new-place-call','#footer').click(function(){
    $('#feedback').hide();
    if ($('#new-place').is(':visible')) {      
      $('body').unbind('click.newplace');
      $('#new-place').hide();
    }
    else {
      $('input[type=text], textarea', '#new-place').val('');
      $('#new-place').css({
        marginLeft: ($(this).parents('ul').width() - $('#new-place').width() - 55) + 'px'
      });
      $('#new-place').show().find('input[type=text]:first').focus();

      $('body').bind('click.new-place',function(e){
        if ($(e.target).parents('#new-place').length == 0 && e.target.id != 'new-place') {
          $('#new-place').hide();
          $(this).unbind('click.new-place');
        }
      });
    }
    return false;
  });

  $('input[type=submit]','#new-place').click(function(){
    var form = $(this).parents('form');
    var where = form.attr('action');
    if ($('#np-pic').val() != '') {
      form.submit();
    } else {
      $.post(where, form.serialize(), function(){
        $('body').trigger('click.new-place');
      });
      return false;
    }
  });

  $('a.cal-show','#filter').click(function(){    
    return false;
  });

  $('.right a','#filter').click(function(){    
    return false;
  });

   //
  $(window).scroll(function(){
    
    //$('#map').css('top', ($('#fixed-nav').offset().top + 100) + 'px');

    if (!(!(-[1,]) && ($.browser.version == '6.0'))) {
      scrollNav();
      filterNav();
    }
  });

  if (!(!(-[1,]) && ($.browser.version == '6.0'))) {
    scrollNav();
    filterNav();
  }


  //fixed nav map filter
  $('a.switch','#fixed-nav').click(mapOpen);

  $('a.close','#map').click(function(){
    $('#map').hide();
    $('body').unbind('click.map');
    return false;
  });

  $('input', '#map').click(function(){

    if (this.className == 'save') {
      //сохранить состояние фильтров и применить их
      if ($('div.sub-wrap','#map').is(':visible')) {
        $('#coords').val('');
      } else {
        $('#stations').val('');
      }
      var params = { 'coords': $('#coords').val(), 'stations': $('#stations').val() };
      updateFilter(params);

      $('a.switch','#fixed-nav').addClass('on');
      $('a.close','#map').trigger('click');
    } else {
      //обнулить фильтры
      var params = {'coords': null, 'stations': null};
      $('#metro-list li a').trigger('click');

      updateFilter(params);
      
      $('a.close','#map').trigger('click');
      $('a.switch','#fixed-nav').removeClass('on');
    }
    return false;
  });

  $('li.map-switch a','#map').live('click',function(){

    var text = $(this).text();
    $(this).parent().html(text);
    $('li.sub-switch','#map').wrapInner('<a href="#"></a>');
    $('div.sub-wrap','#map').hide();
    $('div.map-wrap','#map').show();

    return false;
  });

  $('li.sub-switch a','#map').live('click',function(){
    
    var text = $(this).text();
    $(this).parent().html(text);
    $('li.map-switch','#map').wrapInner('<a href="#"></a>');
    $('div.map-wrap','#map').hide();
    
    if ($('#metroimage').attr('height') < 498) {$('#slider','#map').hide();}
    sliderOnOff(true);
    
    $('div.sub-wrap','#map').show();

    return false;
  });

 $.preloadImages(imgList);

 $('div.gallery-box','#content').gallery({
     slidePrevBtn: 'a.prev'
    ,slideNextBtn: 'a.next'
    ,slideBox: 'div.slider-box'
    ,slideHolder: 'div.thumbs'
    ,slideItem: 'div.thumb'
    ,showButtonsAlways: true
    ,shift: 76
 });

 if ($('#coords').val() || $('#stations').val()) {
   $('a.switch','#fixed-nav').addClass('on');
 }
 
});

$.preloadImages = function(images) {
  for (var i = images.length; i--; ) {
     $("<img>").attr("src", images[i]);
  }
};


var time = {
  incTime: function(oldTime) {
    var t = oldTime.split(':');
    var hour = parseInt(t[0],10);

    switch(t[1]){
      case '59':
        return '00:30';
      break;

      case '30':
       if (hour == 23) {
         return '23:59';
       }
       else {
         if (hour < 9) {
           return '0' + (hour + 1) + ':00';
         } else {
           return (hour + 1) + ':00';
         }
        }
      break;

      default:
        return t[0] + ':30';
    }
  },

  decTime: function(oldTime) {
    var t = oldTime.split(':');
    var hour = parseInt(t[0],10);

    switch(t[1]){
      case '59':
        return '23:30';
      break;

      case '00':

       if (hour < 11) {
         return '0' + (hour - 1) + ':30';
       } else {
         return (hour - 1) + ':30';
       }

      break;

      default:
        if (hour == 0) {
         return '23:59';
        } else {
          return t[0] + ':00';
        }
    }
  }
}

var cookie = {
  createCookie: function(name,value,days) {
    if (days) {
      var date = new Date();
      date.setTime(date.getTime()+(days*24*60*60*1000));
      var expires = "; expires="+date.toGMTString();
    }
    else var expires = "";
    document.cookie = name+"="+value+expires+"; path=/";
  },
  readCookie: function(name) {
    var nameEQ = name + "=";
    var ca = document.cookie.split(';');
    for(var i=0;i < ca.length;i++) {
      var c = ca[i];
      while (c.charAt(0)==' ') c = c.substring(1,c.length);
      if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
    }
    return null;
  },

  eraseCookie: function(name) {
    this.createCookie(name,"",-1);
  }
}

function scrollNav() {
    var nav = document.getElementById('fixed-nav');
    if (nav) {
      //var initNavTop = parseInt(window.getComputedStyle(nav, null).top);
      var initTop = 0;
      var scrollTop = window.scrollY ? window.scrollY : document.body.parentNode.scrollTop;

      if (scrollTop - document.getElementById('container').offsetTop >= initTop)  {
        nav.style.position = 'fixed';
        nav.style.top = 0;
      } else {
        nav.style.position = 'absolute';
        nav.style.top = initTop + 'px';
      }
    }
}

function filterNav() {
  var el = document.getElementById('filter');
  var nav = document.getElementById('fixed-nav');
  if (el) {
    //var initNavTop = parseInt(window.getComputedStyle(nav, null).top);
    var initTop = 246;
    var compare = nav ? initTop - 42 : initTop;
    var scrollTop = window.scrollY ? window.scrollY : document.body.parentNode.scrollTop;

    if (scrollTop - document.getElementById('container').offsetTop >= compare)  {
      el.style.position = 'fixed';
      el.style.top = nav ? '42px' : 0;
      el.style.zIndex = '7';
    } else {
      el.style.position = 'absolute';
      el.style.top = initTop + 'px';
      el.style.zIndex = '4';
    }
  }
}


/**
*
*  Base64 encode / decode
*  http://www.webtoolkit.info/
*
**/

var Base64 = {

	// private property
	_keyStr : "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",

	// public method for encoding
	encode : function (input) {
		var output = "";
		var chr1, chr2, chr3, enc1, enc2, enc3, enc4;
		var i = 0;

		input = Base64._utf8_encode(input);

		while (i < input.length) {

			chr1 = input.charCodeAt(i++);
			chr2 = input.charCodeAt(i++);
			chr3 = input.charCodeAt(i++);

			enc1 = chr1 >> 2;
			enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
			enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
			enc4 = chr3 & 63;

			if (isNaN(chr2)) {
				enc3 = enc4 = 64;
			} else if (isNaN(chr3)) {
				enc4 = 64;
			}

			output = output +
			this._keyStr.charAt(enc1) + this._keyStr.charAt(enc2) +
			this._keyStr.charAt(enc3) + this._keyStr.charAt(enc4);

		}

		return output;
	},

	// public method for decoding
	decode : function (input) {
		var output = "";
		var chr1, chr2, chr3;
		var enc1, enc2, enc3, enc4;
		var i = 0;

		input = input.replace(/[^A-Za-z0-9\+\/\=]/g, "");

		while (i < input.length) {

			enc1 = this._keyStr.indexOf(input.charAt(i++));
			enc2 = this._keyStr.indexOf(input.charAt(i++));
			enc3 = this._keyStr.indexOf(input.charAt(i++));
			enc4 = this._keyStr.indexOf(input.charAt(i++));

			chr1 = (enc1 << 2) | (enc2 >> 4);
			chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
			chr3 = ((enc3 & 3) << 6) | enc4;

			output = output + String.fromCharCode(chr1);

			if (enc3 != 64) {
				output = output + String.fromCharCode(chr2);
			}
			if (enc4 != 64) {
				output = output + String.fromCharCode(chr3);
			}

		}

		output = Base64._utf8_decode(output);

		return output;

	},

	// private method for UTF-8 encoding
	_utf8_encode : function (string) {
		string = string.replace(/\r\n/g,"\n");
		var utftext = "";

		for (var n = 0; n < string.length; n++) {

			var c = string.charCodeAt(n);

			if (c < 128) {
				utftext += String.fromCharCode(c);
			}
			else if((c > 127) && (c < 2048)) {
				utftext += String.fromCharCode((c >> 6) | 192);
				utftext += String.fromCharCode((c & 63) | 128);
			}
			else {
				utftext += String.fromCharCode((c >> 12) | 224);
				utftext += String.fromCharCode(((c >> 6) & 63) | 128);
				utftext += String.fromCharCode((c & 63) | 128);
			}

		}

		return utftext;
	},

	// private method for UTF-8 decoding
	_utf8_decode : function (utftext) {
		var string = "";
		var i = 0;
		var c = c1 = c2 = 0;

		while ( i < utftext.length ) {

			c = utftext.charCodeAt(i);

			if (c < 128) {
				string += String.fromCharCode(c);
				i++;
			}
			else if((c > 191) && (c < 224)) {
				c2 = utftext.charCodeAt(i+1);
				string += String.fromCharCode(((c & 31) << 6) | (c2 & 63));
				i += 2;
			}
			else {
				c2 = utftext.charCodeAt(i+1);
				c3 = utftext.charCodeAt(i+2);
				string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
				i += 3;
			}

		}

		return string;
	}

}

function makeCounterText(size) {
  if (SF_CULTURE.toLowerCase() == 'ru') {
    var ld = parseInt(size.toString().substr(-1));

    if (size > 4 && size < 21) return size + ' событий';
    else if (ld == 0 || ld > 4) return size + ' событий';
    else if (ld == 1) return size + ' событие';
    else return size + ' события';

  } else {
    if (size > 1) return size + ' events';
    else return size + ' event';
  }
}

//блок с комментериями
$.fn.comments = function(){
  var settings = {
    newMessageBtn: 'h2 > a',
    replyLink: 'h4 > a.reply'
  }
  //var commentFormHtml = '<form class="message-reply" style="display: block; clear: both;" action=""><div class="new-message"><fieldset><textarea cols="" rows="9"></textarea></fieldset><fieldset class="btn"><input type="submit" value="Написать" /></fieldset></div></form>';
  var commentFormHtml = $(this).find('form');
  var $commentBox = $(this);
  var $newMessageBtn = $commentBox.find(settings.newMessageBtn);

  //не отправляем пустой комментарий
  commentFormHtml.bind('submit',function(){
    if ($(this).find('textarea').val() == '') {$(this).find('textarea').focus();return false;}
  })

  //новое сообщение/комментарий
  $newMessageBtn.click(function(){
    if (!$(this).hasClass('opened') || ($(this).parent().next().get(0).tagName != 'FORM')) {
      $(this).addClass('opened');
      $commentBox.find('.message-reply').remove();

      var $form = $commentBox.children('h2').after(commentFormHtml).next('form');
      
      $form.removeClass('message-reply')
          .children('input[name*=parent_id]')
          .val('')
          .end()
          .find('textarea')
          .val('')
          .end()
          .show()
          .find('input.openid').focus();
    } else {
      $(this).removeClass('opened');
      commentFormHtml.hide();      
    }

    return false;
  })

  //ссылка "ответить"
  $commentBox.find('div.comment').hover(function(){
    $(this).find(settings.replyLink).css('visibility','visible');
  },function(){
    $(this).find(settings.replyLink).css('visibility','hidden');
  });

  //reply link click
  $commentBox.find(settings.replyLink).live('click',function(){

    //удаляем форму комментария
    commentFormHtml.hide();
    $newMessageBtn.addClass('opened');

    $commentBox.find('.message-reply').remove();

    var $comment = $(this).closest('.comment');

    if (!$comment.next().hasClass('message-reply')) {
      var cid = $comment.attr('rel');
      $comment.after(commentFormHtml)
              .next('form')
              .addClass('message-reply')              
              .children('input[name*=parent_id]')
              .val(cid)
              .end()
              .show()
              .find('input.openid')              
              .focus();
    }
    return false;
  })
}


$.fn.gallery = function(options){

  var settings = $.extend({
    slidePrevBtn: '.prev-pic',
    slideNextBtn: '.next-pic',
    slideBox: 'div.slider-box',
    slideHolder: '.exhibitions-holder',    
    slideItem: '.exhibition',
    picHolder: 'td',
    picBox: 'div.pic-wrap',
    picPrevBtn: 'div.pic-wrap a.prev',
    picNextBtn: 'div.pic-wrap a.next',
    showButtonsAlways: false, //всегда показывать кнопки вперед/назад, или скрывать их если курсор не в поле галереи
    shift: 100,
    speed: 100
  },options);


  var $picHolder = $(this).find(settings.picHolder);


  var $slideBox = $(this).find(settings.slideBox);  
  var $yo = $slideBox.children('.wrap');
  var $slideHolder = $(this).find(settings.slideHolder);
  var $picWrap = $(this).find(settings.picWrap);
 
  var nextB = $slideBox.find(settings.slideNextBtn);
  var prevB = $slideBox.find(settings.slidePrevBtn);
  
  var nextP = $(this).find(settings.picNextBtn).hide();
  var prevP = $(this).find(settings.picPrevBtn).hide();

  var holderWidth = 0;
  var shiftSize = 0;
  var noway = 0;
  var hideBtns = true;
  var noSlide = false;


  //прелоад больших картинок
  var picArray = new Array();
  $yo.find(settings.slideItem).children('a').each(function(){
    picArray.push($(this).attr('href'));
  });
  $.preloadImages(picArray);

  $slideHolder.children(settings.slideItem).each(function(){
    holderWidth += this.offsetWidth + parseInt($(this).css('margin-left')) + parseInt($(this).css('margin-right'));
  });

  
  $slideHolder.width(holderWidth);
  if (holderWidth <= $yo.width()) {
    noSlide = true;
    prevB.hide();
    nextB.hide();
  }


  if (!settings.showButtonsAlways) {

    $(this).bind('mousemove',function(e){
        if ((e.pageX > (this.offsetWidth / 2)) && ($slideHolder.width()+$slideHolder.offset().left > $yo.width()) ) {
          if (nextB.hasClass('next-disabled')) {nextB.removeClass('next-disabled');}
          if (!prevB.hasClass('next-disabled')) {prevB.addClass('prev-disabled')}
        } else if ((e.pageX < (this.offsetWidth / 2) )&& ($slideHolder.offset().left < 0)) {
          if (!nextB.hasClass('next-disabled')) {nextB.addClass('next-disabled');}
          if (prevB.hasClass('next-disabled')) {prevB.removeClass('prev-disabled')}
        }
    });


    $(this).bind('mouseout',function(){
        $(this).find(settings.nextBtn).css({display: 'none'});
        $(this).find(settings.prevBtn).css({display: 'none'});
    });
  }  

  nextB.click(function(){
    prevB.removeClass('prev-disabled');
    shiftSize -= settings.shift;    
    if (noway == 0) {
      
      if ($slideHolder.width()+shiftSize <= $yo.width() + 11) {
      
        $slideHolder.animate({left: $yo.width() - $slideHolder.width() + 11},settings.speed,function(){
          shiftSize = $yo.width() - $slideHolder.width() + 11;
          nextB.addClass('next-disabled');
          noway = 0;
        });
      } else {
        
        $slideHolder.animate({left: shiftSize+'px'},settings.speed,function(){
          if ($slideHolder.width()+$slideHolder.offset().left < $yo.width()) {
            nextB.addClass('next-disabled');
          }
          noway = 0;
        });
      }
      noway = 1;
    }

    return false;
  })

  prevB.click(function(){
    nextB.removeClass('next-disabled');
    shiftSize += settings.shift;
    if (noway == 0) {      
      if (shiftSize > 0) {//если пролистали в самое начало
        $slideHolder.animate({left: '0px'},settings.speed,function(){
          shiftSize = 0;
          prevB.addClass('prev-disabled');
          noway = 0;
        });
      } else {
        $slideHolder.animate({left: shiftSize+'px'},settings.speed,function(){
          if ($slideHolder.offset().left >= 0) {
            prevB.addClass('prev-disabled');
          }
          noway = 0;
        });
      }
      noway = 1;
    }

    return false;
  });

  //клик поссылке на превьюшке в слайдере
  $yo.find(settings.slideItem + ' > a').click(function(){
    var href = $(this).attr('href');
    var desc = $(this).children('img').attr('title');

    $yo.find(settings.slideItem).removeClass('current');

    $(this).parent().addClass('current');

    $picHolder.find('img').attr('src',href);
    $picHolder.find('p').text(desc);
    
    if ($(this).parent().is(':last-child')) {
        nextP.addClass('next-disabled');
        prevP.removeClass('prev-disabled');
    } else if ($(this).parent().is(':first-child')) {
        prevP.addClass('prev-disabled');
        nextP.removeClass('next-disabled');
      } else {
        prevP.removeClass('prev-disabled');
        nextP.removeClass('next-disabled');
      }
    
    return false;
  });


  //следующая картинка
  nextP.click(function(){
    if (!$(this).hasClass('next-disabled')) {
      var $current = $slideHolder.children('.current');
      var $thumb = $current.next();

      var thL = $thumb.offset().left;
      var currL = $current.offset().left;
      var fL = $yo.offset().left;
      var fW = $yo.width();

      if (currL < fL) {//если thumbnale за левым краем видимой рамки
        shiftSize += fL - currL;
      } else if (currL >= fL + fW) {//если thumbnale за правым краем видимой рамки
        shiftSize += fL - thL + fW + 11;
      }

      if (!noSlide) nextB.trigger('click');
      $thumb.children('a').trigger('click');
    }

    return false;
  }).mouseleave(function(){
    hideBtns = true;
    setTimeout(function(){
      if (hideBtns) {
        prevP.hide()
        nextP.hide()
      }
    }, 50);
  }).mouseenter(function(){
    hideBtns = false;
  });

  prevP.click(function(){
    if (!$(this).hasClass('prev-disabled')) {
      var $current = $slideHolder.children('.current');
      var $thumb = $current.prev();

      var thL = $thumb.offset().left;
      var currL = $current.offset().left;
      var fL = $yo.offset().left;
      var fW = $yo.width();

      if (currL < fL) {//если thumbnale за левым краем видимой рамки
        shiftSize += fL - currL;
      } else if (currL >= fL + fW) {//если thumbnale за правым краем видимой рамки
        shiftSize += fL - currL + fW - $thumb.width() - parseInt($thumb.css('margin-left')) - parseInt($thumb.css('margin-right')) + 11;
      }      
      if (!noSlide) prevB.trigger('click');
      $thumb.children('a').trigger('click');
    }

    return false;
  }).mouseleave(function(){
    hideBtns = true;
    setTimeout(function(){
      if (hideBtns) {
        prevP.hide()
        nextP.hide()
      }
    }, 50);
  }).mouseenter(function(){
    hideBtns = false;
  });

  $picHolder.bind('mouseover',function(){
    hideBtns = false;
    nextP.show();
    prevP.show();
  });

}

//google map for filter
function loadGmap() {
  showLoading(1);

  $('div.map-wrap').each(function() {
    if (typeof GBrowserIsCompatible == 'function' && GBrowserIsCompatible()) {
      var city = $('a.city span').text();
      var gmap = new GMap2(this, {size: new GSize('944','498')});
      gmap.setUIToDefault();

      var circle = new GScreenOverlay('/images/circle-layer.png',
                    new GScreenPoint(0, 0, 'fraction', 'fraction'),
                    new GScreenPoint(0, 0),
                    new GScreenSize(1, 1, 'fraction', 'fraction'));
      gmap.addOverlay(circle);

      var artguide_marker = new GIcon();
      artguide_marker.image = "/images/gm-o.png";
      artguide_marker.iconSize = new GSize(25, 27);
      artguide_marker.iconAnchor = new GPoint(12, 13);
      var markerOptions = {icon: artguide_marker};

      if ($('#coords').val()) {
        var value = $('#coords').val().split(',');
        gmap.setCenter(new GLatLng(value[0], value[1]), Number(value[2]));
      } else {
        var lat = null;
        var lng = null;
        var zoom = 11;

        if (CITY == 'msk') {
          lat = 55.755786;
          lng = 37.617633;
        } else if (CITY == 'spb') {
          lat = 59.939039;
          lng = 30.315785;
        } else {
          var cg = new GClientGeocoder();
          cg.getLatLng(city, function(responce){
            if (responce == null) return;
            
            lat = responce.lat();
            lng = responce.lng();
          });
        }

        gmap.setCenter(new GLatLng(lat, lng), zoom);
      }

      $.getJSON('/'+SF_CULTURE+'/'+CITY+'/place/city', function(data){
        var count = data.length;
        for (var i=0; i<count; i++) {
          gmap.addOverlay(new GMarker(new GLatLng(data[i].latitude, data[i].longitude), markerOptions));
        }

        showLoading(0);
      });

      GEvent.addListener(gmap, 'moveend', function() {
        var center = gmap.getCenter().lat().toPrecision(8) +','+ gmap.getCenter().lng().toPrecision(8);
        var zoom = gmap.getZoom();
        $('#coords').val(center +','+ zoom);
      });

      GEvent.addListener(gmap, 'click', function (overlay, point) {
        if(point)
          showInfoGmap(point, gmap.getZoom());
      });

      mapLoaded = true;
    }
  });
}


function showInfoGmap(point, zoom) {
  showLoading(1);
  var html = '';
  var params = { 'lat': point.lat().toPrecision(8), 'lng': point.lng().toPrecision(8), 'zoom': zoom };

  $.getJSON('/'+SF_CULTURE+'/'+CITY+'/place/info', params, function(data) {
    if (data.success) {
      var places = data.places;
      for (var i=0, c=places.length; i<c; i++) {
        html += '<a href="'+ data.url + SF_CULTURE +'/'+ idCities[places[i]['city_id']] +'/places/'+ places[i]['place_type_id'] +'/'+ places[i]['id'] +'"'+
          'onclick="window.open(this.href);return false;">'+
          places[i]['Translation'][SF_CULTURE].title +'</a><br /><span>'+
          places[i]['Translation'][SF_CULTURE].address +'</span>';

        if (i != c-1)
          html += '<hr />';
      }

      if (html != '') {
        var info = $('#gmap-info');
        $('#info-content').replaceWith($('<div id="info-content">'+ html +'</div>'));
        var marginLeft = clickXY[0]+20;
        if (marginLeft+info.width() > $('div.wrap').width()) {
          marginLeft = clickXY[0]-20-info.width();
        }
        info.css({
          'margin-left': marginLeft +'px',
          'margin-top':  clickXY[1]-info.height() +'px'
        });
        info.show();
      }
    }
    showLoading(0);
  });

  $('body').bind('click.info-content',function(e){
    if ($(e.target).parents('#gmap-info').length == 0 && e.target.id != 'gmap-info') {
      $('#gmap-info').hide();
      $('body').unbind('click.info-content');
    }
  });
}

function mapOpen() {
  if ($('#map').is(':visible')) {
    $('a.close','#map').trigger('click');
  }
  else {

    $('#map').css('top', ($('#fixed-nav').offset().top + 100) + 'px');

    if ($('#stations').val() && $('div.sub-wrap','#map').is(':hidden')) {
      var text = $('li.sub-switch a','#map').text();
      $('li.sub-switch a','#map').parent().html(text);
      $('li.map-switch','#map').wrapInner('<a href="#"></a>');
      $('div.map-wrap','#map').hide();
      $('div.sub-wrap','#map').show();
    }

    if (!mapLoaded) {
      loadGmap();
    }
  
    if (!metroLoaded) $.post(getMetroUrl, {}, function(data){
      metroLoaded = data;
      metro.extendLines(metroLoaded);
      setMetroStations();      
    }, 'json');

    $('#map').show();

    $('body').bind('click.map',function(e){
      if ($(e.target).parents('#map').length == 0 && e.target.id != 'gmap-info' && e.target.id != 'map'
        && $(e.target).parents('li[class^=line]').length == 0 && $(e.target).parents('#gmap-info').length == 0) {
        $('a.close','#map').trigger('click');
      }
    });
  }

  return false;
}

function setMetroStations() {
  var list = $('#stations').val().split(',');
  
  if (list != '') {    
    for (var i = list.length - 1; i >= 0; i--)
      metro.checkStation(parseInt(list[i]));
  }
}

function updateFilter(params) {
    $.getJSON('/'+SF_CULTURE+'/'+CITY+'/default/filter',params,function(data) {
    if (data.success) {
      if (typeof window.reloadPlaces == 'function') {
        reloadPlaces();
      } else if (typeof window.reloadEvents == 'function') {
        reloadEvents();
      } else {
        $('form','#map').submit();
      }
    }
  });
}

function authorsToggle() {
  if ($(this).hasClass('opened')) {
    $(this).parent().siblings('ul').css({height: $(this).attr('rel')});
    $(this).attr('rel','');
  } else {
    $(this).attr('rel',$(this).parent().siblings('ul').css('height'));
    $(this).parent().siblings('ul').css({height: 'auto'});
  }

  $(this).toggleClass('opened');

  return false;
}

function showLoading(showhide) {
  if (showhide == 1)
    $("#global-loading").show();
  else
    $("#global-loading").hide();
}

function loadMaps() {
  google.load('maps', '2.x', {'language' : SF_CULTURE});
}