function getElementPosition(elem) {
	 var w = elem.offsetWidth;
	 var h = elem.offsetHeight;
	 var l = 0;
	 var t = 0;
	 while (elem)
	 {
		  l += elem.offsetLeft;
		  t += elem.offsetTop;
		  elem = elem.offsetParent;
	 }                                                           
	 return {"left":l, "top":t, "width": w, "height":h};
}

// var login_visible = false;
function showLoginWindow(b) {
	var win = $n('loginWindow');
	var login_span = $n('login_span');
	if (!win.is_visible) {
		var pos = getElementPosition(login_span);
		//var win = $n('loginWindow');
		//alert(win);
		win.style.display = 'block';
		win.style.top = (pos.top + pos.height - 1) +'px';
		win.style.left = pos.left +'px';
		win.is_visible = 1;
		login_span.className = 'login_active';
		var overlay = makeOverlay('login_overlay');
		overlay.onclick = showLoginWindow;
	} else {
		login_span.className = '';
		win.is_visible = false;
		$n('loginWindow').style.display = 'none';
		var o = $n('login_overlay');
		o.parentNode.removeChild(o);
	}
}

function makeOverlay(id, classname) {
	var overlay = document.body.appendChild(document.createElement('div'));
	overlay.style.width = '100%';
	overlay.style.height = '100%';
	overlay.style.position = 'absolute';
	overlay.style.top = '0px';
	overlay.style.left = '0px';
	overlay.style.background = 'url("/i/0.gif")';
	overlay.style.zIndex = 2;
	overlay.id = id;
	if ( classname) {
		overlay.className = classname;
	}
	return overlay;
}

function hideLoginWindow(e) {
	e = e || event;
	var p = getElementPosition($n('loginWindow'));
	//alert(login_visible);
	if (
		login_visible && (
		e.clientX < p.left || e.clientX > (p.left + p.width) || 
		e.clientY < p.top || e.clientY > (p.top + p.height) )
		) {
		$n('login_span').className = '';
		$n('loginWindow').style.display = 'none';
		login_visible = false;
	}
}

function switchNavType(link) {
	var collection = link.parentNode.parentNode.getElementsByTagName('span');
	var cid = link.id.replace(/^navl_/, '');
	for (var i = 0; i < collection.length; i++) {
		if (collection[i].className != 'external') {
			var cl = collection[i].getElementsByTagName('a').item(0);
			var clid = cl.id.replace(/^navl_/, '');
			if (cl.id == 'navl_' + cid) {
				//cl.className = '';
				dropClassName(cl, 'jl');
				addClassName(cl.parentNode, 'c');
				//cl.parentNode.className = 'c';
				$n('navbl_' + clid).style.display = '';
			} else {
				//cl.className = 'jl';
				addClassName(cl, 'jl');
				dropClassName(cl.parentNode, 'c');
				//cl.parentNode.className = '';
				$n('navbl_' + clid).style.display = 'none';
			}
		}
	}
	document.getElementsByTagName('a').item(0).focus();
}

function addClassName(node, class_name) {
	if (!node.className.match(new RegExp('(^|\\s+)'+class_name+'(\\s+|$)'))) {
		node.className += ' '+class_name;
	}
}

function dropClassName(node, class_name) {
	var reg = new RegExp('(^|\\s+)'+class_name+'(\\s+|$)', 'g');
	//document.title = reg + '~' + node.className + '~';
	node.className = node.className.replace(reg, ' ');
	document.title += node.className;
}

function placeImageContainer(c) {
		var img = $n('large_img');
		c.style.position = 'absolute';
		c.style.overflow = 'visible';
		c.style.width = 'auto';
		c.style.height = 'auto';
		c.style.zIndex = '30';
		c.style.left = Math.round(getClientCenterX()-( (img.width + 20) /2))+'px';
		c.style.top = Math.round(getClientCenterY()-( c.clientHeight /2))+'px';
}

