function isset(arg)
{
	return !(typeof(arg)=='undefined' || arg==null);
}

function $()
{
	var elements = new Array();

	for (var i = 0; i < arguments.length; i++)
	{
		var element = arguments[i];
		
		if (typeof element == 'string')
		element = document.getElementById(element);
		
		if (arguments.length == 1)
		return element;
		
		elements.push(element);
	}
	
	return elements;
}

var Frame = {
	answer: function(incoming_text)
	{
	    var param = /^(.+?)\|/.exec(incoming_text);
	    
		if (!param)	return;
		
		var text = incoming_text.replace(/.+?\|/, "");
		param[1] = param[1].replace(/(^[^a-z_]*)|([^a-z_]*$)/gi, '');// удаляем мусор
		
		if (typeof(handlers[param[1]]) != "function")
		return;
		
		handlers[param[1]](text);
		return;
		
	},
	
	process: function(name)
	{
		try
		{
			var nf_innerHTML = $(name).contentWindow.document.body.innerHTML;
			//console.log(nf_innerHTML);
			
			if (nf_innerHTML != '')
			Frame.answer(nf_innerHTML);
		}
		catch(e){};
	}
}

if (!window.u_common)
{
	window.u_common = true;
	window.handlers = {};

	document.write('<iframe id="null_frame" src="/@/core/fit/_0.gif" name="null_frame" onload="Frame.process(this.id);" style="position: absolute; visibility: hidden" width="0" height="0"> </iframe>');
};

