	GLOBALS = {};

// Check if browser is IE
	if (navigator.appName.match(/Internet\sExplorer/)) {
		GLOBALS.is_ie = true;
	} else {
		GLOBALS.is_ie = false;
	}

	function vcmsAddUploadBox(field_name, divpref, n)
	{		
		if (!$(field_name + 'Counter')) {
			return;
		}		
		if (!GLOBALS.additional_images) {
			GLOBALS.additional_images = {};
		}		
		if (GLOBALS.additional_images[n]) {
			//return;
		}
		var html = '';
		html = '' +
				'<input type="file" name="' + field_name + '_' + (n + 1) + '" id="' + field_name + '_' + (n + 1) + '" onchange="vcmsAddUploadBox(\'' + field_name + '\', '+divpref+',' + (n + 1) + ');" />' +
				'<div id="additional_upload_box_'+divpref+'_' + (n + 1) + '"></div>';
		$(field_name + 'Counter').value = n + 1;
		$('additional_upload_box_'+divpref+'_' + n).innerHTML = html;
		GLOBALS.additional_images[n] = true;
	}

	function highLightLeftMenu(get, try_no)
	{
		var name, d, tmp, i, xxx;

		if (typeof(get) == 'string') {
			name = get;
		} else {
			switch (get.act) {
				case('element'):
					if (get.id == 'new') {
						break;
					}
					name = 'menu_item_' + get.entity + '_' + get.id;

					if (!top.frames.frm_menu.document.getElementById(name) && get.back) {
						tmp = (get.back.split(/\?/))[1].split(/&/);
						xxx = {};
						for (i in tmp) {
							xxx[(tmp[i].split(/=/))[0]] = (tmp[i].split(/=/))[1];
						}
						name = 'menu_item_' + xxx.entity + '_' + xxx.id;
					}
					break;
				case('module'):
					name = 'menu_item_' + get.entity_id + '_' + get.item_id;
					break;
				case('list'):
					name = 'menu_item_' + get.entity + '_' + get.id;
					break;
				case('entity'):
				case('user'):
					if (get.id) {
						name = 'menu_item_' + get.act + '_' + get.id;
					}
					break;
				case('site_map'):
					if (get.purpose) {
						name = 'menu_item_' + get.act + '_' + get.purpose;

						if (get.menu_id) {
							name += '_' + get.menu_id;
						}
					}
					break;
				case('main_settings'):
				case('custom_menu'):
				case('template'):
				case('images'):
				case('edit_css'):
				case('edit_js'):
				case('language'):
				case('variables'):
				case('settings'):
				case('url_alias'):
					name = 'menu_item_' + get.act;
					break;
				case('entry'):
				case(''):
					return;
					break;
				default:
//					alert('Не могу подсветить левое меню (' + var_dump(get) + ')');
					break;
			}
		}
		d = top.frames.frm_menu.document;
		if (d.highlightedLeftMenuPoint) {
			d.getElementById(d.highlightedLeftMenuPoint).style.fontWeight = '100';
		}
		if (name) {
			if (d.getElementById(name)) {
				d.getElementById(name).style.fontWeight = 'bold';
				d.highlightedLeftMenuPoint = name;
			} else {
				if (try_no < 7) {
					setTimeout('highLightLeftMenu("' + name + '", ' + (try_no + 1) + ');', 500);
				} else {
//					alert('Отсутствует элемент ' + name + ' для подсветки левого меню');
				}
			}
		}
	}

	function itemColorAdd(obj, field_name, id)
	{
		var tmp, i, res, added;

		tmp = $(field_name).value.split(',');
		res = '';
		added = false;

		for (i in tmp) {
			if (res != '') {
				res += ',';
			}
			if (tmp[i] == id) {
				if (obj.checked) {
					res += tmp[i];
					added = true;
				}
			} else {
				res += tmp[i];
			}
		}
		if (obj.checked && !added) {
			if (res != '') {
				res += ',';
			}
			res += id;
		}

		$(field_name).value = res;
	}

	function itemColorSelecter(field_name)
	{
		var i, w, h, html, selected, tmp;

		html = '';
		w = 300;
		h = 200;
		tmp = $(field_name).value.split(',');
		selected = {};
		for (i in tmp) {
			selected[tmp[i]] = true
		}


		$('item_color_box').style.left = '250px';
		$('item_color_box').style.width = w + 'px';
		$('item_color_box').style.height = h + 'px';

		if (document.documentElement) {
			$('item_color_box').style.top = parseInt((getStageSize('y') - h) / 2 + document.documentElement.scrollTop) + 'px';
		} else {
			$('item_color_box').style.top = parseInt((getStageSize('y') - h) / 2 + document.body.scrollTop) + 'px';
		}

		html += '' +
				'<table width="100%">' +
					'<tr>' +
						'<td style="font-weight: bold; padding: 3px 0px 0px 10px;">Выбор цветов</td>' +
						'<td style="text-align: right; padding: 3px 10px 0px 0px;">' +
							'<a href="#" onclick="$(\'item_color_box\').style.display = \'none\'; return false;">закрыть</a>' +
						'</td>' +
					'</tr>' +
					'<tr>' +
						'<td colspan="2" style="padding: 5px 10px 70px 10px;">';
		for (i in GLOBALS.colors_data) {
			html += '' +
							'<input type="checkbox"' + (selected[i] ? ' checked' : '') + ' onclick="itemColorAdd(this, \'' + field_name + '\', ' + i + ');">' + GLOBALS.colors_data[i].title +
							'<br />';
		}
		html += '' +
						'</td>' +
					'</tr>' +
				'</table>';

		$('item_color_box').innerHTML = html;

		$('item_color_box').style.display = 'block';
	}

	function checkField(state, el, default_value)
	{
		switch (state) {
			case('start'):
				if (el.value == default_value) {
					el.value = '';
					el.className = 'vcms_control_text';
				}
				break;
			case('finish'):
				if (el.value == '') {
					el.value = default_value;
					el.className = 'vcms_control_text_gray';
				}
				break;
		}
	}

	function moveHider()
	{
		$('content_soft_hider').style.top = getYScroll() + 'px';
		$('content_soft_hider_fix').style.top = getYScroll() + 'px';
	}

	function switchAdminVersion(val)
	{
		if (val == 'do_nothing') {
			return;
		}
		var tmp = val.split(':');

		if (tmp.length != 2) {
			alert('Invalid input parameter "' + val + '"');
			return;
		}
		switch (tmp[0]) {
			case 'go' :
				document.location.href = tmp[1];
				break;
			case 'stop' :
				alert('Не могу создать элемент, т.к. схожесть структуры языковых версий для этого элемента заканчивается на элементе с заголовком "' + tmp[1] + '"');
				break;
			default:
				alert('Unknown action "' + tmp[0] + '"');
				break;
		}
	}

	function setCharsLimit(field, limit)
	{
		var res = limit - $(field).value.length;
		$(field + '_CharsLimit').innerHTML = res;
		if (res < 0) {
			$(field + '_CharsLimit').style.color = '#990000';
		} else {
			$(field + '_CharsLimit').style.color = '#949494';
		}
		setTimeout('setCharsLimit("' + field + '", ' + limit + ');', 100);
	}

	function fixLeftMenu()
	{
		if ($('tree_box')) {
			$('tree_box').style.width = document.body.clientWidth + 'px';
		} else {
			if (top.window.frames.frm_menu.window.document.getElementById('tree_box')) {
				top.window.frames.frm_menu.window.document.getElementById('tree_box').style.width = top.window.frames.frm_menu.window.document.body.clientWidth + 'px';
			}
		}
	}

	function checkAccessChanges()
	{
		var is_changed = 0;

		for (var id in GLOBALS.Access) {
			if (GLOBALS.Access[id] != $('Access_' + id).checked) {
				is_changed = 1;
				break;
			}
		}

		$('WriteAccess').value = is_changed;
	}

	function sendInquiry(id)
	{
		var data, i, q, stop;

		data = document.getElementsByName('Inquiry_' + id);
		q = {inquiry_id: id, answer: []};
		stop = true;

		for (i = 0; i < data.length; i++) {
			if (data[i].checked) {
				q.answer.push(data[i].value);
				stop = false;
			}
		}
		if (stop) {
			alert('Выберите вариант ответа.');
		} else {
			doLoad(true, false, 'add_inquiry', q);
		}
	}

	function setInquiryResult(rsp)
	{
		$('inquiry_box_' + rsp.data.id).innerHTML = rsp.data.html;
	}

	function checkEraseAbility(el, children)
	{
		if (children) {
			alert('Безвозвратное удаление елементов возможно только для тех елементов, которые не имеют поделементов. Это связано высокой нагрузкой на сервер при выполнении этой операции.');
			el.checked = false;
		}
	}

	function bookmark(url, title)
	{
		if (window.sidebar) {
			window.sidebar.addPanel(title, url, "");
		} else if (window.opera && window.print) {
			var elem = document.createElement('a');
			elem.setAttribute('href', url);
			elem.setAttribute('title', title);
			elem.setAttribute('rel', 'sidebar');
			elem.click();
		} else if (document.all) {
			window.external.AddFavorite(url, title);
		} else {
			alert('Извините, добавить сайт в избранное автоматически не получается. Пожалуйста добавьте сайт в избранное в ручную.');
		}

		return false;
	}

	function typeSelection(s, id)
	{
		if (s.id == 'Type') {
			frames['Addition'].location.href = '/admin/custom_field_addition.php?type=' + s.value + '&id=' + id;
		}
	}

	function cartHandler(entity, id, advanced, response)
	{
		var undef, els, i, numbers;

		if (typeof(undef) == typeof(advanced)) {
			alert('cartHandler unknown type');
			return;
		}
		if (typeof(undef) != typeof(response)) {
			id = response.request.id;
			entity = response.request.entity;
			advanced = eval(response.request.advanced);
		}
		if (advanced) {
			if (typeof(undef) == typeof(response)) {
				els = document.getElementsByName(entity + '_' + id + '[]');
				numbers = [];
				for (i = 0; i < els.length; i++) {
					if (els[i].checked) {
						numbers.push(els[i].value);
					}
				}
				if (numbers.length == 0) {
					alert('Не выбрано ни одного товара');
					return;
				}
				doLoad(true, false, 'add_to_cart', {entity: entity, id: id, numbers: numbers, advanced: advanced});
			} else {
				if (response.error == '') {
					$('small_cart_box').innerHTML = response.data.cart;
					alert(response.data.text);
				} else {
					mistake(response.data.error);
				}
			}
		} else {
			el = 'cart_handler_control_' + entity + '_' + id;
			if (typeof(undef) == typeof(response)) {
				if (fileName($(el).src) == fileName(GLOBALS.add_to_cart_img)) {
					doLoad(true, false, 'add_to_cart', {entity: entity, id: id, advanced: advanced});
				} else {
					doLoad(true, false, 'drop_from_cart', {entity: entity, id: id, advanced: advanced});
				}
			} else {
				if (response.error == '') {
					if (fileName($(el).src) == fileName(GLOBALS.add_to_cart_img)) {
						$(el).src = GLOBALS.drop_from_cart_img;
					} else {
						$(el).src = GLOBALS.add_to_cart_img;
					}
					if ( $('small_cart_box') ) {
						$('small_cart_box').innerHTML = response.data.cart;
					}
					else if ( debug() ) {
						alert('Отсутствует HTML элемент с id="small_cart_box" предназначенный для вывода "Превью корзины товаров".' + "\n\n" + 'FYI: метка {ShoppingCart} должна располагаться внутри HTML элемента с id="small_cart_box".');
					}
				} else {
					mistake(response.error);
				}
			}
		}
	}

	function mistake(data)
	{
		alert(var_dump(data));
	}

	function $w(name)
	{
		return window.top[name];
	}

	function showHelp()
	{
		$w('frm_content').document.getElementById('help_box').style.display = 'block';
	}

	function switchTab(n)
	{
		if (GLOBALS.selected_tab) {
			$('tab_' + GLOBALS.selected_tab).className = 'tab_inactive';
		}
		GLOBALS.selected_tab = n;
		$('tab_' + GLOBALS.selected_tab).className = 'tab_active';
	}

	function switchSubTab(n)
	{
		if (GLOBALS.selected_sub_tab) {
			$('sub_tab_' + GLOBALS.selected_sub_tab).className = 'sub_tab_inactive';
			$('sub_tab_content_' + GLOBALS.selected_sub_tab).style.display = 'none';
		}
		GLOBALS.selected_sub_tab = n;
		$('sub_tab_' + GLOBALS.selected_sub_tab).className = 'sub_tab_active';
		$('sub_tab_content_' + GLOBALS.selected_sub_tab).style.display = 'block';
	}

	function debug()
	{
		if (top.window.document.location.href.match(/\?debug=yes/)) {
			return true;
		} else {
			return false;
		}
	}

	function doLoad(force, cach, type, element)
	{
		var req = new Subsys_JsHttpRequest_Js();

		req.onreadystatechange = function() {
			if (req.readyState == 4) {
				if (req.responseJS) {
					switch (type) {
						case 'add_to_cart':
						case 'drop_from_cart':
							cartHandler(0, 0, 0, req.responseJS.data);
							break;
						case 'add_inquiry':
							setInquiryResult(req.responseJS.data);
							break;
					}
				}
//				$('debug').innerHTML = req.responseText;
			}
		}

		req.caching = cach;
		req.open('POST', '/load.php', true);
		req.send({ data: element, act: type });
	}