function showImage(image_num) {
	startProc();
	var img = $n('large_img');
	if (img) {
		img.parentNode.removeChild(img);
	}
	img = $n('large_img_container').appendChild(document.createElement('img'));
	img.id = 'large_img';
	$n('large_img_div').style.left = '-10000px';
	showOverlay();
	$n('overlay').onclick = hideImage;
	img.onload = function () {
		var ci = js_gallery[image_num];
		for (var j in js_gallery) {
			js_gallery[j].preview.style.border = (j == image_num ? '3px solid #000' : '3px solid #FFF');
		}
		$n('large_img_comment').innerHTML = ci.title + '<br /><a href="'+ ci.href + '" target="_blank">Оригинал: ' + img.width +'&times;'+img.height+'</a>';
		var c = $n('large_img_div');
		placeImageContainer(c);
		var tw = getDocumentWidth();
		var th = getClientHeight();
		var extra_heigth = c.clientHeight - img.height;
		if (img.height < (th - extra_heigth) && img.width < (tw - 200)) {
			// small image; ignore;
		} else if (img.height * ( (tw - 300) / img.width)  > (th - extra_heigth) ) {
			img.style.height = (th - extra_heigth - 10) + 'px';
		} else {
			img.style.width = (tw - 300) + 'px';
		}
		placeImageContainer(c);
		var iprev = $n('i_prev');
		var inext = $n('i_next');
		iprev.style.top = Math.round(getClientCenterY()-13)+'px';
		inext.style.top = Math.round(getClientCenterY()-13)+'px';
		iprev.style.left = '70px';
		inext.style.left = getDocumentWidth() - 110 + 'px';
		if (image_num != 0) {
			iprev.style.display = 'block';
			iprev.href = 'javascript:showImage('+(image_num - 1)+');';
		} else {
			iprev.style.display = 'none';
		}
		if (image_num < (js_gallery.length - 1)) {
			inext.style.display = 'block';
			inext.href = 'javascript:showImage('+(image_num + 1)+');';
		} else {
			inext.style.display = 'none';
		}
		document.onkeydown = function(e) {
			if (!e) e = window.event;
			if (e.keyCode == 27) {
				hideImage();
			} else if (e.keyCode !== 17) {
				if (e.keyCode == 37 && e.ctrlKey && image_num != 0) {
					showImage(image_num - 1);
				} else if (e.keyCode == 39 && e.ctrlKey && image_num < (js_gallery.length - 1)) {
					showImage(image_num + 1);
				}
			}
		}
		stopProc();
	}
	img.src = js_gallery[image_num].href;
}

function hideImage() {
	var img = $n('large_img');
	var c = img.parentNode.parentNode;
	img.parentNode.removeChild(img);
	c.style.width = '1px';
	c.style.height = '1px';
	c.style.overflow = 'hidden';
	c.style.left = '-10000px';
	//$n('overlay').style.display = 'none';
	hideOverlay();
	$n('i_prev').style.display = 'none';
	$n('i_next').style.display = 'none';
	stopProc();
}

function showOverlay() {
	var overlay = $n('overlay');
	overlay.style.display = 'block';
	var selects = document.getElementsByTagName('select');
	for (var i = 0; i < selects.length; i++) {
		selects[i].parentNode.style.visibility = 'hidden';
	}
	overlay.style.height = $n('main').clientHeight + 'px';
	overlay.style.width = getDocumentWidth();
}

function hideOverlay() {
	$n('overlay').style.display = 'none';
	//document.body.parentNode.style.overflow = 'visible';
	//document.body.style.overflow = 'visible';
	var selects = document.getElementsByTagName('select');
	for (var i = 0; i < selects.length; i++) {
		selects[i].parentNode.style.visibility = '';
	}
}

function showBlock(block) {
	showOverlay();
	if (typeof(block) == 'string') {
		block = $n(block);
	}
	block.style.position = 'absolute';
	block.style.zIndex = '444';
	block.style.display = 'block';
	block.style.left = Math.round(getClientCenterX()-( (block.clientWidth + 20) /2))+'px';
	var htop = Math.round(getClientCenterY()-( block.clientHeight /2));
	if (htop < 0) {
		htop = 0;
	}
	if (!document.all) {
		htop = htop - getBodyScrollTop();
		block.style.position = 'fixed';
	}
	block.style.top = htop+'px';
	$n('overlay').onclick = function() {
		hideOverlay();
		block.style.display = 'none';
	}
}

function getBodyScrollTop()
{
	return (self.pageYOffset || (document.documentElement && document.documentElement.scrollTop) || (document.body && document.body.scrollTop));
}

function getBodyScrollLeft()
{
	return (self.pageXOffset || (document.documentElement && document.documentElement.scrollLeft) || (document.body && document.body.scrollLeft));
}

function getDocumentHeight()
{
	return (document.body.scrollHeight > document.body.offsetHeight)?document.body.scrollHeight:document.body.offsetHeight;
}

function getDocumentWidth()
{
	return (document.body.scrollWidth > document.body.offsetWidth)?document.body.scrollWidth:document.body.offsetWidth;
}

function getClientCenterX()
{
	return parseInt(getClientWidth()/2)+getBodyScrollLeft();
}

function getClientCenterY()
{
	return parseInt(getClientHeight()/2)+getBodyScrollTop();
}

function getClientWidth()
{
  return document.compatMode=='CSS1Compat' && !window.opera?document.documentElement.clientWidth:document.body.clientWidth;
}

function getClientHeight()
{
  return document.compatMode=='CSS1Compat' && !window.opera?document.documentElement.clientHeight:document.body.clientHeight;
}

var js_gallery = [];