(function () {
	var m = {
			'\b': '\\b',
			'\t': '\\t',
			'\n': '\\n',
			'\f': '\\f',
			'\r': '\\r',
			'"' : '\\"',
			'\\': '\\\\'
		},
		s = {
			array: function (x) {
				var a = ['['], b, f, i, l = x.length, v;
				for (i = 0; i < l; i += 1) {
					v = x[i];
					f = s[typeof v];
					if (f) {
						v = f(v);
						if (typeof v == 'string') {
							if (b) {
								a[a.length] = ',';
							}
							a[a.length] = v;
							b = true;
						}
					}
				}
				a[a.length] = ']';
				return a.join('');
			},
			'boolean': function (x) {
				return String(x);
			},
			'null': function (x) {
				return "null";
			},
			number: function (x) {
				return isFinite(x) ? String(x) : 'null';
			},
			object: function (x) {
				if (x) {
					if (x instanceof Array) {
						return s.array(x);
					}
					var a = [s.escape('{')], b, f, i, v;
					for (i in x) {
						v = x[i];
						f = s[typeof v];
						if (f) {
							v = f(v);
							if (typeof v == 'string') {
								if (b) {
									a[a.length] = s.escape(',');
								}
								a.push(s.string(i), s.escape(':'), v);
								b = true;
							}
						}
					}
					a[a.length] = s.escape('}');
					return a.join('');
				}
				return 'null';
			},
			string: function (x) {
				if (/["\\\x00-\x1f]/i.test(x))/*"*/ {
					x = x.replace(/([\x00-\x1f\\"])/gi, function(a, b) {
						var c = m[b];
						if (c) {
							return c;
						}
						c = b.charCodeAt();
						return '\\u00' +
							Math.floor(c / 16).toString(16) +
							(c % 16).toString(16);
					});
				}
				
				return '"' + s.escape_uri(x) + '"';
			},
			escape:function(x)
			{
				return x;
			},
			escape_uri:function(x)
			{
				return x;
			}
		};
		
	window.json_encode = function (array, for_url)
	{
		if (!for_url)
		return s[typeof(array)](array);
		
		var tmp			= s.escape;
		var tmp2		= s.escape_uri;
		s.escape		= escape;
		s.escape_uri	= encodeURIComponent;
		
		var data		= s[typeof(array)](array);
		
		s.escape		= tmp;
		s.escape_uri	= tmp2;
		
		return data;
	}

	window.json_decode = function (string)
	{
		try 
		{
			return !(/[^,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t]/.test(string.replace(/"(\\.|[^"\\])*"/g, ''))) &&
					eval('(' + string + ')');
		} 
		catch (e) 
		{
			return false;
		}
	}
})();

(function ()
{
	var dom_events = 
		'|load|unload|abort|error|select|change'+
		'|submit|reset|focus|blur|resize|scroll'+
		'|click|mousedown|mouseup|mouseover|mouseout'+
		'|mousemove|keyup|keydown|keypress|dblclick|contextmenu|';
	
	var leaks = [];

	if (window.attachEvent)
	{
		window.attachEvent
		(
			'onunload',
			function ()
			{
				for (var i=leaks.length-1; i>=0; i--)
				{
					leaks[i][0][leaks[i][1]] = null;
					delete leaks[i];
				}
				
				leaks=null;
				document.body.innerHTML='';
			}
		);
	}
	
	Function.prototype.attach = function(signal)
	{
		var object = arguments[1] || window;
		var self = this;
		
		if(!window.context_listeners)
		window.context_listeners={};
		
		if(arguments[3])
		{
			if(!context_listeners[arguments[3]])
			context_listeners[arguments[3]] = [];
			
			context_listeners[arguments[3]].push([object,signal,self]);
		}
		
		if (dom_events.indexOf('|'+signal+'|') != -1)
		{
			if (!object.addEventListener)
			{		
				(function(ev)
				{
					if(!ev)
					{
						ev = window.event;
						ev.preventDefault = function () {this.returnValue = false;};
						ev.stopPropagation = function () {this.cancelBubble = true;};
						ev.target = ev.srcElement;
					}
					
					self.call(this, ev);
				}).attach('on'+signal, object);
				
				leaks.push([object, 'on'+signal]);
			}
			else object.addEventListener(signal, self, false);
			
			object=null;
			return this;
		}
		
		
		if (!object.elistners)
		object.elistners = {};
		
		try
		{
			if (!object.elistners[signal])
			{
				object.elistners[signal] = [];
				
				if (typeof(object[signal]) == 'function')
				object.elistners[signal].push(object[signal]);
			}
			
			object.elistners[signal].push(self);
			
			object[signal] = function()
			{
				if (!object.elistners || !object.elistners[signal])
				return;
				
				for (var key in object.elistners[signal])
				{
					try 
					{
						if (typeof object.elistners[signal][key] == 'function')
						object.elistners[signal][key].apply(this, arguments);
					}
					catch(e){}
				}
			}
			
		} catch(e){}
		
		return this;
	}

	Function.prototype.detach = function(signal)
	{
		var object = arguments[1] || window;
		
		if (dom_events.indexOf('|'+signal+'|') != -1)
		{
			if (object.removeEventListener)
			object.removeEventListener(signal, this, false);
			else
			this.detach('on'+signal, object);
			
			return this;
		}
		
		if(object.elistners && object.elistners[signal] && typeof(object.elistners[signal]) == 'object')
		{
			var elistners = object.elistners[signal];
			
			for (var i = 0; i < elistners.length; i++)
			{
				if (elistners[i] == this)
				elistners.splice(i, 1);
			}
		}
		
		return this;
	}
	
	window.listeners_detach = function(context)
	{
		if(!window.context_listeners || !context_listeners[context]) return;
		
		var listen=context_listeners[context];
		
		for(var i=0; i<listen.length; i++)
		{
			listen[i][2].detach(listen[i][1],listen[i][0]);
			listen.splice(i,1);
		}
		
	}
	
	window.reset_signal = function (signal)
	{
		if (dom_events.indexOf('|'+signal+'|') != -1)	return false;
		
		var object = arguments[1] || window;
		if (!object.elistners[signal]) return;
		// if (confirm('удалить сигнал?'))
		delete object.elistners[signal];
		object[signal] = function () {};
	}
})();

function $e(tag, content, attrs)
{
	var doc = this.document;
	var el = typeof(tag) == 'object' ? tag : (tag == '' ? doc.createTextNode(content) : doc.createElement(tag));
	
	if (tag)
	{
		if (typeof(content) == 'object' && !content.nodeType && !(content instanceof Array))
		{var temp = attrs; attrs = content; content = temp;}
		
		if (content)
			(function(el, child)
			{
				if (typeof(child) == 'string')
					el.appendChild(doc.createTextNode(child));
				else if (child instanceof Array)
					for (var i = 0; i < child.length; i++)
						arguments.callee(el, child[i]);
				else
					el.appendChild(child);
			})(el, content);
		
		if (attrs)
			(function (el, attrs, str)
			{
				str = str || 'el.'; 
				for (var i in attrs)
					if (typeof(attrs[i]) == 'object') 
						arguments.callee(el, attrs[i], str+i+'.');
					else
						(new Function('el, value', str+i+'=value'))(el, attrs[i]);
			})(el, attrs)
	}
	
	return el;
}

var AC =
{
	toggle:function(elem)
	{
		$(elem).style.display = $(elem).style.display == 'none' ? '' : 'none';
	},
	except: function (incoming_text)
	{
		if (incoming_text)
			incoming_text = incoming_text.replace(/^<!DOCTYPE.*?>/, '');
		
		if (/^(.+?)\|/.test(incoming_text))
		{
			var param = /^(.+?)\|/.exec(incoming_text);
			var text = incoming_text.replace(/.+?\|/, "");
			
			param[1] = param[1].replace(/(^[^a-z_]*)|([^a-z_]*$)/gi, ''); // удаляем мусор
			
			if (typeof handlers[param[1]] == "function")
			{
				handlers[param[1]](text);
				return false;
			}
		}
		
		if (navigator.appVersion.indexOf("KHTML") > -1)
		{
			var esc = escape(incoming_text);
			if (esc.indexOf("%u") < 0 && esc.indexOf("%") > -1)
			{
				incoming_text = decodeURIComponent(esc);
			}
		}
			
		return incoming_text;
	},
	request: function ()
	{
		var url = AC.urlvalid(arguments[0]);
		var args = arguments[1];
		
		var method = args['method'] || 'GET';
		var async = typeof(args['async']) == 'undefined' ? false : args['async'];
		var is_cashed = arguments[2] == null ? true : arguments[2];
		
		var http = null;
		
		//by google
		try{http = new XMLHttpRequest();}
		catch (e)
		{
			var a = 
			[
				'MSXML2.XMLHTTP.5.0', 'MSXML2.XMLHTTP.4.0',
				'MSXML2.XMLHTTP.3.0', 'MSXML2.XMLHTTP',
				'MICROSOFT.XMLHTTP.1.0','MICROSOFT.XMLHTTP.1',
				'MICROSOFT.XMLHTTP'
			];
			
			//ie
			for (var i = 0; i < a.length; i++){try{http = new ActiveXObject(a[i]);break;} catch (e){}}
		}
		
		if (!http)
		return null;
		
		/*
		* 0 (uninitialized)
		* 1 (loading)
		* 2 (loaded)
		* 3 (interactive)
		* 4 (complete)
		*/
		
		var events = ['uninitialized', 'loading', 'loaded', 'interactive', 'complete', 'failed'];
		
		var state_change = function ()
		{
			var state = (http.readyState == 4 && http.status != 200) ? 5 : http.readyState;
			
			var handler = args.handlers['on_'+events[state]];
			if (typeof(handler) == 'function') handler(http);
		}
		
		http.onreadystatechange = state_change;
		
		var get_params  = AC.param2url(args,'get_params');
		
		if (get_params != '') get_params = '?'+get_params;
		
		if (!is_cashed) get_params = ACCS(get_params, url);
		
		var send = null;
		
		http.open(method, url+get_params, async);
		if (method == 'POST')
		{
			http.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
			send = AC.param2url(args,'post_params');
		}
		
		http.send(send);
		return http;
	},
	
	urlvalid : function(url,i)
	{
		if ((i=url.indexOf('?'))==-1) return url;
		
		return url.substring(0,i)+url.substring(i).replace(/(\?|&)([^=]+)=([^&$]+)/gi,function(a,b,c,d)
		{
			c = encodeURIComponent(c);
			e = json_decode(d);
			
			if(!e)
			return b+c+'='+d;
			
			return b+c+'='+json_encode(e,true);
		});
	},
	obj2url:function()
	{
		
	},
	param2url : function(args,param)
	{
		var result = '';
		
		if (isset(args[param]))
		{
			var loop_flag = false;
			
			for (var key in args[param])
			{
				if (typeof args[param][key] == 'object')
				result += AC.obj2param(encodeURIComponent(key), args[param][key], loop_flag);
				else
				result += (loop_flag ? "&" : "") + key + "=" + encodeURIComponent(args[param][key]);
				
				loop_flag = true;
			}
		}
		
		return result;
	},
	obj2param : function(keys, obj, loop_flag)
	{
		var result = '';
			
		for (var key in obj)
		{
			if (typeof obj[key] == 'object')
			result += AC.obj2param(keys+'['+encodeURIComponent(key)+']', obj[key], loop_flag);
			else
			result += (loop_flag ? "&" : "") + keys + "[" +encodeURIComponent(key) + "]=" + encodeURIComponent(obj[key]);
			
			loop_flag = true;
		}
		
		return result;
	},
	
	simple: function()
	{
		var url = arguments[0];
		
		// двигаемся по параметрам
		var i = 1;
		
		var method  = typeof(arguments[i]) == 'string' ? arguments[i++] : 'GET';
		var params1  = typeof(arguments[i]) == 'object' ? arguments[i++] : null;
		var params2  = typeof(arguments[i]) == 'object' ? arguments[i++] : null;
		var handler = typeof(arguments[i]) == 'function' ? arguments[i++] : false;
		var show_layer = arguments[i] || false;
		
		var show_layer2 = show_layer;
		show_layer = 
		(
			(typeof(show_layer) == 'string' || typeof(show_layer) == 'object') ? (function(){AC.toggle(show_layer2)}) : 
			(typeof(show_layer) == 'function' ? show_layer : (function(){}))
		);
						
		var async = handler ? true : false;
		
		show_layer(true);
		
		var on_complete = function (http)
		{
			var text=null;
			
			try{text = http.responseText;}catch(e){}
			if(text===null)
			try{text = http.responseBody;}catch(e){}
			
			var text2 = AC.except(text);
			show_layer(false);
			if (text2 !== false && handler) handler(text);
		}
		
		var on_failed = function (http) {show_layer(false)};
		
		var get_params = params1;
		var post_params = params2;
		
		if (isset(params2))
			method = 'POST';
		else if (method == 'POST')
		{
			post_params = params1;
			get_params = null;
		}
		
		var http = AC.request(url, {method: method, get_params: get_params, post_params: post_params, handlers: {on_complete: on_complete, on_failed: on_failed}, async:async}, false);
		
		if (!async) 
		{
			show_layer(false);
			var text = AC.except(http.responseText);
			return text;
		}
	}
}

function ACCS(get_params, url)
{
	var uni_num = 'ACCS='+Math.round(Math.random()*10000000000);
	get_params += (/\?/.test(url) ? '&' : '?')+uni_num;
	return get_params;
}

var PNG ={fix: function(img){},fixAll: function(){}};

var Cookie = 
{
	get: function (name)
	{
		var coo = document.cookie;
		coo = coo.split(';');
		for (var i = 0; i < coo.length; i++)
		{
			var nv = coo[i].split('=', 2);
			if (nv[0].replace(/(^ *)|( *$)/g, '') == name) return unescape(nv[1])
		}
		
		return false;
	},
	set: function (name, value, expires, path, domain, secure)
	{
		if (typeof(expires) == 'number' && expires) expires = new Date((new Date).getTime+expires);
		
		document.cookie = name + "=" + escape(value) +
		((expires)  ? "; expires=" + expires.toUTCString() : "") +
		((path)     ? "; path=" + path       : "") +
		((domain)   ? "; domain=" + domain   : "") +
		((secure)   ? "; secure"             : "");
	}
}

if (!window.location.reload)
{
	window.location.reload = function()
	{
		window.location.pathname=window.location.pathname;
		window.location.hash=window.location.hash;
		if (window.location.search)
		window.location.search=window.location.search;
	}
}
