var map;
var blocks = new Array();
var marker = new Array();
var infowindow = new Array();
var markerOne = {};
var ie6 = false;
var xhr = null;


function easyOverlay() {
	$('#absOverlay').show().css("opacity", 0.8)
	.fadeIn(150);
	$(document).keydown(handleEscape);
	//$('#absOverlay').click(easyOverlayHide);
}

function easyOverlayHide() {
	$(document).unbind("keydown", handleEscape)
	$('#absOverlay').fadeOut('fast');
}

function handleEscape(e) {
	if (e.keyCode == 27) {
		easyOverlayHide();
	}
}

function softAlert(txt) {
	if (txt != '') { 
		$('#softAlert').html(txt)
		.screenTop(ie6)
		.slideDown('slow')
		.fadeOut(10000);
	}
}


jQuery(document).ready(function() {

	if ($.browser.msie && $.browser.version.substr(0,1)<7) {
		ie6 = true;
		$('body').addClass('ie6');
	}

	var gW = $.viewportWidth();
	var waitAJAX = false;

	if (gW < 1200) {
		$('#wrapper').addClass('smalled');		
	}

	var image = new google.maps.MarkerImage('/images/icons/cafe_new.png',
	new google.maps.Size(16, 23),
	new google.maps.Point(0,0),
	new google.maps.Point(8, 0));

	function gmapInit(lat, lng, zoomLevel) {
		var latlng = new google.maps.LatLng(lat, lng);
		var myOptions = {
			zoom: zoomLevel,
			center: latlng,
			mapTypeControl: false,
			scrollwheel: false,
			mapTypeId: google.maps.MapTypeId.ROADMAP
		};
		map = new google.maps.Map($("#gMap").get(0), myOptions);
	}

	function gmapSmallInit(lat, lng, zoomLevel) {
		var latlng = new google.maps.LatLng(lat, lng);
		var myOptions = {
			zoom: zoomLevel,
			center: latlng,
			mapTypeControl: false,
			scrollwheel: false,
			mapTypeId: google.maps.MapTypeId.ROADMAP
		};
		map = new google.maps.Map($("#gMapSmall").get(0), myOptions);
		
	}

	function linkInfoWindows() {
		$('a.openerIW').unbind('click');
		$('a.openerIW').click(
		function() {
			var id = $(this).attr('id');
			id = id.replace('go_', '');
			if (infowindow[id])	{
				if (!$('#mapperTable').is(':visible')) {
					$('#tableToggler div.btn').html('<strong>&uarr;</strong> карта');
					$('#mapperTable').show();
					google.maps.event.trigger(map, 'resize');
					$.cookie('viewmap', '1');
				}

				for(m in infowindow) {
					infowindow[m].close();
				}
				infowindow[id].open(map,marker[id]);
				$('html, body').animate({scrollTop:0}, 'fast');
				logRequest('/gmap/infowindow/' + id + '.html');
				setEventsIW(id);
				return false;
			} else {
				return true;
			}
		}
		);
	}

	function setEventsIW(id) {
		setImagesMagnify('#iw_' + id);
		setCorrects('#iw_' + id);
		setError('#iw_' + id);
		setRater('#iw_' + id);
		reloadRating(id);
		setCommenter('#iw_' + id);
	}

	function setError(query) {
		$(query + ' div.correct a.error').unbind('click');
		$(query + ' div.correct a.error').click(
		function() {
			var url = $(this).attr('href');
			//alert(url);
			$('#errorWin').show();
			$('#errorWin #ew_msg').val('');
			$('#errorWin').center();
			$("#errorForm").attr('action', url);
			return false;
		});

	}

	function setCommenter(query) {
		$(query + ' div.comments a.addComment').unbind('click');
		$(query + ' div.comments a.addComment').click(
		function() {
			var title = $(query + ' a.title').text();
			$('#commentWin div.closeBtn').click(function() {
				//				easyOverlayHide();
				$('#commentWin').fadeOut();
			});
			var id = $(query).attr('id').replace('iw_', '');
			var url = '/gmap/comform/' + id + '.html';
			$('#commentWin div.inner').load(url,
			{},
			function() {
				$('#commentWin form').submit(function() {
					var nickStr = $("#commentWin #cf_nick").val();
					var mailStr = $("#commentWin #cf_mail").val();
					var msgStr = $("#commentWin #cf_msg").val();
					var rateStr = $("#commentWin #cf_rate").val();
					var captchaStr = $("#commentWin #cf_captcha").val();
					var url = $("#commentWin #cfForm").attr('action');
					$.post(url, {nick: nickStr, mail: mailStr, msg: msgStr, captcha: captchaStr, rate: rateStr}, function(json)
					{
						if (json.result) {
							softAlert('Огромное спасибо за <a href="/gmap/show/' + json.pid + '.html#comment_' + json.id + '"><strong>ваш комментарий</strong></a>');
							$('#commentWin div.closeBtn').click();
						} else {
							softAlert(json.errors);
						}
					}, "json");
					return false;
				})
			});
			$('#commentWin').show();
			$('#commentWin').center();
			return false;
		})

		//			easyOverlay();
		

		
	}



	function setRater(query) {
		$(query + ' div.ajaxRater').unbind('click');
		$(query + ' div.ajaxRater').click(
		function() {
			id = $(this).attr('id').replace('ratimg_', '');

			$('#rateInAjax').show().center();
			$('#rateInAjax div.inner').load('/gmap/rate/' + id + '.html',
			{},
			function() {
				$('#rateInAjax input.submitter').hide();
				easyOverlay();
				$("#rateInAjax #ratings").stars({
					inputType: "select",
					starWidth: 28,
					cancelShow: false,
					split: 2,
					captionEl: $('#rateInAjax #curRating'),
					callback: function(ui, type, value)
					{
						ui.disable();
						$("#rateInAjax #curRating").text("Секундочку...").stop().css("opacity", 1).fadeIn(30);
						var url = $("#rateInAjax #ratings").attr('action');
						$.post(url, {rate: value}, function(data)
						{
							//console.log(data.result);
							if (data.result.id > 0) reloadRating(data.result.id);
							$('#rateInAjax div.closeBtn').click();
							return false;
						}, "json");

					}

				});


			});


			$('#rateInAjax div.closeBtn').click(function() {
				easyOverlayHide();
				$('#rateInAjax').fadeOut();
			});


			return false;
		});

	}


	function updateRating(id, img) {
		$('#mainContent div.ratimgid' + id).html(img);
		$('#iw_' + id + ' div.ratimgid' + id).html(img);
	}

	function reloadRating(id) {
		$.get('/gmap/currating/' + id + '.html', {}, function(data)
		{
			if (data.result = true) updateRating(data.id, data.img)
		}, "json");

	}



	$('#errorWin #errorForm').submit(
	function() {
		var url = $('#errorWin #errorForm').attr('action');
		$.post(url, {msg: $('#ew_msg').val(), mail: $('#ew_mail').val()},
		function(json)
		{
			if (json.result) {
				//	alert(json.content);
				$('#errorWin').hide();
			}
		}, "json");
		return false;
	});

	$('#errorWin div.closeBtn').click(
	function() {
		$('#errorWin').hide();
		return false;
	});

	function setCorrects(query) {
		$(query + ' div.correct a.ok').unbind('click');
		$(query + ' div.correct a.ok').click(
		function() {
			var url = $(this).attr('href');
			$.get(url,
			{},
			function(data){
				if (data.result != false) {
					$('#iw_' + data.id + ' div.correct a.ok').replaceWith(data.content) ;
				}
			},
			'json'
			);
			return false;
		});

	}

	function removeAllMarkers() {
		for(m in marker) {
			infowindow[m].close();
			marker[m].setMap(null);
		}
	}

	function removeMarker(m) {
		infowindow[m].close();
		marker[m].setMap(null);
	}

	function addMarker(item) {
		var myLatlng = new google.maps.LatLng(item.lat, item.lng);
		if (typeof(item.title)=='number') item.title = item.title.toString();
		if (item.draggable == undefined) item.draggable = false;
		if (marker[item.id] != undefined) removeMarker(item.id);
		marker[item.id] = new google.maps.Marker({
			position: myLatlng,
			map: map,
			title: item.title,
			draggable: item.draggable,
			icon: '/images/icons/' + item.icon + '.png',
			shadow: shadow
		});
		infowindow[item.id] = new google.maps.InfoWindow(
		{ content: item.info,
		maxWidth: 500
		});
		google.maps.event.addListener(marker[item.id], 'click', function() {
			for(m in infowindow) {
				infowindow[m].close();
			}
			infowindow[item.id].open(map,marker[item.id]);
			setEventsIW(item.id);
			logRequest('/gmap/infowindow/' + item.id + '.html');
		});
		if (item.draggable) {
			google.maps.event.addListener(marker[item.id], 'dragend', function() {
				var xy = marker[item.id].getPosition();
				$.post('/gmap/place/', {lat: xy.lat(), lng: xy.lng(), id: item.id}, function(db)
				{
					if (db == false) alert('Не сохранились данные');
					if (db == true) alert('Изменения сохранены');
				}, "json");
			});
		}
	}

	$('#filterForm').submit(function() {
		var searchFor = $("#objType").val();
		var searchIn = $("#objRaion").val();
		var url = $("#filterForm").attr('action');
		xhr = $.post(url, {objType: searchFor, objRaion: searchIn}, function(json)
		{
			removeAllMarkers();
			addMarkers(json.markers);
			if (json.div.id) updateDiv(json.div.id, json.div.content);
			if (json.map.panto) {
				var latlng = new google.maps.LatLng(parseFloat(json.map.panto.lat), parseFloat(json.map.panto.lng));
				map.panTo(latlng);
			}
		}, "json");
		url = url + '?objType=' + searchFor + '&objRaion=' + searchIn;
		logRequest(url);
		return false;
	});

	function isDev() {
		var site = location.href;
		var regStr = /simbirsk.dev/;
		//console.log(site.search(regStr));
		if (site.search(regStr) == -1) return false;
		else return true;
	}


	function logRequest(url) {

		if (!isDev() && typeof(pageTracker) == 'object') {
			var regStr = '?';
			if (url.split('?').length > 1) {
				url = url + '&ajax=1';
			} else {
				url = url + '?ajax=1';
			}
			pageTracker._trackPageview(url);
			//console.log(url);
		}

	}

	function markersByUrl(obj) {
		obj = $(obj);
		var link = obj.attr('href');
		xhr = $.getJSON(link, { limit: "90"}, function(json){
			removeAllMarkers();
			addMarkers(json.markers);
			if (json.div.id) updateDiv(json.div.id, json.div.content);
			//			console.log(json.map.panto);
			if (json.map.panto) {
				var latlng = new google.maps.LatLng(parseFloat(json.map.panto.lat), parseFloat(json.map.panto.lng));
				map.panTo(latlng);
			}
		});
		//console.log(link);
		logRequest(link);
	}

	function addMarkers(rows) {
		$.each(rows, function(i,item){
			addMarker(item);
		});
	}

	/*
	function addMarkersFromHTML(id) {
	var jsonTxt = $('#' + id).val();
	if (jsonTxt) {
	var rows = $.secureEvalJSON(jsonTxt);
	if (rows) {
	if (rows.length > 0) {
	$.each(rows, function(i,item){
	addMarker(item);
	});
	linkInfoWindows();
	}
	}
	}
	}
	*/

	function addMarkersFromJS(rows) {
		if (rows) {
			$.each(rows, function(i,item){
				addMarker(item);
			});
			linkInfoWindows();
		}
	}

	function updateDiv(divId, divContent) {
		$("div#" + divId).html(divContent);
		setRater('#' + divId);
		linkInfoWindows();
	}


	if ($("#gMap").get(0)) gmapInit(54.31848, 48.39125, 13);

	if ($("#gMapSmall").get(0)) {
		gmapSmallInit($("#gMapSmall").attr('lat'), $("#gMapSmall").attr('lng'), 14);
		if (markerOne.id > 0) addMarker(markerOne);
	}


	var shadow = new google.maps.MarkerImage('/images/icons/shadow.png',
	new google.maps.Size(24, 11),
	new google.maps.Point(0,0),
	new google.maps.Point(7, 11));


	if ($('#newList').get(0)) {
		addMarkersFromJS(liveMarkersNew);
	}
	if ($('#popList').get(0)) {
		addMarkersFromJS(liveMarkersPop);
	}

	$('a.lM').click(
	function() {
		markersByUrl($(this));
		return false;
	}
	);

	linkInfoWindows();

	function footerToBottom() {
		var gH = $.viewportHeight();
		$('#mainContent').css('marginBottom', '0');
		var hDelta = gH - $('#mainContent').height();
		if (hDelta > 219) {
			var mapperHeight = 0;
			var extraDelta = 0;
			if ($('#mapperTable').get(0)) {
				extraDelta = -21;
				if ($('#mapperTable').is(':visible')) {
					mapperHeight = $('#mapperTable').height() + 20;
				}
			}
			var mb = gH - 215 - 80 - $('#mainContent').height() - mapperHeight + extraDelta;
			if (mb > 0) $('#mainContent').css('marginBottom', mb + 'px');
		}
	}

	if ($("#objCard #ratings").get(0)) {
		$("#objCard #ratings").children().not("select").hide();
		$("#objCard #ratings").stars({
			inputType: "select",
			cancelShow: false,
			split: 2,
			captionEl: $('#objCard #curRating'),
			callback: function(ui, type, value)
			{
				ui.disable();
				$("#objCard #curRating").text("Секундочку...").stop().css("opacity", 1).fadeIn(30);
				var url = $("#objCard #ratings").attr('action');
				$.post(url, {rate: value}, function(db)
				{
					$("div.ajaxRating div.votes").html(db.result.votes);
					$("div.ajaxRating div.cr strong").html(db.result.avg);
					$("#objCard #ratings").stars("select", Math.round(db.result.avg));

				}, "json");

			}

		});

	}


	if (typeof liveMarkers == "object") {
		addMarkersFromJS(liveMarkers);
	}



	$('#lsHide').click(
	function() {
		$('#leftSearchers').hide();
		$('#gMap').css('width', '100%');
		google.maps.event.trigger(map, 'resize');
		$('#lsShow').animate({"left": "+=123px"}, "slow");
	}
	);

	$('#lsShow').click(
	function() {
		if (!$('#mapperTable').is(':visible')) {
			$('#mapperTable').show();
			google.maps.event.trigger(map, 'resize');
		}
		$('#leftSearchers').show();
		$('#lsShow').animate({"left": "-=123px"}, "slow");
		//		$('#mapWrap').hide();
		var mapW = gW - 290;
		$('#mapWrap').css('width', mapW + 'px');
		//		var hzPopravka = 16;
		//		if ($.browser.msie) {
		//			hzPopravka = 0;
		//		}
		//		$('#gMap').css('width', mapW - hzPopravka + 'px');
		$('#gMap').css('width', 100 + '%');
		google.maps.event.trigger(map, 'resize');
	}
	);

	$('#header h2').click(
	function() {
		location.href = '/';
	}
	);

	$('a.searchFormShow').click(
	function() {
		//$('html, body').animate({scrollTop:0}, 'fast');
		$('#searchForm').show();
		$('#searchForm').center();
		var searchSelectors = $('#extSearchInner.winw');
		if (searchSelectors.text() == 'секундочку...') {
			searchSelectors.load('/gmap/search/');
		}
		return false;
	}
	);

	$('#photoUpload').click(
	function() {
		//$('html, body').animate({scrollTop:0}, 'fast');
		$('#uploadPhotoForm').center();
		var inner = $('#uploadPhotoForm div.inner');
		if (inner.text() == 'секундочку...') {
			inner.load($(this).attr('href'));
			$('#uploadPhotoForm div.closeBtn').click(
			function() {
				$('#uploadPhotoForm').hide();
				return false;
			}
			);
		}
		$('#uploadPhotoForm').show();
		return false;
	}
	);


	$('#extSearchHider').click(
	function() {
		$('#searchForm').hide();
		return false;
	}
	);


	$('#loading').css({ 'opacity' : 0 });





	$("#loading").bind("ajaxSend", function(evt, request, settings){

		$(this).show();
		$(this).center();
		$(this).fadeTo('slow', 0.8);
	}).bind("ajaxComplete", function(request, settings){
		//$(this).fadeTo('slow', 0);
		ajaxStatus = false;
		$(this).hide();
		$('a.lM').unbind('click');
		$('a.lM').click(
		function() {
			markersByUrl($(this));
			return false;
		}
		);
		setImagesMagnify('body');
	}).bind("ajaxStop", function() {
		$(this).hide();
	});


	$('#loading a').click( function(event) {
		if (null !== xhr) {
			xhr.abort();
			xhr = null;
		}
		event.preventDefault();
		return false;
	}
	);

	function setImagesMagnify(query) {
		if (!ie6) {
			$(query + ' a.magnify').unbind('click');
			$(query + ' a.magnify').click(
			function() {
				easyOverlay();
				$('#imageMagnifing').center();
				$('#imageMagnifing').html('<img id="' + $(this).attr('id') + '_full" src="' + $(this).attr('href') + '">' + '<strong>' + $(this).attr('title') + '</strong>');
				$('#' + $(this).attr('id') + '_full').load(function() {
					$('#imageMagnifing').show();
					$('#imageMagnifing').center();
				});
				return false;
			});
		}
	}

	setImagesMagnify('body');

	$('#imageMagnifing').click(
	function() {
		easyOverlayHide();
		$(this).fadeOut('slow');
		return false;
	});




	$('#cfForm').submit(function() {
		var nickStr = $("#cf_nick").val();
		var mailStr = $("#cf_mail").val();
		var msgStr = $("#cf_msg").val();
		var rateStr = $("#cf_rate").val();
		var captchaStr = $("#cf_captcha").val();
		var url = $("#cfForm").attr('action');
		$.post(url, {nick: nickStr, mail: mailStr, msg: msgStr, captcha: captchaStr, rate: rateStr}, function(json)
		{
			if (json.result) {
				var newComment = $('<li>' + json.content + '</li>');
				$('#commentList').prepend(newComment);
				$('body').scrollTo('#comments h3', 1);
				newComment.css('marginLeft', '100px');
				newComment.animate({marginLeft: '0px'}, 'slow', function() {
					$("#cfForm").remove();
					$('#comments h3 a').remove();
				});
			} else {
				softAlert(json.errors);
			}
		}, "json");

		return false;
	});

	$('#tableToggler div.btn').click(function() {
		var mapTable = $('#mapperTable');
		if (mapTable.is(':visible')) {
			$('#tableToggler div.btn').html('<strong>&darr;</strong> карта');
			$.cookie('viewmap', '0');
			$('#gMap').css('width', $('#gMap').width() + 'px');
			$('#mapperTable').hide();
			footerToBottom();
		} else {
			$('#tableToggler div.btn').html('<strong>&uarr;</strong> карта');
			$('#mapperTable').show();
			google.maps.event.trigger(map, 'resize');
			$.cookie('viewmap', '1');
			footerToBottom();
		}
	}
	);


	$('#loginTgl').click(function() {
		var loginForm = $('#loginForm');
		if (loginForm.is(':visible')) {
			loginForm.slideUp('fast');
			$(this).html('&darr;');
		} else {
			loginForm.slideDown('fast');
			$(this).html('&uarr;');
		}
	}
	);

	$('#registerTgl a').click(function() {
			$('#registerWin').show();
			$('#registerWin').center();
			$('#registerWin .closeBtn').click(function() {$('#registerWin').hide();})
			return false;
	});

	$(window).resize(function(){
		footerToBottom();
		if (typeof(map) == 'object' &&  $('#mapperTable').is(':visible')) google.maps.event.trigger(map, 'resize');
	});


	setRater('body');



	if ($.cookie('viewmap') == 0) {
		$('#gMap').css('width', $('#gMap').width() + 'px');
		$('#mapperTable').hide();
		//		if (!$.browser.msie) $('#mapperTable').hide();
	}

	if (!waitAJAX) footerToBottom();


	if ($('#objPhotos').get(0)) {
		$('#objPhotos a').lightBox({fixedNavigation:true});
	}
	
	

});