function createJSGallery() {
	
	//var jgt = $n('js_gallery_table');
	//if (!jgt) {
	//	return;
	//}
	var as = document.getElementsByTagName('a');
	var g = 0;
	for (var i = 0; i < as.length; i++) {
		var ca = as[i];
		if (ca.className == 'js_gallery') {
			js_gallery[g] = {href : ca.href, title : ca.title, preview : ca.getElementsByTagName('img').item(0)};
			if (ca.getAttribute('href') == '') {
				js_gallery[g].href = js_gallery[g].preview.src;
			}
			ca.href = 'javascript:showImage('+g+');';
			g++;
		}
	}
	if ($n('js_gallery_preload')) {
		$n('js_gallery_preload').style.display = 'none';
		$n('js_gallery_table').style.display = 'block';
	}
}



function $n(node) {
	return document.getElementById(node);
}

function replyForm(b) {
	var rl = $n('reply_link_' + b);
	var f = $n('reply_form');
	if ($n('i_reply_to').value == b && f.style.display != 'none') {
		rl.className = 'reply_link jl';
		$('#reply_form').animate({opacity:'hide'},300);
	} else {
		var p = $n('comment_' + b + '_body');
		$('#reply_form').animate({opacity:'hide'},300,'linear', function() {
			nf = p.appendChild(f.cloneNode(true));
			f.parentNode.removeChild(f);
			$n('reply_link_' + $n('i_reply_to').value).className = 'reply_link jl';
			$n('i_reply_to').value = b;
			nf.id = 'reply_form';
			$('#reply_form').animate({opacity:'show'},300,'linear', function() {nf.getElementsByTagName('textarea').item(0).focus();});
			rl.className = 'reply_link_active';
			//nf.getElementsByTagName('textarea').item(0).focus();
		});
	}
}

function editForm(comment_id) {
	var t = $n('comment_' + comment_id + '_text');
	var ef = $n('edit_form_' + comment_id);
	if (ef.style.display != 'none') {
		$('#edit_form_'+comment_id).animate({opacity:'hide'},300, 'linear', function() {
			$('#comment_' + comment_id + '_text').animate({opacity:'show'},300);
		});
		$n('edit_link_'+comment_id).className = 'comment_link';
	} else {
		var ta = ef.getElementsByTagName('textarea').item(0)
		ta.value = t.innerHTML.replace(/<br[\s\/]?>/ig, "\n");
		//ta.focus();
		$n('edit_link_'+comment_id).className = 'comment_link a';
		$('#comment_'+comment_id+'_text').animate({opacity:'hide'},300, 'linear', function() {
			$('#edit_form_' + comment_id).animate({opacity:'show'},300, 'linear', function() {
				ta.focus();}
			);
		});
	}
}

function update_comment(comment_id) {
	var ef = $n('edit_form_'+comment_id);
	var ta = ef.getElementsByTagName('textarea').item(0);
	var text = ta.value;
	startProc();
	$.ajax({
			dataType: 'html',
			type: 'POST',
			url: '/?module=comments&action=update&comment_id='+comment_id,
			data: {text: text},
			success: function (data) {
				//alert(data);
				if (/^COMERROR/.test(data)) {
					alert(data.replace(/^COMERROR\s/, ''));
				} else {
					$n('comment_' + comment_id + '_text').innerHTML = data;
					$n('comment_' + comment_id + '_text').style.display = 'none';
				}
				$('#edit_form_'+comment_id).animate({opacity:'hide'},'slow', 'linear', function() {
					$('#comment_' + comment_id + '_text').animate({opacity:'show'},'slow');
				});
				$n('edit_link_'+comment_id).className = 'comment_link';
				stopProc();
			}
	});
}

function removeComment(comment_id) {
	if (confirm('Вы уверены, что хотите удалить данный комментарий?')) {
		startProc();
		$.ajax({
			dataType: 'html',
			type: 'GET',
			url: '/?module=comments&action=remove&comment_id='+comment_id,
			success: function (data) {
				if (/^COMERROR/.test(data)) {
					alert(data.replace(/^COMERROR\s/, ''));
				} else {
					/*
					var f = $n('reply_form');
					var p = $n('comment_' + b + '_body');
					nf = p.appendChild(f.cloneNode(true));
					f.parentNode.removeChild(f);
					$n('reply_link_' + $n('i_reply_to').value).className = 'reply_link jl';
					$n('i_reply_to').value = b;
					nf.id = 'reply_form';
					*/
					$n('comment_'+comment_id+'_body').innerHTML = data;
					$n('comment_'+comment_id+'_body').className = 'body removed';
					$n('userpic_'+comment_id).src = '/i/0.gif';
				};
				stopProc();
			}
		});
	}
}

function submit_comment() {
	var rto = $n('i_reply_to').value;
	startProc();
	$.ajax({
		dataType: 'html',
		type: 'POST',
		url: '/?module=comments&action=add&mode=chunk&entity_id='+$n('entity_id').value,
		data: {
			text: $n('comment_text').value,
			reply_to: rto
		},
		success: function (data) {
			$n('reply_link_' + rto).className = 'reply_link jl';
			$n('reply_form').style.display = 'none';
			var wrap = $n('comment_' + rto +'_children').appendChild(document.createElement('div'));
			wrap.style.display = 'none';
			wrap.innerHTML = data;
			$(wrap).animate({opacity:'show'},'slow');
			//$n('comment_' + rto +'_children').innerHTML += data;
			stopProc();
		}
	});
	return false;
}

