
function SOAPClientParameters(arr)
{
	var _pl = (arr==undefined || arr==null) ? new Array() : arr;
	this.arr = function() { return _pl; }
	this.add = function(name, value)
	{
		if((value + "" == "undefined") || (value + "" == "null"))
			value = "";
		_pl[name] = value;
		return this;
	}
	this.toXml = function()
	{
		var xml = "";
		for(var p in _pl)
		{
			if(typeof(_pl[p]) != "function")
				xml += "<" + p + ">" + _pl[p].toString().replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;") + "</" + p + ">";
		}
		return xml;
	}
}
function SOAPClient() {}
SOAPClient.invoke = function(url, method, parameters, async, callback, xmlhttp_method)
{
	if(async)
		SOAPClient._loadWsdl(url, method, parameters, async, callback, xmlhttp_method);
	else
		return SOAPClient._loadWsdl(url, method, parameters, async, callback, xmlhttp_method);
}
SOAPClient_cacheWsdl = new Array();
SOAPClient._loadWsdl = function(url, method, parameters, async, callback, xmlhttp_method)
{
	var wsdl = SOAPClient_cacheWsdl[url];
	if(wsdl + "" != "" && wsdl + "" != "undefined")
		return SOAPClient._sendSoapRequest(url, method, parameters, async, callback, wsdl, xmlhttp_method);
	var xmlHttp = SOAPClient._getXmlHttp();
	var wsdl_url = wsdlData + url + ".wsdl";
	xmlHttp.open("GET", wsdl_url, async);
	if(async)
	{
		xmlHttp.onreadystatechange = function()
		{
			if(xmlHttp.readyState == 4)
				SOAPClient._onLoadWsdl(url, method, parameters, async, callback, xmlHttp, xmlhttp_method);
		}
	}
	xmlHttp.send(null);
	if (!async)
		return SOAPClient._onLoadWsdl(url, method, parameters, async, callback, xmlHttp, xmlhttp_method);
}
SOAPClient._onLoadWsdl = function(url, method, parameters, async, callback, req, xmlhttp_method)
{
       var wsdl = req.responseXML;
       SOAPClient_cacheWsdl[url] = wsdl;
       return SOAPClient._sendSoapRequest(url, method, parameters, async, callback, wsdl, xmlhttp_method);
}
function GetAttribute(node, attribute) {
	if(node.nodeType == 1) {
		if(node.attributes[attribute] + "" == "undefined")
		{
			if(node.attributes.getNamedItem(attribute) != null)
				return node.attributes.getNamedItem(attribute).nodeValue;
		}
		else
		{
			if(node.attributes[attribute] != null)
				return node.attributes[attribute].value;
		}
	} else
		return "undefined";
}
SOAPClient._sendSoapRequest = function(url, method, parameters, async, callback, wsdl, xmlhttp_method)
{
	var ns = (wsdl.documentElement.attributes["targetNamespace"] + "" == "undefined") ? wsdl.documentElement.attributes.getNamedItem("targetNamespace").nodeValue : wsdl.documentElement.attributes["targetNamespace"].value;
	var st, sn;
	var level1 = wsdl.documentElement;
	var request_message = level1.childNodes;
	var i, j = -1;
	for(i=0; i<request_message.length; i++) {
		if(GetAttribute(request_message[i], "name") == (method+"Request")) {
			j = i;
			break;
		}
	}
	if(j != -1) {
		var part = request_message[j].childNodes;
		sn = GetAttribute(part[0], "name");
		st = GetAttribute(part[0], "type");
	}
	var sr =
				"<?xml version=\"1.0\" encoding=\"utf-8\"?>" +
				"<SOAP-ENV:Envelope SOAP-ENV:encodingStyle='http://schemas.xmlsoap.org/soap/encoding/' " +
				"xmlns:SOAP-ENV='http://schemas.xmlsoap.org/soap/envelope/' " +
				"xmlns:xsd='http://www.w3.org/2001/XMLSchema' " +
				"xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' " +
				"xmlns:SOAP-ENC='http://schemas.xmlsoap.org/soap/encoding/' " +
				"xmlns:tns=\"" + ns + "\">" +
				"<SOAP-ENV:Body>" +
				"<tns:" + method + " xmlns:tns=\"" + ns + "\">" +
				"<" + sn + " xsi:type=\"" + st + "\">" +
				parameters.toXml() +
				"</" + sn + ">" +
				"</tns:" + method + "></SOAP-ENV:Body></SOAP-ENV:Envelope>";
	var xmlHttp = (xmlhttp_method + "" == "undefined") ? SOAPClient._getXmlHttp() : xmlhttp_method;
	var ws_url = wsData + url + ".ws";
	xmlHttp.open("POST", ws_url, async);
	var soapaction = ((ns.lastIndexOf("/") != ns.length - 1) ? ns + "/" : ns) + method;
	xmlHttp.setRequestHeader("SOAPAction", soapaction);
	xmlHttp.setRequestHeader("Content-Type", "text/xml; charset=utf-8");
	if(async)
	{
		xmlHttp.onreadystatechange = function()
		{
			if(xmlHttp.readyState == 4)
				SOAPClient._onSendSoapRequest(method, async, callback, wsdl, xmlHttp);
		}
	}
	xmlHttp.send(sr);
	if (!async)
		return SOAPClient._onSendSoapRequest(method, async, callback, wsdl, xmlHttp);
}
SOAPClient._onSendSoapRequest = function(method, async, callback, wsdl, req)
{
	var o = null;
	var nd = SOAPClient._getElementsByTagName(req.responseXML, method + "Response");
	if(nd.length == 0)
	{
		if(req.responseXML.getElementsByTagName("faultcode").length > 0)
			throw new Error(500, req.responseXML.getElementsByTagName("faultstring")[0].childNodes[0].nodeValue);
	}
	else {
		o = SOAPClient._soapresult2object(nd[0], wsdl);
	}
	if(callback) {
		DecodeData(o);
		callback(o, req.responseXML);
	}
	if(!async)
		return o;
}
function DecodeData(obj) {
	if(obj instanceof Object) {
		for(var i in obj) {
			if(obj[i] instanceof Object)
				DecodeData(obj[i]);
			else
      				obj[i] = StrDecodeSlave(obj[i] + "");
		}
	}
}
SOAPClient._getElementsByTagName = function(oNode, sTagName)
{
                        try {
                                return oNode.selectNodes('.//*[local-name()="' + sTagName + '"]');
	                } catch(oExcept) {}
	                var aNodes = oNode.getElementsByTagName(sTagName);
	                if(aNodes.length == 0) {
                                aNodes = [];
                                function NodeRunner(oNode) {
                                        var aChildNodes = oNode.childNodes;
                                        if(!aChildNodes) return;
                                        for(var i=0; i<aChildNodes.length; i++) {
                                                if(!aChildNodes[i].tagName) continue;
                                                if(aChildNodes[i].tagName.indexOf(sTagName) != -1)
                                                        aNodes.push(aChildNodes[i]);
                                                NodeRunner(aChildNodes[i]);
                                        }
                                        return;
                                }
                                NodeRunner(oNode);
                                return aNodes;
                        }
                        return aNodes;
}
SOAPClient._soapresult2object = function(node, wsdl)
{
	return SOAPClient._node2object(node, wsdl);
}
SOAPClient._node2object = function(node, wsdl)
{
	if(node == null)
		return null;
	if(node.nodeType == 3 || node.nodeType == 4)
		return SOAPClient._extractValue(node, wsdl);
	if (node.childNodes.length == 1 && (node.childNodes[0].nodeType == 3 || node.childNodes[0].nodeType == 4))
		return SOAPClient._node2object(node.childNodes[0], wsdl);
	var isarray = SOAPClient._getTypeFromWsdl(node.nodeName, wsdl).toLowerCase().indexOf("arrayof") != -1;
	if(!isarray)
	{
		var obj = null, text_node = false;
		if(node.hasChildNodes()) {
			obj = new Object();
			if(node.childNodes[0].nodeName == "#text") {
				text_node = true;
				obj[node.childNodes[0].nodeName] = "";
			}
		        for(var i = 0; i < node.childNodes.length; i++)
                        {
			        var p = SOAPClient._node2object(node.childNodes[i], wsdl);
			        if(text_node)
				       obj[node.childNodes[i].nodeName] += p;
			        else
				       obj[node.childNodes[i].nodeName] = p;
		        }
		        return obj;
		}
	}
	else
	{
		var l = new Array();
		for(var i = 0; i < node.childNodes.length; i++)
			l[l.length] = SOAPClient._node2object(node.childNodes[i], wsdl);
		return l;
	}
	return null;
}
SOAPClient._extractValue = function(node, wsdl)
{
	var value = node.nodeValue;
	switch(SOAPClient._getTypeFromWsdl(node.parentNode.nodeName, wsdl).toLowerCase())
	{
		default:
		case "s:string":
			return (value + "" != "null") ? value : "";
		case "s:boolean":
			return value+"" == "true";
		case "s:int":
		case "s:long":
			return (value != null) ? parseInt(value + "", 10) : 0;
		case "s:double":
			return (value != null) ? parseFloat(value + "") : 0;
		case "s:datetime":
			if(value == null)
				return null;
			else
			{
				value = value + "";
				value = value.substring(0, value.lastIndexOf("."));
				value = value.replace(/T/gi," ");
				value = value.replace(/-/gi,"/");
				var d = new Date();
				d.setTime(Date.parse(value));
				return d;
			}
	}
}
SOAPClient._getTypeFromWsdl = function(elementname, wsdl)
{
	var ell = wsdl.getElementsByTagName("s:element");
	if(ell.length == 0)
		ell = wsdl.getElementsByTagName("element");
	for(var i = 0; i < ell.length; i++)
	{
		if(ell[i].attributes["name"] + "" == "undefined")
		{
			if(ell[i].attributes.getNamedItem("name") != null && ell[i].attributes.getNamedItem("name").nodeValue == elementname && ell[i].attributes.getNamedItem("type") != null)
				return ell[i].attributes.getNamedItem("type").nodeValue;
		}
		else
		{
			if(ell[i].attributes["name"] != null && ell[i].attributes["name"].value == elementname && ell[i].attributes["type"] != null)
				return ell[i].attributes["type"].value;
		}
	}
	return "";
}
SOAPClient._getXmlHttp = function()
{
	try
	{
		if(window.ActiveXObject)
			return new ActiveXObject(SOAPClient._getXmlHttpProgID());
		if(window.XMLHttpRequest)
		{
			var req = new XMLHttpRequest();
			if(req.readyState == null)
			{
				req.readyState = 1;
				req.addEventListener("load",
									function()
									{
										req.readyState = 4;
										if(typeof req.onreadystatechange == "function")
											req.onreadystatechange();
									},
									false);
			}
			return req;
		}
	}
	catch (ex) {}
	throw new Error("Your browser does not support XmlHttp objects");
}
SOAPClient._getXmlHttpProgID = function()
{
	if(SOAPClient._getXmlHttpProgID.progid)
		return SOAPClient._getXmlHttpProgID.progid;
	var progids = ["Msxml2.XMLHTTP.5.0", "Msxml2.XMLHTTP.4.0", "MSXML2.XMLHTTP.3.0", "MSXML2.XMLHTTP", "Microsoft.XMLHTTP"];
	var o;
	for(var i = 0; i < progids.length; i++)
	{
		try
		{
			o = new ActiveXObject(progids[i]);
			return SOAPClient._getXmlHttpProgID.progid = progids[i];
		}
		catch (ex) {};
	}
	throw new Error("Could not find an installed XML parser");
}
function StrDecodeSlave(str)
{
	replace = [ " ", "!", "\"", "%", "&", "'", "(", ")", "*", "+", "," ,"-", ".", "/", ":", ";", "<", "=", ">", "?", "@", "[", "]", "^", "_", "`", "{", "}", "#", "\\", "|", "$" ];
	template = [ /#32/g, /#33/g, /#34/g, /#37/g, /#38/g, /#39/g, /#40/g, /#41/g, /#42/g, /#43/g, /#44/g, /#45/g, /#46/g, /#47/g, /#58/g, /#59/g, /#60/g, /#61/g, /#62/g, /#63/g, /#64/g, /#91/g, /#93/g, /#94/g, /#95/g, /#96/g, /#123/g, /#125/g, /#35/g, /#92/g, /#124/g, /#36/g ];
	var res = str;
	for(var i=0;i<template.length; i++)
		res = res.replace(template[i], replace[i]);
	return res;
}
var INDEX_NONE = -1;
SheduleManager_services_name 	      = new Array;
SheduleManager_services_url 	      = new Array;
SheduleManager_services_methods       = new Array;
SheduleManager_task_green_mile 	      = new Array;
SheduleManager_task_heap	      = new Array;
SheduleManager_finder 		      = new Array;
SheduleManager_stopped		      = false;
SheduleManager_info_task_id	      = INDEX_NONE;
SheduleManager_progress_flag	      = false;
SheduleManager_status_text	      = "";
SheduleManager_requests		      = 0;
SheduleManager_max_requests	      = 0;
SheduleManager_limit_request	      = 4;
var TF_NOTHING			      = 0;
var TF_FIRE_RUN 		      = 1;
var TF_STARTED			      = 2;
var TF_FINISHED			      = 4;
var TF_SLEEP			      = 8;
var TF_RUN_CYCLE		      = 16;
var TF_RUN_ONCE			      = 32;
var TF_PARAMS_IS_BORN		      = 64;
var TF_PARAMS_NO_BORN		      = 128;
var TF_AJAX_REQUEST_PROCESS	      = 256;
var TF_AJAX_REQUEST_SLEEP	      = 512;
var MAX_FLAG_VALUE		      = 1023;
Task.prototype.xmlHttp 		      = null;
Task.prototype.taskFlag 	      = TF_NOTHING;
Task.prototype.suId 		      = null;
Task.prototype.srv_url 		      = null;
Task.prototype.srv_method 	      = null;
Task.prototype.mtd_params 	      = null;
Task.prototype.async		      = false;
Task.prototype.callback 	      = null;
Task.prototype.userData		      = null;
Task.prototype.status_info	      = null;
Task.prototype.status_icon	      = null;
Task.prototype.total_request	      = 0;
Task.prototype.invoke = function() {
	if((this.taskFlag & TF_RUN_ONCE) && (this.taskFlag & TF_STARTED))
		return;
	if(this.taskFlag & TF_FINISHED)
		return;
	if(this.srv_url == null && this.srv_method == null)
		return;
	if(this.xmlHttp == null) {
		this.xmlHttp = SOAPClient._getXmlHttp();
		this.taskFlag |= TF_STARTED;
	}
	if(this.taskFlag & TF_PARAMS_IS_BORN || this.taskFlag & TF_PARAMS_NO_BORN) {
		this.taskFlag &= (MAX_FLAG_VALUE - TF_PARAMS_IS_BORN);
		SOAPClient.invoke(this.srv_url, this.srv_method, this.mtd_params, this.async, this.callback, this.xmlHttp);
		this.total_request++;
		this.taskFlag |= TF_AJAX_REQUEST_PROCESS;
		SheduleManager_requests++;
		SheduleManager_max_requests++;
	}
};
Task.prototype.setParams = function(mtd_params, async, callback) {
	this.mtd_params = mtd_params; 	this.async = async;
	this.callback = callback; 		this.taskFlag |= TF_PARAMS_IS_BORN;
	if(this.taskFlag & TF_FIRE_RUN) {
		this.invoke();
        }
};
Task.prototype.setStatusInfo = function(st_info, st_icon) {
	this.status_info = st_info; this.status_icon = st_icon;
	if(this.status_info != null)
		this.status_info += "<strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</strong>";
	SheduleManager_progress_flag = true;
};
Task.prototype.getName = function()		{ return this.srv_method; };
Task.prototype.getSignature = function() 	{ return this.srv_method + "$" + this.suId; };
Task.prototype.getStatus = function() 		{ return this.xmlHttp.readyState; };
Task.prototype.getUserData = function()		{ return this.userData; };
Task.prototype.setUserData = function(udata)	{ this.userData = udata; };
Task.prototype.setFlag = function(flag) 		{ this.taskFlag |= flag; };
Task.prototype.zeroFlag = function(flag) 		{ this.taskFlag &= (MAX_FLAG_VALUE - flag); };
Task.prototype.checkFlag = function(flag) 		{ return (this.taskFlag & flag); };
Task.prototype.swapFlag = function(old_flag, new_flag)	{ this.zeroFlag(old_flag); this.setFlag(new_flag); };
function Task(srv_name, srv_method, flag) {
	this.srv_url = SheduleManager_services_url[srv_name + ""];
	this.srv_method = srv_method;
	this.taskFlag = flag;
}
SheduleManager.stopped = false;
SheduleManager.add_service = function(name, url) {
	SheduleManager_services_name.push(name);
	SheduleManager_services_url[name + ""] = url;
	SheduleManager_services_methods[name + ""] = new Array;
};
SheduleManager.add_methods = function(srv_name, srv_method) { SheduleManager_services_methods[srv_name + ""].push(srv_method); };
SheduleManager.get_service = function(name) { return SheduleManager_services_url[name + ""]; };
SheduleManager.add_task = function(srv_name, srv_method, flag) {
	SheduleCycle.stopped = true;
        flag |= TF_AJAX_REQUEST_SLEEP;
	var task = new Task(srv_name, srv_method, flag);
	task.suId = 0;
	SheduleManager_finder[task.getSignature() + ""] = SheduleManager_task_green_mile.length;
	SheduleManager_task_green_mile.push(task);
	SheduleCycle.stopped = false;
	return task;
};
SheduleManager.getLastTaskWithStatusInfo = function() {
	var lastTask;
	if(SheduleManager_task_green_mile.length == 0) {
		return INDEX_NONE;
	}
	for(var i=SheduleManager_task_green_mile.length-1; i>=0; i--) {
		lastTask = SheduleManager_task_green_mile[i];
		if(lastTask.status_icon != null || lastTask.status_info != null)
			return i;
	}
	return INDEX_NONE;
};
SheduleManager.buildFlagString = function(flag) {
	var flagSep = "";
	var flagString = "{ ";
	if(flag & TF_NOTHING) { flagString += flagSep + "TF_NOTHING"; flagSep += " | "; }
	if(flag & TF_FIRE_RUN) { flagString += flagSep + "TF_FIRE_RUN"; flagSep += " | "; }
	if(flag & TF_STARTED) { flagString += flagSep + "TF_STARTED"; flagSep += " | "; }
	if(flag & TF_FINISHED) { flagString += flagSep + "TF_FINISHED"; flagSep += " | "; }
	if(flag & TF_SLEEP) { flagString += flagSep + "TF_SLEEP"; flagSep += " | "; }
	if(flag & TF_RUN_CYCLE) { flagString += flagSep + "TF_RUN_CYCLE"; flagSep += " | "; }
	if(flag & TF_RUN_ONCE) { flagString += flagSep + "TF_RUN_ONCE"; flagSep += " | "; }
	if(flag & TF_PARAMS_IS_BORN) { flagString += flagSep + "TF_PARAMS_IS_BORN"; flagSep += " | "; }
	if(flag & TF_PARAMS_NO_BORN) { flagString += flagSep + "TF_PARAMS_NO_BORN"; flagSep += " | "; }
	flagString += " }";
	return flagString;
};
SheduleManager.getLastTaskInfo = function() {
	if(SheduleManager_task_green_mile.length == 0)
		return "";
	var task = SheduleManager_task_green_mile[SheduleManager_task_green_mile.length-1];
	return "   METHOD: " + task.srv_method + " (*) TASK_FLAGS = " + SheduleManager.buildFlagString(task.taskFlag) + "     ";
};
SheduleManager.isHaveFireTask = function() {
	var fireTask;
	if(SheduleManager_task_green_mile.length == 0) {
		return false;
	}
	for(var i=0; i<SheduleManager_task_green_mile.length; i++) {
		fireTask = SheduleManager_task_green_mile[i];
		if(fireTask.taskFlag & TF_FIRE_RUN)
			return true;
	}
	return false;
};
SheduleManager.process = function() {
	var currTask, infoTask;
	if(SheduleManager_progress_flag) {
		lit = SheduleManager.getLastTaskWithStatusInfo();
		if(lit != INDEX_NONE) {
			infoTask = SheduleManager_task_green_mile[lit];
		} else {
		}
		SheduleManager_progress_flag = false;
	}
	for(var i=0; i<SheduleManager_task_green_mile.length; i++) {
		currTask = SheduleManager_task_green_mile[i];
		if(currTask.checkFlag(TF_STARTED)) {
			if(currTask.checkFlag(TF_RUN_ONCE)) {
				if(currTask.checkFlag(TF_AJAX_REQUEST_PROCESS)) {
					if(currTask.getStatus() == 4) {
						currTask.swapFlag(TF_AJAX_REQUEST_PROCESS, TF_AJAX_REQUEST_SLEEP);
						currTask.swapFlag(TF_STARTED, TF_FINISHED);
						SheduleManager_requests--;
					}
				}
			}
			if(currTask.checkFlag(TF_RUN_CYCLE)) {
				if(currTask.checkFlag(TF_AJAX_REQUEST_PROCESS)) {
					if(currTask.getStatus() == 4) {
						currTask.swapFlag(TF_AJAX_REQUEST_PROCESS, TF_AJAX_REQUEST_SLEEP);
						SheduleManager_requests--;
					}
				}
			}
		}
		if(currTask.checkFlag(TF_FINISHED)) {
			SheduleManager_finder[currTask.getSignature() + ""] = INDEX_NONE;
			SheduleManager_task_green_mile.splice(i, 1);
			SheduleManager_progress_flag = true;
			continue;
		}
		if(!(currTask.taskFlag & TF_FIRE_RUN))
			currTask.invoke();
	}
};
function SheduleManager() {}
function SheduleCycle() {
	if(!SheduleManager_stopped)
		SheduleManager.process();
	setTimeout("SheduleCycle()", 1000);
}
var base = "http://www.okarta.ru/";
var wsdlData = base + "wsdl/";
var wsData = base + "ws/";
SheduleManager.add_service("terCommon",  "terCommon");
SheduleManager.add_service("terAuth",    "terAuth");
SheduleManager.add_service("terBlog",    "terBlog");
SheduleManager.add_service("terMarker",  "terMarker");
function Auth() {}
Auth.accInfo = { elmtAccuid : null, elmtUid : null };
Auth.userLogin 	= "";
Auth.userPassword = "";
Auth.regId = null;
Auth.setAccuid = function(accuid) 	{ this.accInfo.elmtAccuid = accuid; };
Auth.getAccuid = function() 		{ return this.accInfo.elmtAccuid; };
Auth.setUid = function(uid) 		{ this.accInfo.elmtUid = uid; };
Auth.getUid = function() 		{ return this.accInfo.elmtUid; };
Auth.userAuth = function(login, password, callback) {
	var soapData = { elmtLogin : login, elmtPassword : password };
	var params = new SOAPClientParameters(soapData);
	var task = SheduleManager.add_task("terAuth", "mtdLogin", TF_RUN_ONCE);
	task.setParams(params, false, function(ret) {
		var cplxResult = ret.cplxResult;
		if(cplxResult.elmtResult == 0) {
			Auth.userLogin = login;
			Auth.userPassword = password;
			Auth.setUid(cplxResult.elmtUid);
			Auth.setAccuid(cplxResult.elmtAccuid);
		} else {  }
		if(callback != undefined) callback(cplxResult);
	});
};
Auth.userQuit = function(callback) {
	Auth.userLogin = "";
	Auth.userPassword = "";
	Auth.setUid(null);
	Auth.setAccuid(null);
	if(callback != undefined) callback();
};
Auth.isAuth = function() { return (Auth.accInfo.elmtAccuid != null && Auth.accInfo.elmtUid != null); };
Auth.changePassword = function(password, callback) {
	if(Auth.getAccuid() == null) return;
	var soapData = { elmtAccuid : Auth.getAccuid(), elmtPassword : password };
	var params = new SOAPClientParameters(soapData);
	var task = SheduleManager.add_task("terAuth", "mtdChangePassword", TF_RUN_ONCE);
	task.setParams(params, false, function(ret) {
		var cplxResult = ret.cplxResult;
		if(cplxResult.elmtResult == 0) {
			Auth.userPassword = password;
		} else {  }
		if(callback != undefined) callback(cplxResult);
	});
};
Auth.regSession = function(callback) {
        Auth.regId = null;
	var soapData = { elmtCaptchaType : "0" };
	var params = new SOAPClientParameters(soapData);
	var task = SheduleManager.add_task("terAuth", "mtdGetRegId", TF_RUN_ONCE);
	task.setParams(params, false, function(ret) {
		var cplxResult = ret.cplxResult;
		if(cplxResult.elmtResult == 0) {
                           Auth.regId = cplxResult.elmtRegId;
		} else { Auth.regId = null;  }
		if(callback != undefined) callback(cplxResult);
        });
};
Auth.regUser = function(login, password, captcha, callback) {
        if(Auth.regId == null) return;
	var soapData = { elmtLogin : login, elmtPassword : password, elmtCaptchaId : Auth.regId, elmtCaptchaText : captcha };
	var params = new SOAPClientParameters(soapData);
	var task = SheduleManager.add_task("terAuth", "mtdRegUser", TF_RUN_ONCE);
	task.setParams(params, false, function(ret) {
		var cplxResult = ret.cplxResult;
		if(cplxResult.elmtResult == 0) {
		} else {  }
		if(callback != undefined) callback(cplxResult);
                Auth.regId = null;
        });
};
function User() {}
User.userInfo = new MapArray();
User.getInfo = function(data, callback) {
	var userInfo = -1;
	if(data.elmtUid != undefined) {
		userInfo = this.userInfo.get(data.elmtUid);
		if(userInfo != -1) return userInfo;
	}
	var ruleReq = { 'elmtLogin' : '*', 'elmtUid' : '*', 'elmtAname' : '*',
			'elmtMyWords' : '*', 'elmtInterests' : '*' };
	for(var i in ruleReq) { if(data[i] == undefined) data[i] = ruleReq[i]; }
	var params = new SOAPClientParameters(data);
	var task = SheduleManager.add_task("terAuth", "mtdGetAllUserInfo", TF_RUN_ONCE|TF_FIRE_RUN);
	task.setParams(params, false, function(ret) {
		var cplxResult = ret.cplxResult;
		var splitData = [ "elmtUid", "elmtAname", "elmtLogin" ];
		cplxResult.arr = SOAPUtils.ArrayBuilder(cplxResult, splitData);
		if(cplxResult.elmtResult == 0) {
			userInfo = cplxResult.arr[0];
			User.userInfo.add(userInfo.elmtUid, userInfo);
		} else {  }
		if(callback != undefined) callback(cplxResult);
	});
	return userInfo;
};
User.getLoginByUid = function(uid) {
	var data = { 'elmtUid' : uid };
	var userInfo = this.getInfo(data);
	if(userInfo == -1) return '';
	return userInfo.elmtLogin;
};
User.getUidByLogin = function(login) {
	var data = { 'elmtLogin' : login };
	var userInfo = this.getInfo(data);
	if(userInfo == -1) return null;
	return userInfo.elmtUid;
};
var Subtools_Warning_Text = "Это приложение не имеет внешних инструментов.";
function CE(tag) { return document.createElement(tag); }
function GE(id) { return document.getElementById(id); }
function def() {
  	for(var i=0; i<arguments.length; ++i) { if(typeof(arguments[i]) == 'undefined') return false; }
  	return true;
}
function getClientWidth() {
 	var v = 0, d = document, w = window;
  	if((!d.compatMode || d.compatMode == 'CSS1Compat') && !w.opera && d.documentElement && d.documentElement.clientWidth) {
		v = d.documentElement.clientWidth; }
  	else if(d.body && d.body.clientWidth) {
		v = d.body.clientWidth;
	} else if(def(w.innerWidth, w.innerHeight, d.height)) {
    		v = w.innerWidth;
    		if(d.height > w.innerHeight) v -= 16;
  	}
  	return v;
}
function getClientHeight() {
  	var v = 0, d = document, w = window;
  	if((!d.compatMode || d.compatMode == 'CSS1Compat') && !w.opera && d.documentElement && d.documentElement.clientHeight) {
		v = d.documentElement.clientHeight;
	} else if(d.body && d.body.clientHeight) {
		v = d.body.clientHeight;
	} else if(def(w.innerWidth, w.innerHeight, d.width)) {
    		v = w.innerHeight;
    		if(d.width > w.innerWidth) v -= 16;
  	}
  	return v;
}
function XML() {}
XML.__parser = null;
XML.__doc = null;
XML.LoadByURI = function(uri) {
	try { this.__doc = new ActiveXObject("Microsoft.XMLDOM"); }
	catch(e) {
		try { this.__doc = document.implementation.createDocument("", "", null); }
		catch(e) { alert(e.message); }
	}
	try {
		this.__doc.async = false;
		try {
			this.__doc.load(uri + "?" + parseInt(Math.random()*1000));
		} catch(e) {
			var xmlhttp = new XMLHttpRequest();
			xmlhttp.open("GET", uri, false);
			xmlhttp.send(null);
			this.__doc = xmlhttp.responseXML.documentElement;
		}
	}
	catch(e) { alert(e.message); }
	return this.__doc;
}
XML.LoadByString = function(str) {
	try {
		this.__doc = new ActiveXObject("Microsoft.XMLDOM");
		this.__doc.async = false;
		this.__doc.loadXML(str);
	}
	catch(e) {
		try {
			this.__parser = new DOMParser();
			this.__doc = this.__parser.parseFromString(str, "text/xml");
		}
		catch(e) { alert(e.message); }
	}
	return this.__doc;
}
XML.GetEBTN = function(node, tag) {
	try {   if(document.importNode && XML.__doc != node) node = document.importNode(node, true);
                return node.getElementsByTagName(tag);
        } catch(e) {}
}
XML.GetVBTN = function(node, tag) {
	try {   if(document.importNode && XML.__doc != node) node = document.importNode(node, true);
                node = node.getElementsByTagName(tag)[0];
                if(document.importNode && XML.__doc != node) node = document.importNode(node, true);
                node = node.childNodes[0];
                if(document.importNode && XML.__doc != node) node = document.importNode(node, true);
                return node.nodeValue;
        } catch(e) {}
}
function onready(el, func) {
	this.args = new Array(el, func);
  	this.doTry = function() {
		try {
			var el = eval(this.args[0]);
	      		el.onloading = this.args[1];
      			el.onloading();
      			clearInterval(this.args[2]);
    		} catch(e) {}
	}
	this.doTry.bind = function(object) {
		var method = this;
		return function() { method.apply(object); }
	}
	this.args[2] = setInterval(this.doTry.bind(this), 250);
	return this;
};
function LoadManager() {}
LoadManager.modules = [];
LoadManager.LoadPack = function(url, onload) {
	var packCount = 1, packTotal = url.length;
	for(var i=0; i<url.length; i++) {
		LoadManager.LoadScript(url[i], function() {
			if(packCount == packTotal) {
				if(onload != undefined) onload(packCount);
			}
			packCount++;
		});
	}
};
LoadManager.LoadScript = function(url, onload) {
	var module = LoadManager.modules[url];
	if(module != undefined) {
		if(module.loaded) module.ref++;
	} else {
		var script = document.createElement("script");
		script.setAttribute("id", url);
		script.setAttribute("src", url);
		script.setAttribute("type", "text/javascript");
		module = { 'url' : url, 'loaded' : false, 'node' : script, 'ref' : 1 };
		LoadManager.modules[url] = module;
		document.getElementsByTagName("head")[0].appendChild(script);
		if(onload != undefined) new onready(script, function() { module.loaded = true; onload(); });
	}
};
LoadManager.UploadScript = function(url) {
	var module = LoadManager.modules[url];
	if(module != undefined) {
		module.ref--;
		if(module.ref <= 0) {
			var script = document.getElementById(url);
			if(script != null) {
				script.parentNode.removeChild(script);
				delete script;
			}
			delete module;
		}
	}
};
function Linker() {}
Linker.__currentAgent = null;
Linker.IF_NULL = 0;
Linker.IF_RESOURCE_XMLFILE = 1;
Linker.IF_RESOURCE_STRING = 2;
Linker.OF_NULL = 0;
Linker.OF_SUCCESS = 1;
Linker.OF_COMPONENTS_LOADED = 2;
Linker.OF_FAILED = 128;
Linker.OF_AGENT_FAILED = 256;
Linker.OF_RESOURCE_FAILED = 512;
Linker.BuildApplication = function(resource, flags, callback) {
	var app = { result : Linker.OF_NULL }, xml = null;
	if(flags & Linker.IF_RESOURCE_XMLFILE) {
		xml = XML.LoadByURI(resource);
	} else if(flags & Linker.IF_RESOURCE_STRING) {
		xml = XML.LoadByString(resource);
	} else { app.result |= Linker.OF_RESOURCE_FAILED | Linker.OF_FAILED; return app; }
	app.agents = XML.GetVBTN(xml, "agents").split(':');
	if(this.__agentChecker(app.agents) == false) { app.result |= Linker.OF_AGENT_FAILED; return app; }
	app.name = XML.GetVBTN(xml, "name");
	app.appuid = XML.GetVBTN(xml, "appuid");
	var component = XML.GetEBTN(xml, "component");
	app.scripts = [];
	for(var i=0; i<component.length; i++) {
		app.scripts.push(XML.GetVBTN(component[i], "uri"));
	}
	LoadManager.LoadPack(app.scripts, function() {
		app.result |= Linker.OF_COMPONENTS_LOADED | Linker.OF_SUCCESS;
		if(callback != undefined) { callback(app); }
	});
	if(app.scripts.length == 0) { app.result |= Linker.OF_SUCCESS; }
	return app;
}
Linker.__agentChecker = function(agents) {
	if(agents[0] = 'any') return true;
	this.__currentAgent = navigator.userAgent.toLowerCase();
	for(var i=0; i<agents.length; i++) {
		var agentStr = agents[i];
		if(this.__currentAgent.indexOf(agentStr) != -1)
			return true;
	}
	return false;
};
function Application() {
	this.__appuid = null;
	this.__appname = null;
	this.__agents = null;
	this.__scripts = [];
	this.__result = 0;
	this.Run = function(flags) {}
	this.Stop = function() {}
}
function Box() {
	this.box = null;
	this.hideBox = null;
	this.caption = null;
	this.content = null;
	this.show = true;
	this.showTitle = "";
	this.hideTitle = "";
}
Box.prototype.box;
Box.prototype.hideBox;
Box.prototype.caption;
Box.prototype.content;
Box.prototype.show;
Box.prototype.showTitle;
Box.prototype.hideTitle;
Box.prototype.create = function(title, show) {
	this.show = show;
	this.showTitle = title;
	this.hideTitle = title;
	this.box = CE('div');
	with(this.box.style) {
		background = "#eee";
		marginTop = "0px";
		marginBottom = "4px";
	}
	this.hideBox = CE('div');
	with(this.hideBox.style) { position = "absolute"; left = "-5000px"; top = "-5000px"; visibility = "hidden"; }
	document.body.appendChild(this.hideBox);
	this.caption = CE('div');
	with(this.caption.style) { background = "#ccc"; padding = "2px"; cursor="pointer"; }
	if(this.show == true) {
		this.caption.innerHTML = "<div><img src='bm_arrow_up.png'></img>&nbsp;&nbsp;" + this.showTitle  + "</div>";
	} else {
		this.caption.innerHTML = "<div><img src='bm_arrow_down.png'></img>&nbsp;&nbsp;" + this.hideTitle  + "</div>";
	}
	this.caption.__box = this;
	this.caption.onclick = function() {
		this.__box.show = !this.__box.show;
		if(this.__box.show == true) {
			this.__box.caption.innerHTML = "<div><img src='bm_arrow_up.png'></img>&nbsp;&nbsp;" + this.__box.showTitle  + "</div>";
			this.__box.hideBox.removeChild(this.__box.content);
			this.__box.box.appendChild(this.__box.content);
		} else {
			this.__box.caption.innerHTML = "<div><img src='bm_arrow_down.png'></img>&nbsp;&nbsp;" + this.__box.hideTitle  + "</div>";
			this.__box.box.removeChild(this.__box.content);
			this.__box.hideBox.appendChild(this.__box.content);
		}
	}
	this.box.appendChild(this.caption);
	this.content = CE('div');
	with(this.content.style) { padding = "4px"; }
	if(show) this.box.appendChild(this.content);
	else this.hideBox.appendChild(this.content);
	return this.box;
};
Box.prototype.setSHTitle = function(show, hide) {
	this.showTitle = show;
	this.hideTitle = hide;
	if(this.show == true) { this.setCaption(this.showTitle, "bm_arrow_up.png"); }
	else { this.setCaption(this.hideTitle, "bm_arrow_down.png"); }
};
Box.prototype.setCaption = function(text, icon) {
	this.caption.innerHTML = "<div>" + ((icon != undefined) ? "<img src='" + icon + "'></img>" : "") + "&nbsp;&nbsp;" + text  + "</div>";
};
Box.prototype.setContent = function(content) {
	this.content.innerHTML = content;
};
function AppBar() {}
AppBar.linker = null;
AppBar.appbar = null;
AppBar.client = null;
AppBar.tools = null;
AppBar.active = null;
AppBar.tasks = [];
AppBar.addApp = function(name, width, height, toolsid) {
	var tools = null;
	var button = this.createButton(name);
	var applayer = this.createAppLayer(width, height);
	this.linker.appendChild(applayer);
	if(toolsid != "") {
		tools = this.createAppTools(toolsid);
		this.linker.appendChild(tools);
	}
	button.__appBar = this;
	button.__id = this.tasks.length;
	button.onclick = function() { this.__appBar.activeApp(this.__id); }
	this.tasks.push({ name : name, applayer : applayer, button : button, tools : tools, isLinked : false, ondeactive : null, onactive : null });
	return applayer;
};
AppBar.addEventListener = function(id, ev, callback) { this.tasks[id][ev] = callback; };
AppBar.hideButton = function(id) { this.appbar.removeChild(this.tasks[id].button); };
AppBar.showButton = function(id) { this.appbar.appendChild(this.tasks[id].button); };
AppBar.init = function(appbar, client, tools) {
	this.appbar = appbar;
	this.client = client;
	this.tools = tools;
	this.linker = CE("div");
	with(this.linker.style) {
		position = "absolute";
		left = "-5000px";
		top = "-5000px";
		visibility = "hidden";
	}
	document.body.appendChild(this.linker);
	return this.appbar;
};
AppBar.createAppLayer = function(w, h) {
	var layer = CE("div");
	with(layer.style) {
		position = "relative";
		width = w; height = h;
		overflow = "hidden";
		visibility = "hidden";
	}
	return layer;
};
AppBar.createAppTools = function(id) {
	var tools = CE('div');
	tools.id = id;
	return tools;
};
AppBar.createButton = function(name) {
	var taskBtn = CE('div');
	with(taskBtn) {
		id = "appbtn";
		innerHTML = "<div style='width: 100%;'>" + name + "</div>";
	}
	this.appbar.appendChild(taskBtn);
	return taskBtn;
};
AppBar.activeApp = function(id) {
	if(this.active == id) return;
	var button, applayer;
	if(this.active != null) {
		button = this.tasks[this.active].button;
		applayer = this.tasks[this.active].applayer;
		button.id = "appbtn";
		if(this.tasks[this.active].tools != null) {
			this.tools.removeChild(this.tasks[this.active].tools);
			this.linker.appendChild(this.tasks[this.active].tools);
		}
		with(applayer.style) {
			display = "none";
			visibility = "hidden";
		}
		if(this.tasks[this.active].ondeactive != null) this.tasks[this.active].ondeactive();
	}
	button = this.tasks[id].button;
	applayer = this.tasks[id].applayer;
	button.id = "appsel";
	if(this.tasks[id].isLinked == false) {
		this.client.appendChild(applayer);
		this.tasks[id].isLinked = true;
	}
	with(applayer.style) {
		left = "";
		top = "";
		visibility = "";
		display = "block";
	}
	if(this.tasks[id].tools != null) {
		this.tools.innerHTML = "";
		this.linker.removeChild(this.tasks[id].tools);
		this.tools.appendChild(this.tasks[id].tools);
	} else {
		this.tools.innerHTML = Subtools_Warning_Text;
	}
	if(this.tasks[id].onactive != null) this.tasks[id].onactive();
	this.active = id;
	Shell.state2URL();
};
AppBar.resize2client = function() {
	for(var i=0; i<this.tasks.length; i++) {
		if(this.tasks[i].onresize != undefined) {
			this.tasks[i].onresize(this.tasks[i]);
		}
	}
};
var panels = new Array('panel1', 'panel2', 'panel3');
var selectedTab = null;
function showPanel(tab, name) {
	if(selectedTab) {
		selectedTab.style.backgroundColor = '';
		selectedTab.style.paddingTop = '';
		selectedTab.style.marginTop = '4px';
	}
	selectedTab = tab;
	selectedTab.style.backgroundColor = 'white';
	selectedTab.style.paddingTop = '6px';
	selectedTab.style.marginTop = '0px';
	for(i = 0; i < panels.length; i++)
        	document.getElementById(panels[i]).style.display = (name == panels[i]) ? 'block' : 'none';
	return false;
}
function Shell() {}
Shell.__appParam = [];
Shell.__isAppsel = false;
Shell.__appSel = 0;
Shell.__stateURL;
Shell.parseURL = function() {
    var url = document.URL + "";
	if (url.indexOf("appsel=") != -1) {
		this.__appSel = url.replace(/.*appsel=(\d*).*/i, "$1");
		Shell.__isAppsel = true;
	}
	else
		this.__appSel = 1;
    Shell.__stateURL = url;
};
Shell.state2URL = function() {
    var url = location.href + "";
    var separator = "#";
    if(url.indexOf("#") != -1) separator = "&";
    if(url.indexOf("appsel=") != -1) url = url.replace(/appsel=\d*/i, "appsel=" + AppBar.active);
    else url += separator + "appsel=" + AppBar.active;
    location.href = url;
};
Shell.init = function() {
    Shell.parseURL();
	var client = GE("shell_client");
	var sidebar = GE("shell_sidebar");
	var auth_prompt = '<div id="auth_form"><div><b>Логин:</b><br />' +
		'<input id="auth_login" type="text" value="" style="border: 1px solid; border-color: rgb(205, 205, 205); width: 130px;" /></div>' +
		'<div><b>Пароль:</b><br />' +
		'<input id="auth_password" type="password" value="" style="border: 1px solid; border-color: rgb(205, 205, 205); width: 130px;" /></div>' +
		'<br />' +
		'<div align="center"><input id="auth_btn" type="button" value="Войти" style="border: 1px outset rgb(205, 205, 205); color: #fff; background: #5380c0; width: 65px; height: 24px;" /></div>' +
		'</div>';
	var auth_box = new Box;
	auth_box.create("<b>Войти</b>", true);
	auth_box.setSHTitle("<b>Войти</b>", "<b>Войти</b>");
	sidebar.appendChild(auth_box.box);
	auth_box.setContent(auth_prompt);
	var tools = new Box;
	tools.create("<b>Инструменты</b>", true);
	sidebar.appendChild(tools.box);
	var subc = new Box;
	subc.create("<b>Связаные темы</b>", true);
	subc.setContent("Свободно");
	sidebar.appendChild(subc.box);
	AppBar.init(GE("shell_appbar"), GE("shell_client"), tools.content);
	var app1 = AppBar.addApp("Записи", "", "", "innerSidebar", function(app) {});
	Linker.BuildApplication("http://www.okarta.ru/jsclient/blog/blog.xml", Linker.IF_RESOURCE_XMLFILE, function() {
		var blog = '<div id="page"><div id="header"><div id="title"></div>' +
			'<div id="desc"></div></div><div id="content" class="narrowcolumn">' +
			'</div><div id="footer"></div></div>';
		app1.innerHTML = blog;
		Blog.init();
		Blog.setTags(10);
		Blog.subcontent = function(action, data) {
			switch(action) {
				case "actViewPost":
				AppBar.activeApp(0);
				break;
				case "actTag":
				AppBar.activeApp(0);
				break;
				case "actUid":
				AppBar.activeApp(0);
				break;
				case "actInsertMap":
				Editor.saveSelection(Editor.currentId);
				AppBar.activeApp(1);
				GE("map_tools").innerHTML = "Для добавления в запись выберите интересующий участок карты с маркерами и нажмите кнопку \"Добавить\" или для возврата к редактированию без добавления карты \"Отмена\".<br /><input id='map_insert' type='button' value='Добавить' />&nbsp;&nbsp;&nbsp;&nbsp;<input id='map_cancel' type='button' value='Отмена' />";
				GE("map_insert").onclick = function(data) { Mapext.init(); Editor.insertMap(Editor.currentId, map.__getLink()); AppBar.activeApp(0); }
				GE("map_cancel").onclick = function(data) { Mapext.init(); Editor.resetSelection(); AppBar.activeApp(0); }
				break;
				default:
				break;
			}
		}
	});
	var app2 = AppBar.addApp("Карта", client.offsetWidth, getClientHeight() - 116, "map_tools", function(app) {});
	Linker.BuildApplication("http://www.okarta.ru/jsclient/mape/mape.xml", Linker.IF_RESOURCE_XMLFILE, function() {
		Map.updateCommonURI(MAP_COMMON_URL);
		Map.updateStaticURI(MAP_STATIC_URL);
		Map.emapPath = MAP_EMAP_PATH;
		var map = new Map();
		map.createMap(0, 0, app2.offsetWidth, app2.offsetHeight);
		AppBar.addEventListener(1, "onresize", function(app) {
			var layer = app.applayer;
			layer.style.width = client.offsetWidth;
			layer.style.height = getClientHeight() - 116;
			map.resizeViewport(layer.offsetWidth, layer.offsetHeight);
		});
		map.subcontent = function(action, data) {
			if(action == "actToJournal") {
				Blog.setByTag(data);
			} else {
				subc.setContent("<img src='http://static.okarta.ru/img/green_rot.gif' />");
				data = System.l2s(data);
				PostManager.getPostData({ "elmtOutType" : "short", "elmtTag" : data }, function(refer) {
					var rid, content = "";
					content += '<div style="background: #fcfcfc; border: 1px solid rgb(205, 205, 205); padding: 4px; margin-bottom: 0.8em;">';
					if(refer.length == 0) {
						if(action == "actMap") {
							content += 'Для выбранной карты нет записей, вы можете обсудить Воронеж в целом или выбрать любую группу для обсуждения.</div>';
						} else if(action == "actGroup") {
							content += 'Для выбранной группы нет записей, вы можете обсудить группу в целом или выбрать любой маркер из группы для обсуждения.</div>';
						} else if(action == "actMarker") {
							content += 'Для выбранного маркера нет записей. Вы можете стать первым.</div>';
						}
					} else {
						if(action == "actMap") {
							content += '<b>Последние записи для карты Воронежа:</b><br />';
						} else 	if(action == "actGroup") {
							content += '<b>Последние записи для текущей группы:</b><br />';
						} else 	if(action == "actMarker") {
							content += '<b>Последние записи для текущего маркера:</b><br />';
						}
					}
					var start = refer.length-1;
					var end = (start-10 < 0) ? 0 : start-10;
					for(var i=start; i>=end; i--) {
						rid = refer.it(i);
						obj = PostManager.postHeap.get(rid);
						content += '<b><a href="javascript:Blog.setByRid(' + obj.elmtRid + ')" rel="bookmark" title="' + Post_Link_Tip + ' ' +
							obj.elmtSubject + '" style="word-wrap: break-word">' + obj.elmtSubject + '</a></b><br />';
						content += '<small>' + Calendar.stamp2Str(obj.elmtDate) + '</small>&nbsp;&nbsp;';
						content += '<a href="javascript:Blog.setByUid(' + obj.elmtUid + ')">' + User.getLoginByUid(obj.elmtUid) + '</a>';
						content += '<br />';
					}
					content += '</div>';
					content += '<b>Текущие таги: ' + Tag2Ref(data, true) + '</b>';
					subc.setContent(content);
				});
			}
		}
		Mapext.about();
		app2.appendChild(map.root_el);
		map.mapServer = MAP_SERVER;
		map.loadMapByURL("http://www.okarta.ru/jsclient/mape/index.html?mapid=67&mrkover&gs", function() {});
	});
	function Mapext() {}
	Mapext.__currentMarker = null;
	Mapext.__markers = [];
	Mapext.__isLocalData = false;
	Mapext.init = function() {
		var ext_tools = "<div style='background: #fcfcfc; border: 1px solid rgb(205, 205, 205); padding: 12px; margin-bottom: 0.8em; font-weight: bold; font-size: 1.4em;'><a id='get_marker' href='javascript:void(0)'>Мои метки</a><br /><a id='set_marker' href='javascript:void(0)'>Добавить метку (+)</a></div>";
		GE("map_tools").innerHTML = ext_tools;
		GE("set_marker").onclick = Mapext.setMarker;
		GE("get_marker").onclick = Mapext.getMarker;
	};
	Mapext.about = function() {
		var map_tools = "Дополнительные инструменты будут доступны после простой <b><a id='reg_app' href='javascript:void(0)'>регистрации</a></b><br /><br />Пользователи могут: <ul><li>Устанавливать свои метки на карту<li>Помещать выводимый фрагмент карты с маркерами в свои записи</ul>Поместить карту можно во время редактирования записи, для этого в поле редактирования текста есть инструмент \"Разместить карту\".";
		GE("map_tools").innerHTML = map_tools;
		GE("reg_app").onclick = function() { AppBar.activeApp(2); };
	};
	Mapext.listMarkers = function() {
		map.finder_el.innerHTML = '';
		var description = "", markerHtml = "";
		for(var i=0; i<Mapext.__markers.length; i++) {
			marker = Mapext.__markers[i];
			description = marker.description;
			description = description.replace(/<br[^>]*>/gi, '\n');
			description = description.replace(/<.*>/gi, '');
			description = description.replace(/\n/gi, '<br />');
			description = description.length > 100 ? (description.substring(0, 100) + '... <span style="color: #4370b0">Подробнее</span>') : description;
			markerHtml += '<div style="font-size: 13px; padding: 4px; cursor: pointer; margin-bottom: 4px; margin-right: 2px;" onclick="javascript:Map.__toMarker(' + i + ')">' +
					'<div style="color: #4370b0"><b>' + (i+1) + '. <u>' + marker.name + '</u></b>' +
					'</div>' + description + '</div>';
		}
		map.finder_el.innerHTML = markerHtml;
	};
	Mapext.getMarker = function() {
		map.finder_el.innerHTML = "<img src='http://static.okarta.ru/img/green_rot.gif' />";
		map.clearOverlay(Map.OVERLAY_ALL);
		map.clearOverlay2();
		Mapext.__markers = [];
		map.markers = [];
		var soapData = { elmtAccuid : Auth.getAccuid(), elmtMapUid : map.currentMap,
			elmtUid : Auth.getUid(), elmtName : "*", elmtGroup : "*",
			elmtComments : "*", elmtPicsComments : "*", elmtLogicFlag : "strong" };
		var params = new SOAPClientParameters(soapData);
		var task = SheduleManager.add_task("terMarker", "mtdGetMarker", TF_RUN_ONCE);
		task.setParams(params, false, function(ret) {
			var cplxResult = ret.cplxResult;
			if(cplxResult.elmtResult == 0) {
				var splitData = [ "elmtMid", "elmtName", "elmtComments", "elmtLatitude", "elmtLongitude",
					"elmtGroup", "elmtFlags", "elmtUid" ];
				var markers_data = SOAPUtils.ArrayBuilder(cplxResult, splitData);
				for(var i=0; i<markers_data.length; i++) {
					var cm = markers_data[i];
					var marker = new Marker({ lon : cm.elmtLongitude, lat : cm.elmtLatitude });
					marker.flags = cm.elmtFlags;
					marker.setMarkerSize(22, 22);
					marker.__iconName = "flaggrass";
					if(marker.flags.indexOf("icon=") != -1)
						marker.__iconName = marker.flags.replace(/.*icon=([\w]*).*/i, "$1");
					marker.setIcon(Map.mapImg + "icons/22/" + marker.__iconName + ".gif");
					marker.pointX = 11;
					marker.pointY = 11;
					marker.contentWidth = 200;
					marker.contentHeight = 100;
					marker.name = cm.elmtName;
					marker.description = cm.elmtComments;
					marker.__id = i;
					marker.__isEdit = false;
					marker.__isSave = true;
					marker.__mid = cm.elmtMid;
					var content = "<div style='width: 300px;'><table width='100%' style='font-size: 12px;'><tr><td><div style='padding: 4px; background-color: #eeeeee'><b>" + marker.name + "</b></div></td></tr><tr><td><div style='padding: 4px;'>" + marker.description + "</div></td></tr><tr><td><div align='right'><small><a id='edit_marker' href='javascript:void(0)'>Редактировать</a></small></div></td></tr></table></div>";
					marker.content = content;
					Mapext.__markers.push(marker);
					map.markers.push(marker);
					marker.addEventListener('onclick', function() {
						var marker = this.__data;
						Mapext.__currentMarker = marker;
						if(marker.__isEdit == true) Mapext.editMarker();
						else Mapext.showMarker();
					});
				}
				map.drawMarkersArray(map.markers);
				map.infoWindow.hide();
				Mapext.listMarkers();
			} else { map.finder_el.innerHTML = ""; alert(cplxResult.elmtResult); }
		});
	};
	Mapext.setMarker = function() {
		var ext_tools = "<div>Выберите место для установки метки. Левой кнопкой мышки установите метку на карту. В режиме редактирования, маркер можно двигать. Для отмены установки метки нажмите <input type='button' id='cancel_marker' value='Отмена' /></div>";
		GE("map_tools").innerHTML = ext_tools;
		GE("cancel_marker").onclick = function() {
			map.userDragEnd = function(e) {};
			Mapext.init();
		}
		map.userDragStart = function(e) { map.infoWindow.hide(); }
		map.userDragEnd = function(e) {
			var cp = mousePageXY(e);
			var pos = getElementPosition(map.root_el);
			var x = -map.mapX - pos.left + cp.x;
			var y = -map.mapY - pos.top + cp.y;
			function newMarker(geo, icon) {
				marker = new Marker(geo);
				marker.setMarkerSize(22, 22);
				marker.setIcon(Map.mapImg + "icons/22/flaggrass.gif");
				marker.pointX = 11;
				marker.pointY = 11;
				marker.contentWidth = 200;
				marker.contentHeight = 100;
				marker.name = "Название";
				marker.description = "Описание";
				marker.flags = "";
				marker.__isEdit = true;
				marker.__isSave = false;
				marker.__mid = null;
				marker.__id = map.markers.length;
				map.markers.push(marker);
				marker.addEventListener('onclick', function() {
					var marker = this.__data;
					Mapext.__currentMarker = marker;
					if(marker.__isEdit == true) Mapext.editMarker();
					else Mapext.showMarker();
				});
				Mapext.__currentMarker = marker;
				Mapext.editMarker();
			}
			var geo = map.Px2Geo(x, y);
			newMarker(geo, "green.png");
			map.clearOverlay(Map.OVERLAY_ALL);
			map.drawMarkersArray(map.markers);
			map.userDragEnd = function(e) {};
			Mapext.init();
		}
	};
	Mapext.editMarker = function() {
		var marker = Mapext.__currentMarker;
		marker.__isEdit = true;
		var content = '<div style="width: 300px;"><div id="tabs">';
    	content += '<a href="" class="tab" onmousedown="return event.returnValue = showPanel(this, \'panel1\');" id="tab1" onclick="return false;">Текст</a>';
	   	content += '<a href="" class="tab" onmousedown="return event.returnValue = showPanel(this, \'panel2\');" id="tab2" onclick="return false;">Значки</a>';
    	content += '<a href="" class="tab" onmousedown="return event.returnValue = showPanel(this, \'panel3\');" id="tab3" onclick="return false;">Настройки</a>';
		content += '</div>';
    	content += '<div class="panel" id="panel1" style="display: block">';
		content += "<table><tr><td><input style='border: 1px solid; border-color: rgb(200, 200, 200); width: 285px' id='marker_name' value='" + marker.name + "' /></td></tr><tr><td><textarea style='width: 285px; height: 200px; display: none;' id='marker_description'>" + marker.description + "</textarea></td></tr></table>";
		content += '</div>';
    	content += '<div class="panel" id="panel2" style="display: none; padding-top: 5px; height: 200px;">Выбор значков. Скоро!</div>';
    	content += '<div class="panel" id="panel3" style="display: none">В разработке.</div>';
		content += '</div>';
		content += "<div align='right' style='padding: 4px; font-size: 12px;'><small><a id='remove_marker' href='javascript:void(0)'>Удалить</a>&nbsp;|&nbsp;<a id='back_marker' href='javascript:void(0)'>Отмена</a>&nbsp;|&nbsp;<a id='save_marker' href='javascript:void(0)'>Сохранить</a></small></div>";
		marker.content = content;
		marker.isDraggable = true;
		map.openInfoWindow(marker.geo, content);
		Editor.toolSetting = Editor.TOOL_STYLE|Editor.TOOL_ALIGN;
		Editor.init("marker_description", "285px", "170px");
		GE("remove_marker").onclick = Mapext.removeMarker;
		GE("back_marker").onclick = Mapext.showMarker;
		GE("save_marker").onclick = Mapext.saveMarker;
		showPanel(document.getElementById('tab1'), 'panel1');
		marker.__iconName = "flaggrass";
		if(marker.flags.indexOf("icon=") != -1)
			marker.__iconName = marker.flags.replace(/.*icon=([\w]*).*/i, "$1");
		Mapext.iconMarker(function(icons) {
			var iconPanel = document.getElementById('panel2');
			iconPanel.innerHTML = icons;
		});
	};
	Mapext.iconData = null;
	Mapext.iconMarker = function(callback) {
		if(Mapext.iconData) callback(Mapext.iconData);
		var soapData = { elmtFlags : "w22" };
		var params = new SOAPClientParameters(soapData);
        var icons = SheduleManager.add_task("terCommon", "mtdGetIcons", TF_RUN_ONCE);
		icons.setParams(params, true, function(ret) {
				var cplxResult = ret.cplxResult;
				if(cplxResult.elmtResult == 0) {
					var iconArr = cplxResult.elmtName.split("|");
					iconArr.length = iconArr.length - 1;
					Mapext.iconData = Mapext.__createGallery(iconArr, 10);
					callback(Mapext.iconData);
				} else {
					alert(cplxResult.elmtResult);
				}
         });
	};
	Mapext.__createGallery = function(icon_list, cols) {
		var table = "";
		var start_table = "<table style='border-style:none'><tbody>";
		var end_table = "</table>";
		var start_row_table = "<tr>";
		var end_row_table = "</tr>";
		var start_col_table = "<td style='padding:2; border-style:none; width:22; height:22'>";
		var end_col_table = "</td>";
		var start_cell_icon = "<img style='cursor: pointer;' ";
		var end_cell_icon = "onclick='window.chooseIcon(this)'>";
		table = start_table;
		var rows = parseInt(icon_list.length/cols) + 1;
		var curr_id;
		var stdIcon22 = "http://static.okarta.ru/img/icons/22/";
		for(var i=0; i<rows; i++) {
			table += start_row_table;
			for(var j=0; j<cols; j++) {
				table += start_col_table;
				curr_id = i*cols+j;
				if(curr_id<icon_list.length) {
					table += start_cell_icon;
					table += "src='" + stdIcon22 + icon_list[curr_id] + ".gif' "
					table += "id='" + icon_list[curr_id] + "' ";
					table += "title='" + icon_list[curr_id] + "' ";
					table += end_cell_icon;
				}
				table += end_col_table;
			}
			table += end_row_table;
		}
		table += end_table;
		window.chooseIcon = function(icon) {
			var marker = Mapext.__currentMarker;
			marker.__icon_el.src = stdIcon22 + icon.id + ".gif";
			marker.__iconName = icon.id;
		}
		return table;
	}
	Mapext.showMarker = function() {
		var marker = Mapext.__currentMarker;
		marker.__iconName = "flaggrass";
		if(marker.flags.indexOf("icon=") != -1)
			marker.__iconName = marker.flags.replace(/.*icon=([\w]*).*/i, "$1");
		marker.__icon_el.src = Map.mapImg + "icons/22/" + marker.__iconName + ".gif";
		marker.__isEdit = false;
		var content = "<div style='width: 300px;'><table width='100%' style='font-size: 12px;'><tr><td><div style='padding: 4px; background-color: #eeeeee'><b>" + marker.name + "</b></div></td></tr><tr><td><div style='padding: 4px;'>" + marker.description + "</div></td></tr><tr><td><div align='right'><small><a id='edit_marker' href='javascript:void(0)'>Редактировать</a></small></div></td></tr></table></div>";
		marker.content = content;
		marker.isDraggable = false;
		map.openInfoWindow(marker.geo, content);
		GE("edit_marker").onclick = Mapext.editMarker;
	}
	Mapext.buildContent = function(marker) {
		var content = "<div style='width: 250px;'><table width='100%' style='font-size: 12px;'><tr><td><div style='padding: 4px; background-color: #eeeeee'><b>" + marker.name + "</b></div></td></tr><tr><td><div style='padding: 4px;'>" + marker.description + "</div></td></tr><tr><td><div align='right'><small><a id='edit_marker' href='javascript:void(0)'>Редактировать</a></small></div></td></tr></table></div>";
		marker.content = content;
	}
	Mapext.saveMarker = function() {
		var marker = Mapext.__currentMarker;
		Editor.updateTextArea("marker_description");
		marker.name = GE("marker_name").value;
		marker.description = GE("marker_description").value;
		marker.flags = ":s" + map.currentScale + ":user=" + Auth.userLogin + ":icon=" + marker.__iconName;
		if(marker.__isSave == false) { marker.__id = Mapext.__markers.length; Mapext.__markers.push(marker); }
		map.openInfoWindow(marker.geo, "<div style='width: 130px; font-size: 13px'>Сохранение...&nbsp;<img src='http://static.okarta.ru/img/green_rot.gif' /></div>");
		var soapData = { elmtAccuid : Auth.getAccuid(), elmtMapUid : map.currentMap,
			elmtMid : (marker.__mid == null ? "" : marker.__mid), elmtName : marker.name, elmtComments : marker.description,
			elmtLatitude : marker.geo.lat, elmtLongitude : marker.geo.lon, elmtGroup : "-1",
			elmtPreview : "", elmtPicsNum : "", elmtFlags : marker.flags, elmtPicsComments : "" };
		var params = new SOAPClientParameters(soapData);
		var task = SheduleManager.add_task("terMarker", "mtdSetMarker", TF_RUN_ONCE);
		task.setParams(params, false, function(ret) {
			var cplxResult = ret.cplxResult;
			if(cplxResult.elmtResult == 0) {
				marker.__isSave = true;
				marker.__mid = cplxResult.elmtMid;
				Mapext.showMarker();
				Mapext.listMarkers();
			} else {
				Mapext.showMarker();
				Mapext.listMarkers();
				alert(cplxResult.elmtResult);
			}
		});
	};
	Mapext.removeMarker = function() {
		var marker = Mapext.__currentMarker;
		map.openInfoWindow(marker.geo, "<div style='width: 130px; font-size: 13px'>Удаление...&nbsp;<img src='http://static.okarta.ru/img/green_rot.gif' /></div>");
		function rm() {
			Mapext.__markers.splice(marker.__id, 1);
			map.markers = [];
			for(var i=0; i<Mapext.__markers.length; i++) {
				Mapext.__markers[i].__id = i;
				map.markers.push(Mapext.__markers[i]);
			}
			map.infoWindow.hide();
			map.clearOverlay(Map.OVERLAY_ALL);
			map.drawMarkersArray(map.markers);
			Mapext.listMarkers();
		}
		if(marker.__mid != null) {
			var soapData = { elmtAccuid : Auth.getAccuid(), elmtMapUid : map.currentMap, elmtMid : marker.__mid };
			var params = new SOAPClientParameters(soapData);
			var task = SheduleManager.add_task("terMarker", "mtdDelMarker", TF_RUN_ONCE);
			task.setParams(params, false, function(ret) {
				var cplxResult = ret.cplxResult;
				if(cplxResult.elmtResult == 0) {
					rm();
				} else {
					Mapext.showMarker();
					Mapext.listMarkers();
					alert(cplxResult.elmtResult);
				}
			});
		} else { rm(); }
	};
	var app3 = AppBar.addApp("О проекте", "", "", "", function(app) {});
	var reg = '<div id="about"><br /><b>Мы рады, что Вы зашли на страницу проекта Открытый Город, и надеемся он Вам понравится.</b><br /><br />Открытый Город можно использовать как удобный обсуждаемый справочник по городу Воронежу или как замену настольной карте города. Для этого существует инструментарий работы с группами объектов и поиска на карте. Все объекты на карте открыты для обсуждения. Вы можете приступить к работе с приложениями сервиса без регистрации. <div style="color: #5380c0"><b><ul><li><a href="javascript:AppBar.activeApp(1)">Перейти к карте Воронежа</a></li><li><a href="javascript:AppBar.activeApp(0)">Перейти к записям пользователей</a></li></ul></b></div><br /><b>Что дает Вам регистрация?</b><br /><br /><table style="font-size: 1.0em;"><tr><td>Вы сможете устанавливать свои метки, обсуждать интересные Вам метки на карте, вести свой дневник (публиковать заметки, мысли, предлагать услуги, вывешивать анонсы, новости, размещать фрагменты карты с маркерами), общаться с другими пользователями.</td>';
	reg += '<td><div id="reg_slot" style="width: 300px;"></div></td></tr></table></div><br />';
	app3.innerHTML = reg;
	AppBar.activeApp(Shell.__appSel);
	function Reg() {}
	Reg.__login = "";
	Reg.__password = "";
	Reg.__captcha = "";
	Reg.__id = "";
	Reg.__currentStep = 0;
	Reg.updateCaptcha = function() {
		if(Reg.__currentStep == 1) {
			var img = GE("reg_img");
			img.src = "http://www.okarta.ru/scripts/regcode2.pimg?regid=" + Reg.__id + "&" + parseInt(Math.random()*1000);
		}
	}
	Reg.reset = function() {
		Reg.__login = "";
		Reg.__password = "";
		Reg.__captcha = "";
		Reg.__id = "";
		Reg.step1();
	}
	Reg.step1 = function() {
		Reg.__currentStep = 0;
		var reg1 = '<table width="100%" cellspacing="12" border="0" style="background: #b0e080; font-size: 1.0em;"><tr><td colspan="2">Регистрация нового <b>пользователя</b></td></tr><tr><td align="right"><small>Новый логин:</small></td><td><input id="reg_login" class="reg_input" value="' + Reg.__login + '"/></td></tr><tr><td align="right"><small>Новый пароль:</small></td><td><input id="reg_password" class="reg_input" type="password" value="' + Reg.__password + '"/></td></tr><tr><td colspan="2" align="center"><input id="reg_btn" type="button" value="Регистрация" style="border: 1px outset rgb(205, 205, 205); color: #fff; background: #5fa030; height: 26px;" /><div><small>После нажатия кнопки "Регистрация" Вы соглашаетесь с условиями <a href="http://www.okarta.ru/vrn/useragreement.html" target="_blank">пользовательского соглашения</a></small></div></td></tr></table>';
		GE("reg_slot").innerHTML = reg1;
		GE("reg_btn").onclick = Reg.step2;
	}
	Reg.step2 = function() {
		if(Reg.__currentStep == 0) {
			Reg.__login = GE("reg_login").value;
			Reg.__password = GE("reg_password").value;
			if(Reg.__login == "" || Reg.__password == "") { alert("Логин и пароль должны быть указаны."); return; }
		}
		Reg.__currentStep = 1;
		GE("reg_slot").innerHTML = "<img src='http://static.okarta.ru/img/green_rot.gif' />";
		Auth.regSession(function(cplxResult) {
			Reg.__id = cplxResult.elmtRegId;
			var reg2 = '<table width="100%" cellspacing="12" border="0" style="background: #b0e080; font-size: 1.0em;"><tr><td colspan="2"><div align="right"><small><a id="reg_back" style="cursor: pointer">Назад</a></div>Введите буквы и цифры с картинки (защита от автоматических регистраций)<div align="right"><a id="reg_update" style="cursor: pointer">Обновить</a></div></small></td></tr><tr><td align="center" colspan="2"><img id="reg_img" src="http://www.okarta.ru/scripts/regcode2.pimg?regid=' + Reg.__id + '" /></td></tr><tr valign="middle"><td align="center"><input id="reg_captcha" class="reg_input" /></td><td align="center"><input id="reg_btn" type="button" value="Готово" style="border: 1px outset rgb(205, 205, 205); color: #fff; background: #5fa030; height: 26px;" /></td></tr></table>';
			GE("reg_slot").innerHTML = reg2;
			GE("reg_back").onclick = Reg.step1;
			GE("reg_btn").onclick = Reg.step3;
			GE("reg_update").onclick = Reg.updateCaptcha;
		});
	}
	Reg.step3 = function() {
		Reg.__currentStep = 2;
		Reg.__captcha = GE("reg_captcha").value;
		if(Reg.__captcha == "") { alert("Номер с картинки должен быть указан."); return; }
		GE("reg_slot").innerHTML = "<img src='http://static.okarta.ru/img/green_rot.gif' />";
		Auth.regUser(Reg.__login, Reg.__password, Reg.__captcha, function(cplxResult) {
			if(cplxResult.elmtResult == 0) {
				var reg3 = '<table width="100%" cellspacing="12" border="0" style="background: #b0e080; font-size: 1.0em;"><tr><td colspan="2" align="center"><input id="reg_btn" type="button" value="Регистрация завершена\nуспешно. Для входа нажмите\nэту кнопку." style="border: 1px outset rgb(205, 205, 205); color: #fff; background: #5fa030; height: 64px;" /></td></tr></table>';
				GE("reg_slot").innerHTML = reg3;
				GE("reg_btn").onclick = function() {
					AppBar.activeApp(1);
					auth(Reg.__login, Reg.__password);
					Reg.reset();
				}
			} else {
				if(cplxResult.elmtResult == "0x010102") {
					Reg.step1();
					alert("В логине пользователя не должно быть символа @.");
				} else if(cplxResult.elmtResult == "0x010103") {
					Reg.step1();
					alert("Пользователь с таким логином существует. Попробуйте другой логин.");
				} else if(cplxResult.elmtResult == "0x010104") {
					Reg.step2();
					alert("Ошибка при указании защитного номера. Попробуйте еще раз.");
				} else {
					Reg.step1();
					alert("Неизвестная ошибка. Проверьте все поля еще раз.");
				}
			}
		});
	}
	Reg.step1();
	var app4 = AppBar.addApp("Настройки", "", "", "", function(app) {});
	var setb = new Box;
	setb.create("<b>Смена пароля</b>", true);
	var set = '<div><table cellspacing="12" border="0" style="border: 1px solid rgb(205, 205, 205); font-size: 1.0em;"><tr><td align="right">Новый пароль:</td><td><input id="new_password" type="password" class="oc_input"/></td></tr><tr><td align="right">Подтверждение пароля:</td><td><input id="confirm_password" type="password" class="oc_input"/></td></tr><tr><td colspan="2" align="center"><input id="apply_password" type="button" value="Применить" style="border: 1px outset rgb(205, 205, 205); color: #fff; background: #5380c0;" /></td></tr></table></div>';
	function cvsep() {
		var el = document.createElement('div');
		with(el.style) {
			width = "100%";
			height = "2px";
		}
		return el;
	}
	setb.setContent(set);
	app4.appendChild(setb.box);
	app4.appendChild(cvsep());
	function changePassword() {
		var new_password = GE("new_password").value;
		var confirm_password = GE("confirm_password").value;
		if (new_password != confirm_password) return;
		setb.setContent("<img src='http://static.okarta.ru/img/green_rot.gif' />");
		Auth.changePassword(new_password);
		setb.setContent(set);
		GE("apply_password").onclick = changePassword;
	}
	GE("apply_password").onclick = changePassword;
	AppBar.hideButton(3);
	function eventAuth() {
		var auth_login = GE("auth_login").value;
		var auth_password = GE("auth_password").value;
		auth(auth_login, auth_password);
	}
	function auth(auth_login, auth_password) {
		auth_box.setContent("<img src='http://static.okarta.ru/img/green_rot.gif' />");
		Auth.userAuth(auth_login, auth_password, function(cplxResult) {
			if(cplxResult.elmtResult == 0) {
				auth_box.setSHTitle("<b>Мой пользователь</b>", "<b>Мой пользователь</b>");
				var auth_welcome = "<div id='auth_welcome'>Добро пожаловать: <b>" + Auth.userLogin + "</b></div>";
				auth_welcome += "<b><a id='user_profile' href='javascript:void(0)'>Мой профайл</a> | <a id='user_settings' href='javascript:void(0)'>Настройки</a></b><br />";
				auth_welcome += "<div align='right'><b><a id='user_quit' href='javascript:void(0)'>Выход</a></b></div>";
				auth_box.setContent(auth_welcome);
			 	GE("user_profile").onclick = eventProfile;
			 	GE("user_settings").onclick = eventSettings;
			 	GE("user_quit").onclick = eventQuit;
				Blog.enter();
				Mapext.init();
			} else {
				if(cplxResult.elmtResult == "0x010101") {
					alert("Логин и пароль не должны быть больше 64 и 32 символа соответственно.");
				} else if(cplxResult.elmtResult == "0x010201") {
					alert("Неверный логин.");
				} else if(cplxResult.elmtResult == "0x010202") {
					alert("Невозможно обновить сессию. Попробуте еще раз.");
				} else {
					alert("Неизвестная ошибка.");
				}
				auth_box.setContent(auth_prompt);
				GE("auth_btn").onclick = eventAuth;
			}
		});
	}
	function eventQuit() {
		Auth.userQuit(function() {
			Blog.quit();
			Mapext.about();
			auth_box.setSHTitle("<b>Войти</b>", "<b>Войти</b>");
			auth_box.setContent(auth_prompt);
			GE("auth_btn").onclick = eventAuth;
			AppBar.activeApp(2);
		});
	}
	function eventProfile() {
	}
	function eventSettings() { AppBar.activeApp(3); }
	var auth_btn = GE("auth_btn");
	auth_btn.onclick = eventAuth;
	window.onresize = function() { AppBar.resize2client(); }
};
