if (typeof console == "undefined" || typeof console.log == "undefined") var console = { log: function(message) {
//	$("#console").append(message + "\n\n<br><br>\n\n");
} };

$(document).ready(function()
{
//	$("body").prepend("<div id='console'></div>");

	var reload_on_hashchange = true;

	var find_blocks = function(selector)
	{
		var blocks = [];

		if (typeof selector == "undefined")
			selector = "div[data-l=0],div[data-l=ajax]";

		$(selector).each(function()
		{
			var obj = $(this);
			{
				var ar = {};
				if (typeof obj.attr("id") != "undefined" && obj.attr("id") != "")
					ar["id"] = obj.attr("id");
				if ((typeof obj.attr("data-v") != "undefined") && (obj.attr("data-v") != ""))
				{
					ar["vars"] = $.evalJSON(obj.attr("data-v"));
				}
				blocks[blocks.length] = ar;
				obj.attr("data-l","pending");
			}
		});
		return blocks;
	}

	var replace_blocks = function(response)
	{
		if (response == null || typeof response["blocks"] == "undefined") return;
		var blocks = response["blocks"];
		if (blocks == null || typeof blocks != "object" || blocks.length == 0) return;
		for (var i = 0; i < blocks.length; i++)
		{
			var obj = $("#" + blocks[i]["id"]);
			
			if (obj.hasClass("skip_anim"))
				obj.html(blocks[i]["html"]);
			else
			{
				obj.showHtml(blocks[i]["html"],1000);
			}
		}
		if (typeof response["title_out"] != "undefined")
		{
			document.title = response["title_out"];
		}
	}

	var apply_actions = function(response)
	{
		if (response == null || typeof response["actions"] == "undefined") return;
		var actions = response["actions"];
		if (typeof actions != "object" || actions.length == 0) return;
		for (var i = 0; i < actions.length; i++)
			if (typeof actions[i] == "string")
				eval(actions[i]);
	}

	var apply_preload = function(response)
	{
		if (response == null || typeof response["preload"] == "undefined" || response["preload"].length == 0) return success_callback(response);
		var preload = response["preload"];
		preload = preload.replace(/\)/,",response)");
		eval(preload);
	}

	var preload_photo = function(src,response)
	{
		var img = new Image();
		img.onload = function()
		{
			success_callback(response);
		}
		img.src = src;
	}

	var success_callback = function(response)
	{
		console.log("success callback");
		$(".ajax_loading").remove();
		replace_blocks(response);
		apply_actions(response);
		google_maps_initialize();
		run();
	}

	var load_blocks = function(blocks)
	{
		var data = $.toJSON({"blocks":blocks,"global-vars":GLOBALS});

		if (typeof blocks != "object" || blocks.length == 0) return;

		$.ajax({
			type: "POST",
			url: "/ajax.php",
			data: "ajax-data=" + escape($.toJSON({"blocks":blocks,"global-vars":GLOBALS})),
			dataType: "JSON",
			success: function(response)
			{
				apply_preload(response);
			}
		});
	}

	var run = function(selector)
	{
		load_blocks(find_blocks(selector));
	}

	var url2targets = function(url,targets,update_hash)
	{
		var local_vars = {};
		
		var ar = url.replace(/^.*?\?/,"").split("&");
		if (typeof ar == "object" && ar.length > 0)
		{
			for (var i = 0; i < ar.length; i++)
			{
				var arr = ar[i].split("=");
				if (arr.length != 2) continue;
				if ($.inArray(arr[0],CONFIG["global-vars"]) > 0)
					GLOBALS[arr[0]] = arr[1];
				else
					local_vars[arr[0]] = arr[1];
			}
		}
		
		GLOBALS["url"] = url;

		if (typeof local_vars["ctrl"] != "undefined" || typeof GLOBALS["ctrl"] != "undefined")
			update_hash = false;

		if (update_hash == true)
  		{
			reload_on_hashchange = false;
//			window.location.hash = url.replace(/^\/\?/,"");
			window.location.hash = url;
		}

		if (typeof targets == "object" && targets.length > 0)
		{
			for (var i = 0; i < targets.length; i++)
			{
				if (!$.isEmptyObject(local_vars))
					$("#" + targets[i]).attr("data-v",$.toJSON(local_vars));
				else
					$("#" + targets[i]).attr("data-v","");
				$("#" + targets[i]).attr("data-l",0);
			}
		}
	}

	var form_print_error = function(form,error_message)
	{
		$(form).find(".ajax_error_container").empty().append("<div class='ajax_error'>" + error_message + "<a href='javascript:void(0);' class='ajax_error_hide'><img src='/im/icon_close_small.png' /></a></div>");
	}

	var submit_form = function(form,button)
	{
		var s = button.html();

		$(form).find(".ajax_error_container").empty();

		GLOBALS["url"] = "";

		button.myload({
			url: "/ajax.php",
			datasource: form,
			params: {"ajax-data":escape($.toJSON({"global-vars":GLOBALS})),"ctrl_submit":1},
			loading_start_callback: function(obj)
			{
				$(obj).html("<img class='img_ajax_loading' src='/im/loading.gif' />");
			},
			loading_end_callback: function(obj)
			{
				$(obj).html(s);
			},
			error_callback: function(obj,error_message)
			{
				form_print_error(form,error_message);
			},
			callback: function(res)
			{
				if (res.error != null)
				{
					form_print_error(form,res.error);
				}
				else
				{
					apply_preload(res);
//					replace_blocks(res);
//					run();
				}
			}
		});
	}

	var make_local_url = function(url)
	{
		var host = document.location.href;
		host = host.replace(/^http:\/\/(www\.)?/,"").replace(/\/.*$/,"");
		var e = new RegExp("^http:\/\/(www\.)?" + host);
		url = url.replace(e,"");
		return url;
	}

	$("a").live("click",function(ev)
	{
		var obj = $(this);
		var targets;
		var url = make_local_url(obj.attr("href"));

//		return true;

		if (obj.is(".no-ajax") || obj.is(".noajax")) return true;

		if (url.match(/\/click/)) return true;

		if (obj.is(".ctrl_but"))
		{
			var p = obj;
			var i = 0;
			while (!p.is("form") && typeof p.parent() != "undefined" && i < 10)
			{
				p = p.parent();
				i++;
			}

			if (!p.is("form"))
			{
				return false;
			}
			submit_form(p,obj);
		}

		if (obj.is(".ajax_error_hide"))
		{
			obj.parent().remove();
			return false;
		}

		if (url.match(/^javascript/) || url.match(/^#/) || url.match(/^http:\/\//)) 
		{
			var str = obj.attr("onclick");
			if (typeof str != "undefined")
			{
				return true;
				str = str.replace(/return\s*\S*\s*;/,"");
				eval(str);
				return false;
			}
			return true;
		}
	

		var update_hash = true;
		if (obj.is(".no-hash"))
			update_hash = false;


		if (typeof obj.attr("data-t") == "undefined")
		{
			var p = obj;
			var i = 0;
			while (typeof p.attr("data-l") == "undefined" && typeof p.parent() != "undefined" && i < 10)
			{
				p = p.parent();
				i++;
			}
			if (typeof p.attr("data-l") == "undefined")
				targets = ["container"];
			else
				targets = [p.attr("id")];
		}
		else
		{
			targets = obj.attr("data-t").split(",");
		}

		if (obj.is(".show_loading_before"))
		{
			obj.prepend("<img class='ajax_loading img_ajax_loading_before' src='/im/loading.gif' alt='Загрузка' />");
		}

		if (obj.is(".show_loading_after"))
		{
			obj.append("<img class='ajax_loading img_ajax_loading_after' src='/im/loading.gif' alt='Загрузка' />");
		}

		if (obj.is(".show_loading_inside"))
		{
			obj.html("<img class='ajax_loading img_ajax_loading' src='/im/loading.gif' alt='Загрузка' />");
		}

		if (obj.is(".show_loading_over"))
		{
			obj.append("<img class='ajax_loading img_ajax_loading_over' src='/im/loading.gif' alt='Загрузка' />");
		}

		if (obj.attr("data-ld") != "undefined")
		{
			$("#" + obj.attr("data-ld")).append("<img class='ajax_loading img_ajax_loading_after' src='/im/loading.gif' alt='Загрузка' />");
		}


		url2targets(url,targets,update_hash);
		run();
		return false;
	});


	var initialize = function(b)
	{
		var hash = window.location.hash;
		if (hash.length > 0 || b == true)
		{
			document.location = hash.replace(/^#/,"");
//			url2targets(hash.substr(1),["container"]);
//			run("#container");
		}
		else
			run();
	}

	$(window).bind("hashchange", function(e)
	{
		if (reload_on_hashchange == true)
		{
			initialize(true);
		}
		reload_on_hashchange = true;
	});
	
	initialize();
	mss_create_messenger();
	refresh_bookmarks();
	switch_comment_form();
	google_maps_initialize();
});


var refresh_bookmarks = function()
{
	var vk = $("#vk_share_button");
	if (vk.length > 0 && typeof VK == "object")
	{
		vk.html(VK.Share.button({url:vk.attr("data-url"),text:"Вконтакте",image:vk.attr("data-image")}));
	}
	if (typeof window.mrc__shareStart == "function")
		window.mrc__shareStart();

}


function google_maps_initialize()
{
      if (typeof GBrowserIsCompatible != "function") return false;
      if (GBrowserIsCompatible()) 
      {
		var map_div = $("#map");
		if (map_div.length == 0) return false;
		if (map_div.attr("data-ready") > 0) return false;
		var address = map_div.attr("data-address");

	        var map = new GMap2(map_div.get(0));
		var geocoder = new GClientGeocoder();

		map.addControl(new GScaleControl());
		map.enableScrollWheelZoom();
	        map.setCenter(new GLatLng(55.7998,37.53412), 13);

		geocoder.getLatLng(
			address,
			function(point)
			{
				var zoom = 13;
				map.setCenter(point,zoom);
				var marker = new GMarker(point);
				map.addOverlay(marker);
			}
		);

		map_div.attr("data-ready",1);
      }
 
}