function startProc() {
	var p = $n('proccessing');
	if (!p) {
		var p = document.body.appendChild(document.createElement('img'));
		p.src = '/i/process.gif';
		p.id = 'proccessing';
		p.style.zIndex = 669;
	}
	p.style.position = 'absolute';
	p.style.left = Math.round(getClientCenterX()-( p.width /2))+'px';
	p.style.top = Math.round(getClientCenterY()-( p.height /2))+'px';
	p.style.display = 'block';
}

function stopProc() {
	$n('proccessing').style.display = 'none';
}

function do_site_hit(fid, l) {
	$.ajax({
		dataType: 'html',
		type: 'GET',
		url: '/?module=spar&action=site_hit&firm_id='+fid,
		success: function (data) {
		}
	});
}

function news_showYear(y) {
	var ys = $n('years').getElementsByTagName('LI');
	for (var i = 0; i < ys.length; i++) {
		var cy = ys[i];
		if (/^y_[0-9]+$/.test(cy.id)) {
			cly = cy.id.replace(/^y_/, '');
			if (cly == y) {
				!/curr/.test(cy.className) ? cy.className += ' curr' : cy.className = cy.className.replace(/\s?curr/, '');
			} else {
				cy.className = cy.className.replace(/\s?curr/, '');
			}
		}
	}
}

function alpha_extras(link) {
	var lis = link.parentNode.getElementsByTagName('li');
	if (typeof(link.is_minus) == 'undefined' || link.is_minus == false) {
		for (var i = 0; i < lis.length; i++) {
			var li = lis[i];
			if (li.className == 'extra_h') {
				li.className = 'extra_v';
			}
		}
		link.is_minus = true;
		link.innerHTML = link.innerHTML.replace(/\+/, '-');
	} else {
		for (var i = 0; i < lis.length; i++) {
			var li = lis[i];
			if (li.className == 'extra_v') {
				li.className = 'extra_h';
			}
		}
		link.is_minus = false;
		link.innerHTML = link.innerHTML.replace(/\-/, '+');
	}
}

function switchDisplay(target, link, word) {
	if (target.style.display == 'none') {
		target.style.display = '';
	} else {
		target.style.display = 'none';
	}
	if (link) {
		if (!link.word || link.word == word) {
			link.word = link.innerHTML;
			link.innerHTML = word;
		} else {
			var oword = link.word;
			link.word = link.innerHTML;
			link.innerHTML = oword;
		}
	}
}

function selectCar(s) {
	var cid = s.value;
	if (cid != 0 && typeof(existing_cars[cid]) != 'undefined') {
		var car = existing_cars[cid];
		for (var i in car) {
			var inp = $n('inp_' + i);
			if (inp) {
				if (inp.type == 'checkbox' && car[i] == '1') {
					inp.checked = true;
				} else {
					inp.value = car[i];
				}
			}
		}
		$n('model_id').value = car.model_id;
		$n('model_id_select').innerHTML = car.full_name;
		$n('preview_color').style.background = '#'+car.color;
	} else {
		var car_pattern = o_first(existing_cars);
		if (car_pattern) {
			for (var  i in car_pattern) {
				var inp = $n('inp_' + i);
				if (inp) {
					if (inp.type == 'checkbox') {
						inp.checked = false;
					} else {
						inp.value = '';
					}
				}
			}
		}
		$n('model_id_select').innerHTML = 'выбрать';
		$n('preview_color').style.background = 'none';
	}
}


function o_first(obj) {
	for (var i in obj) {
		return obj[i];
	}
	return false;
}



