function __Dialog(width, position, options)
{
	this.DefaultWidth = 400;
	if(options && options.BlockAll)
		this.BlockAll = true;
	else
		this.BlockAll = false;
	this.width = (!width) ? this.DefaultWidth : width;
	this.Backdrop = ce('div', document.body, { id: 'Backdrop', onclick: this.Close.bind(this) } );
	this.Container = ce('div', document.body, { className: 'Dialog' }, { width: this.width + 'px' });
	this.CloseButton = ce('img', this.Container, { className: 'CloseIcon', title: Locale['ToClose'], src: '/img/dialog/close.gif', onclick: this.Close.bind(this) });
	if(position)
	{
		for (var i in position) this.Container.style[i] = position[i];
	}
	else
	{
		this.AutoPosition();
	}
	this.Show();
}

__Dialog.prototype.Close = function()
{
	document.body.removeChild(this.Backdrop);
	document.body.removeChild(this.Container);
}

__Dialog.prototype.AutoPosition = function()
{
	var BodyWidth = parseInt(document.body.offsetWidth);
	var left = Math.floor(BodyWidth/2) - Math.floor(parseInt(this.width)/2);
	this.Container.style.left = left+'px';
	this.Container.style.top = '70px';
}

__Dialog.prototype.Show = function()
{
	if(this.BlockAll)
		$('Backdrop').style.display = 'block';
	this.Container.style.display = 'block';
}

/*	*/
/* Имитация чекбоксов картинками - расширяет функциональность (в основном, с селектами)*/

function __Checkbox(oParent, value, checked, disabled)
{
	this.iconsDir = '/img/dialog/cbox/';
	this.onchange = {'on': null, 'off': null};
	if(!checked) checked = false;
	if(!disabled) disabled = false;
	this.o = ce('IMG', oParent, {src: this.iconsDir + ((checked)?'1':'0') + ((disabled)?'_disabled':'') + '.gif', type: 'checkbox',
								value: value, checked: checked, dis: disabled,
								onmouseover: this.over.bind(this), onmouseout: this.out.bind(this),
								onclick: this.click.bind(this)},
								{cssFloat: 'left'});
}

__Checkbox.prototype.over = function()
{
	this.o.src = this.iconsDir + ((this.o.checked)?'1':'0') + '_over.gif';
}

__Checkbox.prototype.out = function()
{
	this.o.src = this.iconsDir + ((this.o.checked)?'1':'0') + ((this.o.dis)?'_disabled':'') + '.gif';
}

__Checkbox.prototype.click = function()
{
	if(!this.o.checked)
		var on = 'off';
	else
		var on = 'on';
	if(this.onchange[on])
	{
		this.onchange[on](this.o);
	}
	this.o.checked = !this.o.checked;
	this.o.src = this.iconsDir + ((this.o.checked)?'1':'0') + ((this.o.dis)?'_disabled':'') + '.gif';
}

/* "on" соответствует checked до инверсии, вызванной onchange */
__Checkbox.prototype.setOnChange = function(on, f, onlyForDisabled)
{
	if((onlyForDisabled && this.o.dis) && typeof(f) == 'function')
	{
		if(on)
			this.onchange.on = f;
		else
			this.onchange.off = f;
	}
}

function openInNewWindow(url)
{
	if((!url || typeof(url) != 'string') && this.url)
		var url = this.url;
	else if(!this.url)
		return;
	window.open(url, 'nw'+ Math.round(Math.random()*100000));
}

function __NavBar(formId)
{
	this.oForm = document.getElementById(formId);
	for(var i=0; i<this.oForm.childNodes.length; i++)
	{
		if(this.oForm.childNodes[i].type == 'text')
		{
			this.oInput = this.oForm.childNodes[i];
			break;
		}
	}
	this.bookmarks = [];
	var self = this;

	this.oInput.onfocus = function()
	{
		self.bookmarks = [];
		for(var i in Modules)
		{
			if(Modules[i].Object.type == 'Bookmarks')
			{
				if(!isEmpty(Modules[i].Object.bookmarks))
					for(var j in Modules[i].Object.bookmarks)
					{
						if(!isEmpty(Modules[i].Object.bookmarks[j].links))
							for(var k in Modules[i].Object.bookmarks[j].links)
							{
								if(Modules[i].Object.bookmarks[j].links[k].url.substr(0,7) == 'http://')
									var url = Modules[i].Object.bookmarks[j].links[k].url.substring(7);
								else
									var url = Modules[i].Object.bookmarks[j].links[k].url;
								self.bookmarks.push(url);
							}
					}
			}
		}
	}

	this.oInput.onkeyup = function(e)
	{
		if(!e) e = event;
		var buffer = [];
		var s = this.value.toLocaleUpperCase();	//e.keyCode содержит код буквы в заглавном регистре
		for(var i=0; i<s.length; i++)
		{
			if(e.keyCode == s.charCodeAt(i))
			{
				if(this.value.substr(0,7) == 'http://')
					var valueUrl = this.value.substring(7);
				else
					var valueUrl = this.value;
				for(var j=0; j<self.bookmarks.length; j++)
				{
					if(self.bookmarks[j].substr(0, valueUrl.length) == valueUrl)
					{
						buffer.push(self.bookmarks[j]);
					}
				}
				for(j=0; j<buffer.length; j++)
				{
					//console.info(buffer[j]);
				}
				return;
			}
		}
	}
	this.oForm.onsubmit = this.submit.bind(this);
}

__NavBar.prototype.submit = function()
{
	if(this.oInput.value == '')
		return false;
	var url = this.oInput.value;
	if(url.substr(0, 7) != 'http://')
		url = 'http://'+url;
	var tabId = Desktop.NewTab('cMain', ((url.length > 18) ? url.substr(0, 15) +'...' : url), 'kz', null, url, null, false);
	Desktop.SetActiveByID('cMain', tabId);
	return false;
}

__NavBar.prototype.setUrl = function(url)
{
	this.oInput.value = url;
}

__NavBar.prototype.go = function(url)
{
	this.setUrl(url);
	this.submit();
}

NavBar = null;