var cms = function() {
	var includedScripts = [];
	var pendingRegions = 0;

	var loadRegion = function(container, path, route, region, parameters) {
		function regionLoaded() {
			pendingRegions--;
			if (pendingRegions == 0)
				loadScript();
		}
		pendingRegions++;
		$.ajax({
			type: "POST",
			contentType: "application/x-www-form-urlencoded; charset=utf-8",
			dataType: "html",
			async: true,
			cache: false,
			url: "/data/region.aspx",
			data: { path: path, route: route, name: region, parameters: parameters },
			success:
				function(data) {
					$(container).before(data).remove();
					regionLoaded();
				},
			error:
				function() {
					$(container).remove();
					regionLoaded();
				}
		});
	};

	function loadScript() {
		if (includedScripts.length > 0) {
			var script = includedScripts.shift();
			if (script.beforeLoad)
				script.beforeLoad();

			var scriptTag = document.createElement("script");
			scriptTag.type = "text/javascript";
			scriptTag.src = script.url;

			function scriptLoaded() {
				//clearInterval(script.timer);
				scriptTag.onreadystatechange = scriptTag.onerror = scriptTag.onload = null;
				if (script.afterLoad)
					script.afterLoad();

				loadScript();
			}
			scriptTag.onerror = scriptTag.onload = scriptLoaded;
			scriptTag.onreadystatechange = function() {
				//clearInterval(script.timer);
				if (/loaded|complete/.test(scriptTag.readyState))
					scriptLoaded();
			}
			document.getElementsByTagName("head")[0].appendChild(scriptTag);/*
			script.timer = setInterval(
				function() {
					if (!scriptTag.readyState &&
						/loaded|complete/.test(document.readyState) ||
						/loaded|complete/.test(scriptTag.readyState))
						scriptLoaded();
				},
				10
			);*/
		}
	}

	var script = function(url, beforeLoad, afterLoad) {
		for (i = 0; i < includedScripts.length; i++)
			if (includedScripts[i].url == url)
				return;

		includedScripts.push({ url: url, beforeLoad: beforeLoad, afterLoad: afterLoad });

		if (includedScripts.length == 1)
			window.onload = function() {
				if (pendingRegions <= 0)
					loadScript();
			};
	};

	var banner = function(container, zone) {
		var url = "http://ad1.primorye.ru/adjs.php?n=";
		url += new String(Math.random()).substring(2, 11);
		url += "&what=zone:" + zone + "&target=_self&exclude=";
		if (!document.phpAds_used) url += ",";
		if (document.referrer) url += "&referer=" + escape(document.referrer);

		var write = document.write;
		cms.script("http://ad1.primorye.ru/adx.js");
		cms.script(url,
			container ? function() {
				var div = $(container);
				document.write = function(data) {
					div.before(data);
				}
			} : null,
			container ? function() {
				document.write = write;
				$(container).remove();
			}
			: null
		);
	};

	return {
		script: script,
		banner: banner,
		loadRegion: loadRegion
	};
} ();