var modelSelector = {
	brand_type: 'all',
	init: function(brand_type, link, input) {
		modelSelector.brand_type = brand_type;
		modelSelector.link = link;
		modelSelector.input = input;
		modelSelector.body = $n('model_selector_body');
		modelSelector.block = $n('model_selector');
		modelSelector.showBrands();
	},
	Redraw: function () {
		modelSelector.block.style.height = getClientHeight() - 50 + 'px';
		modelSelector.body.style.height = getClientHeight() - 120 + 'px';
		showBlock(modelSelector.block);
	},
	addPathItem: function(name, href, type) {
		var p = $n('selector_path');
		var clinks = p.getElementsByTagName('a');
		p.innerHTML += '<span id="selector_path_'+type+'" class="last">'+ (clinks.length > 0 ? ' / ' : '')+ ' <a href="'+href+'">'+name+'</a></span>';
		if ($n('selector_path_'+type).previousSibling) {
			$n('selector_path_'+type).previousSibling.className = '';
		}
	},
	removePathItem: function(type) {
		var item = $n('selector_path_' + type);
		if (item) {
			item.parentNode.removeChild(item);
		}
	},
	appendData: function(data) {
		modelSelector.body.innerHTML = data;
		modelSelector.Redraw();
		stopProc();
	},
	showBrands: function(class_id) {
		class_id = class_id || false;
		if (class_id == false) {
			$n('selector_path').innerHTML = '';
			modelSelector.addPathItem('Каталог', 'javascript:modelSelector.showBrands();', 'index');
		}
		startProc();
		$.ajax({
			dataType: 'html',
			type: 'GET',
			url: '/?module=catalog&action=brands&brand_type='+modelSelector.brand_type+'&mode=chunk'+(class_id ? '&class_id='+class_id : ''),
			success: modelSelector.appendData
		});
	},
	setClass: function (id, name) {
		modelSelector.removePathItem('class');
		modelSelector.removePathItem('brand');
		modelSelector.removePathItem('series');
		modelSelector.addPathItem(name, 'javascript:modelSelector.showBrands('+id+');modelSelector.setClass('+id+",'"+name+"');",'class');
		modelSelector.currentClass = id;
	},
	setBrand: function (id, name) {
		modelSelector.removePathItem('brand');
		modelSelector.removePathItem('series');
		modelSelector.addPathItem(name, 'javascript:modelSelector.showSeries('+modelSelector.currentClass+','+id+');modelSelector.setBrand('+id+",'"+name+"');",'brand');
	},
	setSeries: function (id, name) {
		modelSelector.removePathItem('series');
		modelSelector.addPathItem(name, 'javascript:modelSelector.showModels('+id+');modelSelector.setSeries('+id+",'"+name+"');",'series');
		modelSelector.currentSeries = id;
	},
	showSeries: function(class_id, brand_id) {
		startProc();
		$.ajax({
			dataType: 'html',
			type: 'GET',
			url: '/?module=catalog&action=series&mode=chunk&brand_id='+brand_id+'&class_id='+class_id+'&brand_type='+modelSelector.brand_type,
			success: modelSelector.appendData
		});
	},
	showModels: function(series_id) {
		startProc();
		$.ajax({
			dataType: 'html',
			type: 'GET',
			url: '/?module=catalog&action=models&mode=chunk&series_id='+series_id+'&brand_type='+modelSelector.brand_type,
			success: modelSelector.appendData
		});
	},
	Select: function(id, name) {
		modelSelector.link.innerHTML = name;
		modelSelector.link.onClick = 'modelSelector.showModels('+modelSelector.currentSeries+');';
		modelSelector.input.value = id;
		hideOverlay();
		modelSelector.block.style.display = 'none';
	},
	Search: function(term) {
		startProc();
		$.ajax({
			dataType: 'html',
			type: 'GET',
			url: '/?module=catalog&action=models&mode=chunk&search_term='+term+'&brand_type='+modelSelector.brand_type,
			success: modelSelector.appendData
		});
	},
	Create: function(name, link, brand_type) {
		var t = getParent(link, 'table');
		var allrows = t.getElementsByTagName('tr');
		var last_row = getParent(link, 'tr');
		for (var i = 0; i < allrows.length; i++) {
			if (allrows[i].id.match(new RegExp('^row_'+name+'_[0-9]+'))) {
				var last_row = allrows[i];
			}
		}
		var new_row = document.createElement('tr');
		var nn = nextNode(last_row);
		nn ? nn.parentNode.insertBefore(new_row, nn) : nn.parentNode.appendChild(new_row);
		var cid = last_row.id.match(/_[0-9]+$/) ? (last_row.id.replace(/[^0-9]/g,'')*1 + 1) : 1;
		new_row.id = 'row_'+name+'_' + cid;
		var lt = new_row.appendChild(document.createElement('td'));
		var rt = new_row.appendChild(document.createElement('td'));
		var new_link = rt.appendChild(document.createElement('a'));
		new_link.className = 'pl';
		new_link.id = name + '_' + cid + '_select';
		new_link.innerHTML = "выбрать";
		var k_link = rt.appendChild(document.createElement('a'));
		k_link.className = 'jl kill';
		k_link.onclick = function() {modelSelector.Remove(k_link);}
		k_link.innerHTML = 'удалить';
		lt.innerHTML += '<input type="hidden" name="'+name+'_'+cid+'" id="'+name+'_'+cid+'" />';
		var inp = lt.getElementsByTagName('input')[0];
		new_link.onclick = function() {modelSelector.init('sale',new_link,inp)};
		modelSelector.init(brand_type,new_link,inp);
	},
	Remove: function(link) {
		if (confirm('Вы точно хотите удалить эту ссылку?')) {
			var row = getParent(link, 'tr');
			row.parentNode.removeChild(row);
		}
	}
}

