	var newWindow = '<div class="tcmf_block" id="block_{%objectCount%}" onclick="this.style.zIndex = ++ zindex;"><img class="close" src="/images/close.gif" onclick="CloseWindow(\'block_{%objectCount%}\')" /><div class="header">{%title%}</div><div class="content">{%content%}</div></div>';
	var newBlock = '<div id="block_{%objectCount%}"></div>';
	var objectCount = 1;
	var ajaxProcesses = 0;
    var zindex = 1000;
    state = new Array();
    slidedWindows = new Array();

	function CloseWindow(id)
	{
		$('#' + id).slideUp("slow");
	}

	function SlideWindow(id)
	{
		$('#' + id).slideToggle("slow");
	}

	function RequestComplete(responce)
	{
		var jsonObj = new Array();
		try
		{
			if (responce === undefined) //Запрос через iframe
			{
				var responce = document.getElementById('upload_iframe').contentWindow.document.getElementsByTagName('body')[0].innerHTML.htmlDecode();

				if (responce) jsonObj = eval('(' + responce + ')');
			}
			else //Ajax запрос
			{
				jsonObj = eval('(' + responce + ')');
        	}
        }
        catch(ex) { throw ("Undefined request error."); }

		//try
		//{
			if (jsonObj['error'] == 1)
			{
				jsonObj['objectCount'] = CreateWindow('Сообщение системы', jsonObj['message']);
			}
			else
			{
				if (document.getElementById('block_' + jsonObj['objectCount']) != null)
                {
					var block = '#block_' + jsonObj['objectCount'];
					var scripts = new Array();
					var elem = document.createElement('div');

					elem.innerHTML = jsonObj['content'];
					elem = elem.childNodes[0];

					elem.style.visibility = 'hidden';
					var newFlag = 0;

					if ($(block).attr('window') == 1) //Обновляем окно
					{

						elem.style.zIndex = ++ zindex;
       			      	elem.style.position = 'absolute';
						var top = $(block).css('top');
						var left = $(block).css('left');
						newFlag = $(block).attr('new');
						$(block).replaceWith(elem);
						$(block).css('top', top);

						$(block).css('left', left);
						$(block).attr('window', 1);


						$(block).jqDrag('.header').jqResize('.resize');
					}
					else //Обновляем простой блок
					{
						if (jsonObj['divupdate'] !== undefined)
						{
							var pNode = $(block).parentNode;
							pNode.innerHTML = '';
							pNode.appendChild(elem);
						}
						else
						{
           		    		$(block).replaceWith(elem);
						}
					}

					$(block).css('visibility', 'visible');

						if (jsonObj['windowWidth'] !== undefined)
							$(block).style.width = jsonObj['windowWidth'] + 'px';
						if (jsonObj['windowHeight'] !== undefined)
							$(block).style.height = jsonObj['windowHeight'] + 'px';
                    if (newFlag == 1)
					{
						if (jsonObj['windowTop'] !== undefined)
							$(block).style.top = jsonObj['windowTop'] + 'px';
						if (jsonObj['windowLeft'] !== undefined)
							$(block).style.left = jsonObj['windowLeft'] + 'px';

						if (jsonObj['windowTop'] === undefined && jsonObj['windowLeft'] === undefined)
						{

							$(block).center();
					    }
					}
                }

				if (jsonObj['scripts'] !== undefined)
					eval(jsonObj['scripts']);
			}
		//}
		//catch (ex) { }

		try
		{
			$('#block-loader').css('display', 'none');
			$('#global-loader').css('display', 'none');
		}
		catch (ex) {}

		if (jsonObj['oncomplete'] !== undefined)
		{
			eval(jsonObj['oncomplete'] + "\(jsonObj\);");
		}
	}

	document.getElementsByBlockName = function(blockName)
	{
		var nodes = document.getElementsByTagName('div');
		var elements = new Array();
		for (var i = 0, child; child = nodes[i]; i++)
		{
			if (child.getAttribute('blockName') && child.getAttribute('blockName') == blockName)
			{
				elements.push(Element.extend(child));
			}
		}
		return elements;
	}


	function CreateWindow(title, content)
	{
   		var windowObjectCount = objectCount++;

		var windowObj = document.createElement('div');
		windowObj.innerHTML = newWindow;
		windowObj.innerHTML = windowObj.innerHTML.replace(/{%title%}/g, title);
		windowObj.innerHTML = windowObj.innerHTML.replace(/{%content%}/g, content);
		windowObj.innerHTML = windowObj.innerHTML.replace(/{%objectCount%}/g, windowObjectCount);
		windowObj = windowObj.childNodes[0];

		document.getElementById('windows').appendChild(windowObj);

		windowObj.setAttribute('window', 1);
		windowObj.style.zIndex = ++ zindex;
		windowObj.style.position = 'absolute';
		windowObj.style.visibility = 'hidden';
		CenterElement(windowObj);
		windowObj.style.visibility = 'visible';

		return windowObjectCount;
	}

	function CreateBlock(position)
	{
		var windowObjectCount = objectCount++;
		var windowObj = document.createElement('div');

		windowObj.innerHTML = newBlock;
		windowObj.innerHTML = windowObj.innerHTML.replace(/{%objectCount%}/g, windowObjectCount);
		windowObj = windowObj.childNodes[0];
		if (position === undefined)
		{
			document.getElementById('windows').appendChild(windowObj);
        }
        else
        {
			document.getElementById(position).appendChild(windowObj);
        }

        if (position === undefined)
		{
			windowObj.setAttribute('window', 1);
			windowObj.setAttribute('new', 1);
			windowObj.style.zIndex = ++ zindex;
			windowObj.style.position = 'absolute';
			windowObj.style.visibility = 'hidden';

			CenterElement(windowObj);
			windowObj.style.visibility = 'visible';
		};

        return windowObjectCount;
	}



	//params[] - type, position, objectCount, oncomplete, iframe, file, loader
	function Request(path, params, request)
	{
		if (params === undefined)
			params = new Array();
		request = (request === undefined) ? '' : request;
		var type = (params['type'] === undefined) ? 'block' : params['type'];
		var loader = (params['loader'] === undefined) ? 'global' : params['loader'];
		var oncomplete = (params['oncomplete'] === undefined) ? false : params['oncomplete'];
		var refresh = (params['refresh'] === undefined) ? false : true;
		var iframe = (params['iframe'] === undefined) ? false : true;
		var file = (params['file'] === undefined) ? false : params['file'];
		//var fileName = (!file) ? false : $(file).getAttribute('name');

		var windowWidth = (params['windowWidth'] === undefined) ? false : params['windowWidth'];
		var windowHeight = (params['windowHeight'] === undefined) ? false : params['windowHeight'];

		var windowTop = (params['windowTop'] === undefined) ? false : params['windowTop'];
		var windowLeft = (params['windowLeft'] === undefined) ? false : params['windowLeft'];

		if (type == 'block')
		{
        	if (params['objectCount'] === undefined && params['position'] === undefined)
        		params['objectCount'] = CreateBlock();

        	if (params['objectCount'] !== undefined && $('block_' + params['objectCount']) == null)
       			throw ("Type: block; Incorrect objectCount.");
        	else if  (params['position'] !== undefined)
        	{
        		try
        		{
        			$(params['position']);
        			$(params['position']).css('display', 'block');
        			params['objectCount'] = CreateBlock(params['position']);
        			request += '&divupdate=1';
        		}
        		catch(ex) { throw ("Type: block; Incorrect position."); }
			}
		}
		else if (!params['objectCount'])
		{
			params['objectCount'] = objectCount ++;
		}

		request += '&objectCount=' + params['objectCount'] + '&datarequest=1';
		if (windowWidth)
			request += '&windowWidth=' + windowWidth;
		if (windowHeight)
			request += '&windowHeight=' + windowHeight;

		if (windowTop)
			request += '&windowTop=' + windowTop;
		if (windowLeft)
			request += '&windowLeft=' + windowLeft;

		if (oncomplete)
		{
			request += '&oncomplete=' + oncomplete;
        }
		if (iframe)
		{
			request += '&iframe_encode=1';
			var parametersArr = request.split('&');

			var form = Builder.node('form', { method: 'post', action: path, target: 'upload_iframe', enctype: "multipart/form-data" });
            if (file)
            {
				var clFile = Builder.node('input', { name: $(file).getAttribute('name'), type: "file" });
				$(file).style.display = 'none';
				//$(file).parentNode.replaceChild(clFile, $(file));
				form.appendChild($(file));
			}
			for (var i = 0; i < parametersArr.length; i++)
			{
				var valArr = parametersArr[i].split('=');
				if (!valArr[1]) valArr[1] = '';
				if (file && fileName == valArr[0])
					continue;

				var input = Builder.node('input', { type: 'hidden', name: valArr[0], value: valArr[1] });
				form.appendChild(input);
			}
			document.getElementsByTagName('body').item(0).appendChild(form);
			form.submit();
		}
		else
		{
			$.ajax({
  				type: "POST",
  				url: path,
  				data: request,
  				success: RequestComplete
			});
		}
		if (loader == 'global')
		{
			GlobalLoaderResize();
			$('#global-loader').css('display', 'block');
		}
		else if (loader == 'block')
		{
			var blockSize = GetElementSize('block_' + params['objectCount']);
			var blockCoords = GetElementCoords('block_' + params['objectCount']);

			$('#block-loader').css('width', blockSize.width + 'px');
  			$('#block-loader').css('height', blockSize.height + 'px');

   			$('#block-loader').css('top', blockCoords.top + 'px');
   			$('#block-loader').css('left', blockCoords.left + 'px');
   			$('#block-loader').css('display', 'block');
		}

		return false;
	}

	FilterNum = function(inputElement)
	{
		inputElement.value = inputElement.value.replace(/[^\d\.\,]+/, '');
		inputElement.value = inputElement.value.replace(/,|[\,\.]{2,}/, '.');
		inputElement.value = inputElement.value.replace(/^[\.\,]/, '');
	}

	FilterInt = function(inputElement)
	{
		inputElement.value = inputElement.value.replace(/[^\d]+/, '');
	}

	FilterStringLat = function(inputElement)
	{
		inputElement.value = inputElement.value.toLowerCase();
		inputElement.value = inputElement.value.replace(/[^a-z0-9_\-\.\@]+/, '');
	}

	String.prototype.htmlEncode = function()
	{
		return(this.replace(/&/mg,"&amp;").replace(/</mg,"&lt;").replace(/>/mg,"&gt;").replace(/\"/mg,"&quot;"));
	}

	String.prototype.htmlDecode = function()
	{
		return (this.replace(/&amp;/mg,"&").replace(/&lt;/mg,"<").replace(/&gt;/mg,">").replace(/&quot;/mg,"\""));
	}

	String.prototype.htmlToJson = function()
	{
		return (this.replace(/&amp;/mg,"&").replace(/&lt;/mg,"<").replace(/&gt;/mg,">").replace(/&quot;/mg,""));
	}

	function CenterElement(element)
	{
		//element = $('#' + element);

		var pageSize = GetPageSize();
		var pageScroll = GetPageScroll();
    	var elementSize = GetElementSize(element);

    	element.style.position = 'absolute';

		//element.style.left = (pageSize.windowWidth / 2 - elementSize.width / 2) + pageScroll.left + 'px';
		//element.style.top = (pageSize.windowHeight / 2 - elementSize.height / 2) + pageScroll.top  + 'px';

		return false;
	}


	window.GetPageScroll = function()
	{
		if (window.pageYOffset){
			scrollTop = window.pageYOffset;
		} else if(document.documentElement && document.documentElement.scrollTop){
			scrollTop = document.documentElement.scrollTop;
		} else if(document.body){
			scrollTop = document.body.scrollTop;
		}

		if(window.pageXOffset){
			scrollLeft=window.pageXOffset;
		} else if(document.documentElement && document.documentElement.scrollLeft){
			scrollLeft=document.documentElement.scrollLeft;
		} else if(document.body){
			scrollLeft=document.body.scrollLeft;
		}

		pageScroll = new Object();
		pageScroll.top = scrollTop;
		pageScroll.left = scrollLeft;

		return pageScroll;
	}

window.GetElementCoords = function(element)
{
    element = $('#' + element);

	var topObj = element;
	var objtop = topObj.offsetTop;
	while((topObj = topObj.offsetParent) != null)
		objtop += topObj.offsetTop;

	var leftObj = element;
	var objleft = leftObj.offsetLeft;
	while((leftObj = leftObj.offsetParent) != null)
		objleft += leftObj.offsetLeft;

	var ret = new Object();
	ret.top = objtop;
	ret.left = objleft;

	return ret;
}

window.GetElementSize = function(element)
{
    element = $('#' + element);

	var ret = new Object();
	ret.width = element.offsetWidth;
	ret.height = element.offsetHeight;

	return ret;
}


window.GetPageSize = function()
{
	var xScroll, yScroll;

	if (window.innerHeight && window.scrollMaxY) {
		xScroll = window.innerWidth + window.scrollMaxX;
		yScroll = window.innerHeight + window.scrollMaxY;
	} else if (document.body.scrollHeight > document.body.offsetHeight){ // all but Explorer Mac
		xScroll = document.body.scrollWidth;
		yScroll = document.body.scrollHeight;
	} else { // Explorer Mac...would also work in Explorer 6 Strict, Mozilla and Safari
		xScroll = document.body.offsetWidth;
		yScroll = document.body.offsetHeight;
	}

	var windowWidth, windowHeight;

	if (self.innerHeight) {	// all except Explorer
		if(document.documentElement.clientWidth){
			windowWidth = document.documentElement.clientWidth;
		} else {
			windowWidth = self.innerWidth;
		}
		windowHeight = self.innerHeight;
	} else if (document.documentElement && document.documentElement.clientHeight) { // Explorer 6 Strict Mode
		windowWidth = document.documentElement.clientWidth;
		windowHeight = document.documentElement.clientHeight;
	} else if (document.body) { // other Explorers
		windowWidth = document.body.clientWidth;
		windowHeight = document.body.clientHeight;
	}

	if(yScroll < windowHeight){
		pageHeight = windowHeight;
	} else {
		pageHeight = yScroll;
	}

	if(xScroll < windowWidth){
		pageWidth = xScroll;
	} else {
		pageWidth = windowWidth;
	}

	pageSize = new Object();
	pageSize.pageWidth = pageWidth;
	pageSize.pageHeight = pageHeight;
	pageSize.windowWidth = windowWidth;
	pageSize.windowHeight = windowHeight;
	return pageSize;
}


function VideoPlayer(id, path, screenPath)
{
	if (screenPath === undefined)
		screenPath = '';
	var flashvars = {};
	flashvars.playerpath = "/flash/player";
	flashvars.contentpath = "";
	flashvars.video = path;
	flashvars.preview = screenPath;

	flashvars.skin = "skin-applestyle.swf";
	flashvars.skincolor = "black";
	flashvars.skinscalemaximum = "1";

	flashvars.autoscale = "true";
	flashvars.videowidth = "400";
	flashvars.videoheight = "300";

	flashvars.captions = "captions.xml";

	var params = {};
	params.scale = "noscale";
	params.allowfullscreen = "true";
	params.salign = "tl";

	var attributes = {};
	attributes.align = "left";

	swfobject.embedSWF("/flash/player/flvplayer.swf", id, "410", "350", "9.0.28", "player/expressInstall.swf", flashvars, params, attributes);
}


  	function GlobalLoaderResize()
  	{
  		try
  		{
  			var pageSize = GetPageSize();
   			$('#global-loader').style.width = pageSize.windowWidth + 'px';
  			$('#global-loader').style.height = pageSize.windowHeight + 'px';

   			var pageScroll = GetPageScroll();
   			$('#global-loader').style.top = pageScroll.top + 'px';
   			$('#global-loader').style.left = pageScroll.left + 'px';
  		}
  		catch (ex) {}
  	}
    /*
  	document.observe("dom:loaded", function() { GlobalLoaderResize(); });
    Event.observe(window, 'scroll',  function() { GlobalLoaderResize(); });
    Event.observe(window, 'resize',  function() { GlobalLoaderResize(); });
    */

	function ShowMessagePrewiew(text)
	{
		return Request('/index/bbcode/show/', {}, 'text=' + text);
	}

   function StoreCaret(element)
   {
		if (document.selection && document.selection.createRange)
			element.caretPos=document.selection.createRange().duplicate();
   }

   function InsertText(element,text)
   {
		if (element && element.caretPos)
			element.caretPos.text=text;
		else if (element && element.selectionStart+1 && element.selectionEnd+1)
			element.value=element.value.substring(0,element.selectionStart)+text+element.value.substring(element.selectionEnd,element.value.length);
		else if (element)
			element.value+=text;
   }

jQuery.fn.center = function()
	{
	var w = $(window);
	this.css("position","absolute");
	this.css("top",(w.height()-this.height())/2+w.scrollTop() + "px");
	this.css("left",(w.width()-this.width())/2+w.scrollLeft() + "px");
	return this;
	}