function sectionSelectorProto () {
	this.init = function(link, input) {
		this.link = link;
		this.input = input;
		this.block = $n('section_selector');
		var nheight = getClientHeight() - 120 + 'px';
		$n('section_selector_body').style.height = nheight;
		showBlock(this.block);
	}
	this.Create = function(name, link) {
		var t = getParent(link, 'table');
		var allrows = t.getElementsByTagName('tr');
		var last_row = getParent(link, 'tr');
		for (var i = 0; i < allrows.length; i++) {
			if (allrows[i].id.match(new RegExp('^row_'+name+'_[0-9]+'))) {
				var last_row = allrows[i];
			}
		}
		var new_row = document.createElement('tr');
		var nn = nextNode(last_row);
		nn ? nn.parentNode.insertBefore(new_row, nn) : nn.parentNode.appendChild(new_row);
		var cid = last_row.id.match(/_[0-9]+$/) ? (last_row.id.replace(/[^0-9]/g,'')*1 + 1) : 1;
		new_row.id = 'row_'+name+'_' + cid;
		var lt = new_row.appendChild(document.createElement('td'));
		var rt = new_row.appendChild(document.createElement('td'));
		var new_link = rt.appendChild(document.createElement('a'));
		new_link.className = 'pl';
		new_link.id = name + '_' + cid + '_select';
		new_link.innerHTML = "выбрать";
		var k_link = rt.appendChild(document.createElement('a'));
		k_link.className = 'jl kill';
		k_link.onclick = function() {modelSelector.Remove(k_link);}
		k_link.innerHTML = 'удалить';
		lt.innerHTML += '<input type="hidden" name="'+name+'_'+cid+'" id="'+name+'_'+cid+'" />';
		var inp = lt.getElementsByTagName('input')[0];
		new_link.onclick = function() {sectionSelector.init(new_link,inp);};
		sectionSelector.init(new_link,inp);
	}
	this.Expand = function(id) {
		var n = $n('children_'+id);
		var i = $n('img_'+id);
		n.style.display = n.style.display == 'none' ? '' : 'none';
		i.src = n.style.display == 'none' ? '/dcms/js/treemenu/closed.gif' : '/dcms/js/treemenu/open.gif';
	}
	this.Select = function(id, name) {
		this.input.value = id;
		this.setLink(id);
		hideOverlay();
		this.block.style.display = 'none';
	}
	this.setLink = function(id, link) {
		link = link || this.link;
		var parts = [];
		var li = $n('list_'+id);
		while (li) {
			cl = li.getElementsByTagName('a').item(0);
			parts.push(cl.innerHTML);
			li = getParent(li, 'li');
		}
		var s = parts.reverse().join('&nbsp;&rarr;&nbsp;');
		link.innerHTML = s;
	}
	this.Remove = function(link) {
		if (confirm('Вы точно хотите удалить эту ссылку?')) {
			var row = getParent(link, 'tr');
			var lid = row.getElementsByTagName('input').item(0).value;
			row.parentNode.removeChild(row);
		}
	}
}


function imageManager() {
	this.init = function(block) {
	}
	this.getTable = function(id) {
		return $n('js_im_'+id);
	}
	this.getId = function(table) {
		return table.id.replace(/^js_im_/, '')
	}
	this.getBlock = function() {
		return $n('image_manager');
	}
	this.requestProps = false;
	this.addImageBefore = function(id) {
		IM.clearForm();
		showBlock('add_image_form');
		$n('inp_before').value = id;
		IM.requestProps = {insertBefore:id};
	}
	this.editImage = function(id) {
		IM.clearForm();
		var image_name = $n('js_im_'+id+'_name').innerHTML;
		$n('inp_name').value = image_name;
		$n('inp_image_id').value = id;
		showBlock('add_image_form');
		IM.requestProps = {updateImage:id};
	}
	this.imageLoaded = function() {
		if (IM.requestProps) {
			var it = IM.getFrameContent().getElementsByTagName('table').item(0);
			if (!it) {
				alert("Произошла ошибка: " + IM.getFrameContent().innerHTML);
				IM.hideForm();
			}
			if (document.all) {
				it = document._importNode(it, true);
			} else {
				it = document.importNode(it, true);
			}
			if (IM.requestProps.updateImage) {
				var oi = IM.getTable(IM.requestProps.updateImage);
				IM.getBlock().insertBefore(it, oi);
				oi.parentNode.removeChild(oi);
			} else if (IM.requestProps.insertBefore) {
				var nid = IM.getId(it);
				if (IM.requestProps.insertBefore == -1) {
					var ni = IM.getBlock().appendChild(it);
				} else {
					var ni = IM.getBlock().insertBefore(it, IM.getTable(IM.requestProps.insertBefore));
				}
			}
			IM.requestProps = {};
			IM.hideForm();
		}
	}
	this.imagesLoaded = function() {
		var frame_body = IM.getFrameContent('multi');
		if (frame_body) {
			var tables = frame_body.getElementsByTagName('table');
			for (var i = 0; i < tables.length; i++) {
				var nt = document.all ? document._importNode(tables[i],true) : document.importNode(tables[i],true);
				if (nt) {
					IM.getBlock().appendChild(nt);
				}
			}
			if (tables.length > 0) {
				$n('add_images_form').style.display = 'none';
				$n('add_images_form').getElementsByTagName('form').item(0).reset();
				var count_rows = $n('add_image_form').getElementsByTagName('tr').length;
				for (var i = 1; i <= count_rows; i++) {
					switch_fileurl_type('image_'+i);
				}
			}
		}
	}
	this.hideForm = function() {
		this.clearForm();
		hideOverlay();
	}
	this.clearForm = function() {
		IM.requestProps = {};
		$n('add_image_form').style.display = 'none';
		$n('inp_image_id').value = -1;
		$n('inp_before').value = -1;
		$n('inp_name').value = '';
		$n('file_image').value = '';
		$n('url_image').value = '';
	}
	this.getFrameContent = function(type) {
		type = type || 'single';
		var f = type == 'single' ? $n('add_image_frame') : $n('add_images_frame');
		return f.contentWindow.document.body;
	}
	this.Move = function(id, dir) {
		var t = IM.getTable(id);
		var next = nextNode(t);
		var prev = previousNode(t);
		if (dir == 'up' && !prev) {
			return;
		}
		if (dir == 'down' && !next) {
			return;
		}
		startProc();
		$.ajax({
				dataType: 'html',
				type: 'GET',
				url: '/?module=gallery&action=move&dir='+dir+'&image_id='+id+'&entity_id='+IM.entity_id+'&type='+IM.type,
				success: function(data) {
					if (data == 'DONE') {
						var nt = t.cloneNode(true);
						if (dir == 'up') {
							t.parentNode.insertBefore(nt, prev);
						} else if (dir == 'down') {
							var next_next = nextNode(next);
							if (next_next) {
								t.parentNode.insertBefore(nt, next_next);
							} else {
								t.parentNode.appendChild(nt);
							}
						}
						t.parentNode.removeChild(t);
					} else {
						alert("Error: "+data);
					}
					stopProc();
				}
			}
		);
	}
	this.removeImage = function(id, link_id) {
		link_id = link_id || '';
		if (confirm("Вы точно хотите удалить это изображение?")) {
			startProc();
			var img = IM.getTable(id);
			if (img) {
				$.ajax({
					dataType: 'html',
					type: 'GET',
					//url: '/?module=gallery&action=kill&image_id='+id+'&mode=chunk&entity_id'+IM.entity_id+'&type='+IM.type+'&link_id='+link_id,
					url: '/module/gallery.kill@image_id:'+id+',entity_id:'+IM.entity_id+',type:'+IM.type+',link_id:'+link_id+'/',
					success: function(data) {
						if (data == 'DONE') {
							img.parentNode.removeChild(img);
						} else {
							alert(this.url + "\nПроизошла ошибка: "+data);
						}
						stopProc();
					}
				});
			}
		}
	}
}

function nextNode(n) {
	while (n = n.nextSibling) {
		if (n.nodeType == 1) {
			return n;
		}
	}
	return false;
}

function previousNode(n) {
	while (n = n.previousSibling) {
		if (n.nodeType == 1) {
			return n;
		}
	}
	return false;
}

function getParent(n, parentType) {
	var cp = n.parentNode;
	while (cp && cp.nodeName != parentType.toUpperCase()) {
		cp = cp.parentNode;
	}
	return cp;
}

document._importNode = function(oNode, bImportChildren){
	var oNew;

	if(oNode.nodeType == 1){
		oNew = document.createElement(oNode.nodeName);
		for(var i = 0; i < oNode.attributes.length; i++){
			oNew.setAttribute(oNode.attributes[i].name, oNode.attributes[i].value);
		}
		oNew.style.cssText = oNode.style.cssText;
		oNew.className = oNode.className;
		if (oNode.onclick) {
			oNew.onclick = oNode.onclick;
		}
	} else if(oNode.nodeType == 3){
		oNew = document.createTextNode(oNode.nodeValue);
	}
	
	if(bImportChildren && oNode.hasChildNodes()){
		for(var oChild = oNode.firstChild; oChild; oChild = oChild.nextSibling){
			oNew.appendChild(document._importNode(oChild, true));
		}
	}
	
	return oNew;
}

function Estimate() {
	this.estimates = {};
	this.Over = function(star) {
		for (var i in this.stars) {
			this.stars[i].className = (i <= star) ? 'on' : ''
		}
	}
	this.Out = function() {
		this.Over(this.value);
	}
	this.setPoint = function(star) {
		this.value = star;
		$n('inp_'+this.id).value = star;
		this.Out();
		this.hint.innerHTML = this.stars[star].title;
	}
	this.Get = function(id) {
		return this.estimates[id];
	}
	this.Create = function(id) {
		this.isEsti = 'ESTI';
		var E = new Estimate();
		E.id = id;
		this.estimates[id] = E;
	}
	this.Load = function() {
		var id = this.id;
		this.block = $n('esti_'+id);
		this.value = $n('inp_'+id).value;
		this.stars = {};
		this.hint = this.block.getElementsByTagName('span').item(0);
		var stars = this.block.getElementsByTagName('a');
		for (var i = 0; i < stars.length; i++) {
			var s = stars[i];
			var cn = i + 1;
			this.stars[cn] = s;
			s.onmouseover = function (j) {return function() {Esti.Get(id).Over(j)}}(cn);
			s.onclick = function (j) {return function() {Esti.Get(id).setPoint(j)}}(cn);
			s.onmouseout = function() {Esti.Get(id).Out()}
		}
		if (this.value != 0) {
			this.setPoint(this.value);
		}
	}
	this.loadAll = function() {
		for (var i in this.estimates) {
			this.estimates[i].Load();
		}
	}
}

var Esti = new Estimate();


$(document).ready(function() {
	var bl = $n('top_banner').getElementsByTagName('a').item(0);
	bl.href = 'http://www.bannerbatteries.com/banner/';
});

window.onload = function() {
	//checkWindowSize();
	createJSGallery();
	Esti.loadAll();
}

window.onresize = checkWindowSize;

function checkWindowSize () {
	if (getDocumentWidth() > 1190) {
		$n('main').style.width = '1190px';
	} else {
		$n('main').style.width = '100%';
	}
}

function checkImage(id) {
	var i = $n('img_'+id);
	if (i.checked && i.checked == true) {
		i.checked = false;
		i.style.border = '3px solid #FFF';
		$n('inp_'+id).value = 0;
	} else {
		i.checked = true;
		i.style.border = '3px solid #00F';
		$n('inp_'+id).value = 1;
	}
}

function editField(id, field) {
	var vs = $n(id+'_'+field);
	var cv = vs ? (vs.textContent || vs.innerText || '') : '';
	vs.style.display = 'none';
	var save = "saveField("+id+",'"+field+"');";
	var hide = "hideField("+id+",'"+field+"');";
	var cell = getParent(vs, 'td');
	if (cell.getElementsByTagName('div').length == 1) {
		cell.getElementsByTagName('div').item(0).style.display = 'none';
	}
	cell.innerHTML += '<span id="'+id+'_'+field+'_edit">' +
			'<input type="text" value="'+cv+'" style="width:80%; border:0; font-size:11px;" ' +
			'onKeyUp="if(event.keyCode == 13) {'+save+' return false;} if (event.keyCode == 27) {'+hide+'}"/>' +
							'<img src="/i/save.gif" onClick="'+save+'" /></span>';
	cell.getElementsByTagName('input').item(0).focus();
}

function saveField(id, field) {
	startProc();
	var vs = $n(id+'_'+field);
	var cell = getParent(vs, 'td');
	if (cell.getElementsByTagName('div').length == 1) {
		cell.getElementsByTagName('div').item(0).style.display = 'block';
	}
	var inp = cell.getElementsByTagName('input').item(0);
	var sp = $n(id+'_'+field+'_edit');
	var nv = inp.value;
	$.ajax({
			method: 'GET',
			url: '/?module=admin&mode=chunk&action=save_field&field='+field+'&entity_id='+id+'&value='+nv,
			success: function(data) {
				sp.parentNode.removeChild(sp);
				vs.innerHTML = data;
				vs.style.display = '';
				stopProc();
			}
	});
}

function hideField(id, field) {
	var sp = $n(id+'_'+field+'_edit');
	if (sp) {
		sp.parentNode.removeChild(sp);
	}
	var vs = $n(id+'_'+field);
	var cell = getParent(vs, 'td');
	if (cell.getElementsByTagName('div').length == 1) {
		cell.getElementsByTagName('div').item(0).style.display = 'block';
	}
	vs.style.display = '';
}

function confirmLink(text, link) {
	if (confirm(text)) {
		document.location.href = link;
	}
}

function userSelectorProto (block, link, target) {
	this.block = block;
	this.link = link;
	this.target = target;
	var divs = this.block.getElementsByTagName('div');
	for (var i in divs) {
		if (divs[i].className == 'selector_body') {
			this.body = divs[i];
		}
	}
	this.Show = function() {
		this.block.style.height = getClientHeight() - 50 + 'px';
		this.body.style.height = getClientHeight() - 120 + 'px';
		showBlock(this.block);
	}
	this.Search = function (term) {
		var uSel = this;
		$.ajax({
			method: 'GET',
			dataType: 'html',
			url: '/?module=user&action=find&term='+term+'&mode=chunk',
			success: function(data) {
				$n('user_selector_body').innerHTML = data;
				var links = $n('user_selector_body').getElementsByTagName('a');
				for (var i = 0; i < links.length; i++) {
					var cl = links[i];
					if (cl.className.match(/^found_user_/)) {
						var uid = cl.className.replace(/[^0-9]/g, '');
						var uname = cl.innerHTML;
						cl.onclick = function (id, name) {return function() {uSel.Select(id, name);}}(uid,uname);
					}
				}
			}
		});
		return false;
	}
	this.Select = function(uid, uname) {
		this.link.innerHTML = uname;
		this.target.value = uid;
		this.block.style.display = 'none';
		hideOverlay();
	}
}