var current = document;
var S = document;
var btn_add = document;
var btn_cart = document;
var expert = false;

var reg_as_paid = function(domain){
	var rm_domain = $('dom_' + domain);
	if ($chk(rm_domain)){
		rm_domain.getElement('.cross').fireEvent('click');
		$('block_registration_own').getElement('.tip').addClass('hidden');
		var zone = domain.split('.');
		zone = zone.splice(1, zone.length-1);
		zone = zone.join('.');
		domain = domain.split('.')[0];
		var need_block = {};
		if (zone.split('.')[1]){
			need_block = $('block_registration_relcom');
		}
		else{
			need_block = $('block_registration_nic') || $('block_registration_nic_mobyhost');
		}
		need_block.getElement('input[type=text]').set('value', domain.split());
		need_block.getElement('.domain_zones').getElements('input[type=checkbox]').each(function(ch){
			ch.removeProperty('checked').fireEvent('click');
		});
		if ($chk($('registration.' + zone))){
			$('registration.' + zone).setProperty('checked', 'checked').fireEvent('click');
		}
		need_block.getElement('input[type=button]').fireEvent('click');
		var block_l = current.getElement('.links');
		if ($chk(block_l)){
			block_l.getElements('a').each(function(a){
				if (a.idd == need_block.get('id')){
					a.fireEvent('click');
				}
			});
		}
	}
}
var show_parameters = function(div){
	if (div.get('id').split('|')[0] == 'registration'){
		(new Element('ul', {'class': 'list'})).inject(div.list);
	}
	else{
		(new Element('ol', {'class': 'list'})).inject(div.list);
	}
	for (var i in div.list.options.params){
		if (!expert && div.list.options.params[i].expert){
			continue;
		}
		add_param(div, i, div.list.options.params[i]);
	}
	var a = div.list.getElements('.ajax_link');
	if (!$chk(a[1]) && $chk(a[0])){
		a[0].fireEvent('click');
	}
	check_depend(div);
}
var light = function(a, one){
	if (a && !one){
		var old = a.getParent().getParent().getElement('a.current');
		if ($chk(old)){
			old.removeClass('current').addClass('ajax_link');
			old.getParent().removeClass('cur_param');
		}
	}
	if (a && one !== false){
		a.addClass('current').removeClass('ajax_link');
	}
}
var add_param = function(div, key, obj){
	var li = new Element('li', {'id':'param_' + key});
	var a = new Element('a', {'class':'ajax_link', 'href':'#', 'html':'<b>' + obj.title + (obj.required && div.get('id').split('|')[0] != 'registration' ? '<span class="warning">*</span>' : '') + ':</b>'});
	a.inject(li);
	a.addEvent('click', function(e){
		if ($chk(e)){
			e.stop();
			if (this.hasClass('current') || this.hasClass('adisabled')){return};
		};
		current.c_param = this.getNext();
		light(this);
		this.getParent().addClass('cur_param');
		show_block(key, obj);
		set_paramsblock_position(this);
	});
	var ul = new Element('ul', {'class':'selected_params'});
	ul.inject(li);
	li.inject(div.list.getFirst());
	div.list.params[key] = li;
}
var set_paramsblock_position = function(c_link){
	var rb = current.variants.getFirst();
	var top = Math.max(0, parseInt(c_link.getTop() - current.variants.getTop() + 9 - rb.getHeight() / 2));
	current.variants.setStyle('padding-top', top);
}
var select_current_service = function(div){
	current = div;
	if (div.get('id') != 'temp_service' && $chk($('temp_service'))){
		$('temp_service').dispose();
		btn_add.removeClass('hidden');
	}
	S.getElements('div.service').each(function(el){
		var t = el.getElement('.title');
		if (t.hasClass('hidden')){
			el.getElement('.cont').addClass('hidden');
			t.removeClass('hidden');
		}
	});
	div.getElement('.title').addClass('hidden');
	div.getElement('.cont').removeClass('hidden');
	if (div.list){
		var a = div.list.getElement('a.current');
		if ($chk(a)){
			a.fireEvent('click');
		}
		else{
			add_block(current, 'maintip');
		}
	}
}
var set_pre_html = function(div){
	div.getElement('.title').addClass('hidden');
	var _html = '<h3>Выберите услугу:</h3><ul>';
	for (var i in tariffs){
		_html += '<li><b>' + tips['tariffs.' + i] + '</b><ul>';
		for (var j in tariffs[i]){
			_html += '<li><a href="#" class="set_title ajax_link" id="' + i + '|' + j + '"><b>' + tariffs[i][j].title + '</b></a></li>';
		}
		_html += '</ul></li>';
	}
	_html += '</ul>';
	div.getElement('.cont').removeClass('hidden').set('html', _html);
	div.getElement('.cross').addClass('hidden');
}
var set_pre_events = function(div){
	div.getElement('.cross').addEvent('click', function(e){
		if ($chk(e)){e.stop()};
		if (div.get('id') == 'temp_service'){
			btn_add.removeClass('hidden');
		}
		else{
			remove_old_blocks(div);
			div.list.getElements('.cross').each(function(cross){
				cross.fireEvent('click');
			});
		}
		div.dispose();
		check_global_rules();
		if (S.getElements('.service').length < 1){
			btn_add.fireEvent('click');
		}
	}).addEvent('mouseenter', function(){
		this.addClass('cross_selected');
	}).addEvent('mouseleave', function(){
		this.removeClass('cross_selected');
	});
	var tars = div.getElements('.set_title');
	tars.each(function(a){
		a.addEvent('click', function(e){
			if ($chk(e)){e.stop()};
			btn_add.removeClass('hidden');
			set_service(div, a.get('id'));
		}).addEvent('mouseenter', function(){
			this.addClass('selected');
		}).addEvent('mouseleave', function(){
			this.removeClass('selected');
		});
	});
	if (tars.length == 1){
		tars[0].fireEvent('click');
	}
}
var set_service = function(div, id){
	div.getElement('.cross').removeClass('hidden');
	div.set('id', id);
	var ids = id.split('|');
	var _html = tariffs[ids[0]][ids[1]].title;
	div.getElement('.title').getLast().set('html', '<a href="#" class="ajax_link"><b>' + _html + '</b></a>');
	div.getElement('.title').getLast().getFirst().addEvent('click', function(e){
		if ($chk(e)){e.stop()};
		select_current_service(div);
	}).addEvent('mouseenter', function(){
		this.addClass('selected');
	}).addEvent('mouseleave', function(){
		this.removeClass('selected');
	});
	div.getElement('.cont').set('html', '<h3>' + _html + '</h3>');
	set_content(div, id);
}
var set_content = function(div, id){
	current = div;
	div.getElement('.cont').set('html',	div.getElement('.cont').get('html') + '<table><tbody><tr><td style="vertical-align:top"><div id="params" class="params"></div></td><td id="params_block" class="params_block"></td></tr><tr><td colspan="2"><div class="textblock hidden" style="margin:16px 0px 0px 6px;"><div class="top"><i></i><b></b></div><div class="center amount_block" id="amount_block"></div><div class="bottom"><i></i><b></b></div></div></td></tr></tbody></table>');
	div.list = div.getElement('.params');
	div.list.options = tariffs[id.split('|')[0]][id.split('|')[1]];
	div.list.params = {};
	div.variants = div.getElement('.params_block');
	add_block(current, 'maintip');
	show_parameters(div);
}
var show_block = function(key, obj){
	remove_old_blocks(current);
	var id = null;
	if (obj.html_type == 'block'){
		id = obj.html_block;
	}
	else if (obj.html_type == 'html'){
	}
	else{
		id = key;
		if ($(id)){
			$(id).dispose();
		}
		var b = $('paramBlock').getElement('.template2').clone(true);
		b.removeClass('template2');
		b.inject($('paramBlock'));
		b.set('id', id);
		if (obj.html_type == 'select'){				//choose variants from list
			var tag = '';
			var ul = new Element('ul');
			var a = {};
			var li = {};
			for (var i in obj.variants){
				if (obj.variants[i].depend){
					var flag = false;
					for (var j in obj.variants[i].depend){
						current.list.params[j].getElements('li').each(function(li){
							for (var k = 0; k < obj.variants[i].depend[j].length; k++){
								if (li.get('id') == obj.variants[i].depend[j][k]){
									flag = true;
								}
							}
						});
					}
					if (!flag){
						continue;
					}
				}
				if (obj.variants[i].tag && obj.variants[i].tag != tag){
					var m = ''
					var flag = !tag;
					tag = obj.variants[i].tag;
					switch (tag){
						case 'bitrix': m = 'Площадки, оптимизированные для 1С-Битрикс';
							break;
						case 'panel': m = 'Площадки с панелями управления';
							break;
						case 'root': m = 'Площадки с root-доступом';
							break;
					}
					if (m){
						(new Element('li', {'html':'<b>' + m + '</b>', 'style':'padding: ' + (flag ? '0px' : '10px') + ' 0px 7px 8px;background:none'})).inject(ul);
					}
				}
				a = new Element('a', {'href':'#', 'class':'ajax_link', 'html':'<b>' + obj.variants[i].title + '</b>'});
				li = new Element('li', {'style':'margin-left:5px;'});
				a.addEvent('click', (function(x){return function(e){
					if ($chk(e)){e.stop()};
					if (this.hasClass('current')){return};
					light(this);
					show_description(x, obj.variants[x].description);
					inject_param_value(this.get('text'), x, 'replace');
				}})(i));
				current.c_param.getElements('li').each(function(li){
					if (i == li.get('name')){
						light(a, true);
						show_description(i, obj.variants[i].description);
					}
				});
				a.inject(li);
				li.inject(ul);
				if (obj.variants[i].selected){
					a.fireEvent('click');
				}
			}
			ul.inject(b.getElement('.center').getFirst());
		}
		else if (obj.html_type == 'insert'){		//integer value, include infinite
			var c = b.getElement('.center').getFirst();
			var div = {};
			if (obj.init >= 0){
				div = new Element('div', {'html': 'В базовый тариф включено ' + obj.init + ' ' + obj.measure, 'style': 'height:30px', 'class': 'hot'});
				div.inject(c);
			}
			div = new Element('div', {'class': 'insert', 'html': '<div class="fl">Введите количество:&nbsp;&nbsp;</div><div class="fl"><div class="input"><i>&nbsp;</i><input class="only_granted_symbols" type="text" maxlength="10" value="" name="integer"/><b>&nbsp;</b></div></div><div class="plus fl"></div>'})
			div.inject(c);
			var inp = c.getElement('input.only_granted_symbols');
			var btn = c.getElement('div.plus');
			filter_keys(inp);
			inp.addEvent('keypress', function(e){
				if (e.code == 13){
					btn.fireEvent('click');
				}
			});
			btn.addEvent('click', function(e){
				if ($chk(e)){e.stop()};
				light(this);
				var v = parseInt(inp.get('value'));
				if (!v){
					inp.focus();
					return;
				}
				id = '';
				var vv = v;
				for (var i in obj.variants){
					if (obj.variants[i].min && v >= obj.variants[i].min){
						id = i;
						vv = v;
						if (obj.variants[i].max && v <= obj.variants[i].max){
							break;
						}
						else{
							vv = obj.variants[i].max;
						}
					}
				}
				v = vv || v;
				inp.set('value', v);
				inject_param_value(v + ' ' + obj.measure, id + '|' + v, 'replace', 'count:' + v);
			});
			for (var i in obj.variants){
				if (obj.variants[i].unlimit){
					var a = new Element('a', {'href': '#', 'html': '<b>Без ограничений</b>', 'class': 'ajax_link'});
					a.addEvent('click', function(e){
						if ($chk(e)){e.stop()};
						light(a);
						inject_param_value('Без ограничений', i + '|unlimit', 'replace');
					});
					var div = new Element('div', {'class': 'with_link'});
					a.inject(div);
					div.inject(c);
					break;
				}
			}
			current.c_param.getElements('li').each(function(li){
				var tmp = li.get('name').split('|')[1];
				if (!tmp){return};
				if (tmp == 'unlimit'){
					light(a);
				}
				else{
					inp.set('value', tmp).fireEvent('blur');
				}
			});
			$(id).onShow = function(){
				this.getElement('input.only_granted_symbols').focus();
			}
		}
		else if (obj.html_type == 'increment'){		//different values
			var c = b.getElement('.center').getFirst();
			var div = {};
			if (!obj.required){
				for (var i in obj.variants){
					if (obj.variants[i]['default']){
						div = new Element('div', {'html': 'В базовый тариф включено ' + obj.variants[i].title + ' ' + obj.variants[i].measure, 'style': 'height:30px', 'class': 'hot'});
						div.inject(c);
					}
				}
			}
			var steps = obj.required ? $H(obj.variants).getLength() : $H(obj.variants).filter(function(k){return !k['default']}).getLength();
			div = new Element('div', {'class': 'increment', 'html': '<div class="fl">Выберите количество:&nbsp;&nbsp;</div><div class="slider" steps="' + steps + '"><div class="textblock"><div class="top"><i></i><div class="slide"></div><b></b></div></div><div class="input"><i></i><input type="text" value="" style="width:150px" readonly="readonly"/><b></b></div></div></div>'});
			div.inject(c);
			init_sliders();
			var slider = div.getElement('div.slider');
			var k = 1;
			for (var i in obj.variants){
				if (!obj.required && obj.variants[i]['default']){
					continue;
				}
				slider.variants[k] = new Hash(obj.variants[i]);
				slider.variants[k].title += (slider.variants[k].measure ? ' ' + slider.variants[k].measure : '');
				slider.variants[k]['_self'] = i;
				if (obj.variants[i].selected){
					slider.cur_point = k;
					slider.inp.set('value', slider.variants[k].title);
				}
				k++;
			}
			slider.onMove = function(step){
				if (step == 0){
					inject_param_value('', '', 'remove');
				}
				else{
					inject_param_value(slider.variants[step].title, slider.variants[step]._self + '|' + step, 'replace', 'count:' + (slider.variants[step].count || '1'));
				}
			}
			$(id).onShow = function(){
				var li = current.c_param.getElement('li');
				if ($chk(li)){
					var step = li.get('name').split('|')[1];
				}
				else{
					var step = 0;
				}
				slider.setSlide(step);
				slider.inp.set('value', slider.variants[step].title);
				slider.inp.focus();
			}
		}
		else if (obj.html_type == 'boolean'){		//choose variants as boolean value or choose from limited chain of valie with switch variants
			var ul = new Element('ul');
			var a_yes = null;
			var a_no = null;
			var li = {};
			for (var i in obj.variants){
				if (!obj.variants[i].number){continue};
				a_yes = new Element('a', {'href':'#', 'class':'ajax_link', 'html':'<b>' + obj.variants[i].title + '</b>'});
				a_no = new Element('a', {'href':'#', 'class':'ajax_link hidden', 'html':'<b>Отключить</b>', 'style':'margin-left:5px'});
				li = new Element('li');
				a_yes.addEvent('click', function(e){
					if ($chk(e)){e.stop()};
					if (this.hasClass('current')){return};
					light(this);
					show_description(i, obj.variants[i].description);
					inject_param_value(this.get('text'), i, 'replace');
					a_no.removeClass('hidden');
				});
				current.c_param.getElements('li').each(function(li){
					if (i == li.get('name')){
						light(a_yes, true);
						show_description(i, obj.variants[i].description);
					}
				});
				a_no.addEvent('click', function(e){
					if ($chk(e)){e.stop()};
					if (this.hasClass('current')){return};
					light(this);
					inject_param_value(null, null, 'remove');
					a_no.addClass('hidden');
				});
				a_yes.inject(li);
				a_no.inject(li);
				li.inject(ul);
			}
			ul.inject(b.getElement('.center').getFirst());
			if (a_yes){
				$(id).onShow = function(){
					if (a_yes.hasClass('current')){
						a_no.removeClass('hidden');
					}
					else{
						a_no.addClass('hidden');
					}
				}
			}
		}
	}
	add_block(current, id);
}
var remove_old_blocks = function(c, block){
	if (block){
		block.inject($('paramBlock'));
	}
	else{
		c.variants.getElements('.regblock').each(function(div){
			div.inject($('paramBlock'));
		});
		c.variants.set('html', '');
	}
}
var add_block = function(c, id){
	var el = $(id);
	if ($chk(el)){
		el.inject(c.variants);
		el.addClass('regblock');
		if (typeof el.onShow == 'function'){
			el.onShow();
		}
	}
	else{
		(new Element('span', {'html': '<br/>Ошибка!<br>Отсутствует требуемый блок. Обратитесь в техническую поддержку.'})).inject(c.variants);
	}
	check_action_rules(current);
}
var inject_param_value = function(text, key, act, meta){
	var cc = current.c_param;
	if (act == 'replace' || act == 'remove'){
		if (cc.getFirst()){
			cc.getFirst().getElement('.cross').fireEvent('click');
		}
	}
	if (act != 'remove'){
		var li = new Element('li', {'id':key.split('|')[0], 'html':'<span>' + text + '</span>', 'name':key});
		var cross = new Element('div', {'class':'cross'});
		cross.addEvent('click', function(e){
			if ($chk(e)){
				this.getParent().getParent().getParent().getElement('a').fireEvent('click');
			}
			var id = this.getParent().get('id').split('_');
			var tmp = this.getParent().getParent().getParent().get('id');
			this.getParent().dispose();
			if (id[0] && id[1] && id[0] == 'dom' && $chk($(id[1])) && $(id[1]).getElement('.plus')){
				$(id[1]).getElement('.plus').removeClass('pgray');
			}
			if ($chk(e)){
				e.stop();
				if (tmp != 'param_domain'){
					light(current.variants.getElement('.current'), false);
					if (typeof current.variants.getFirst().onShow == 'function'){
						current.variants.getFirst().onShow();
					}
				}
				check_rules();
			}
		}).addEvent('mouseenter', function(){
			this.addClass('cross_selected');
		}).addEvent('mouseleave', function(){
			this.removeClass('cross_selected');
		});
		cross.injectBefore(li.getFirst());
		li.meta = meta;
		li.inject(cc);
	}
	check_rules();
	return false;
}
var show_description = function(c, text){
	c = $(current.c_param.getParent().get('id').split('_')[1]).getElement('.desc');
	if (text){
		c.getElement('.center').set('html', text);
		c.removeClass('hidden');
	}
	else{
		c.addClass('hidden');
	}
}
var check_rules = function(){
	if (current.get('id') == 'temp_service'){
		return;
	}
	check_depend(current);
	check_local_rules(current);
	check_action_rules(current);
	check_prices();
	check_global_rules();
}
var check_depend = function(c){
	for (var i in c.list.params){
		try{
			var rel = c.list.options.params[i];
			var flag = true;
			if ($defined(rel.depend)){
				for (var j = 0; j < rel.depend.length; j++){
					if (c.list.params[rel.depend[j]].getElements('li').length == 0){
						flag = false;
					}
				}
				if (flag){
					c.list.params[i].getElement('a').removeClass('adisabled');
					var c_name = c.list.params[rel.depend[0]].getElements('li')[0];
					if (c_name){
						c_name = c_name.get('id');
						c.list.params[i].getElements('li').each(function(li){
							var value = li.get('id');
							var flag = false;
								if (rel.variants[value].depend){
								for (var k = 0; k < rel.variants[value].depend[rel.depend[0]].length; k++){
									if (c_name == rel.variants[value].depend[rel.depend[0]][k]){
										flag = true;
									}
								}
								if (!flag){
									li.getElement('.cross').fireEvent('click');
								}
							}
						});
					}
				}
				else{
					c.list.params[i].getElement('a').addClass('adisabled');
					c.list.params[i].getElements('.cross').each(function(div){
						div.fireEvent('click');
					});
				}
			}
		}catch(e){};
	}
}
var check_local_rules = function(c){
	var tmp_rules = true;
	c.list.getElements('li').each(function(li){
		var param = li.get('id').split('_');
		if (param[0] == 'param'){
			if (c.list.options.params[param[1]] && c.list.options.params[param[1]].required){
				var ul = li.getLast();
				if (!ul.getElements('li').length){
					tmp_rules = false;
				}
			}
		}
	});
	if (tmp_rules){
		c.getElement('.title').getFirst().addClass('hidden');
	}
	else{
		c.getElement('.title').getFirst().removeClass('hidden');
	}
	c.ok = tmp_rules;
}
var check_action_rules = function(c){
	c.freeperiod = false;
	c.list.getElements('li').each(function(li){
		var param = li.get('id').split('_');
		if (param[0] == 'param'){
			if (param[1] == 'period'){
				var tmp = li.getLast().getFirst();
				if (tmp){
					tmp = tmp.get('name').split('|')[1];
					if (tmp == 'free'){
						c.freeperiod = true;
					}
				}
			}
			else if (param[1] == 'domain'){
				var domains = li.getLast().getElements('li');
				domains.each(function(domain){
					var id = domain.get('name');
					var price = id.split('|')[1];
					if (price){
						var zone = id.split('|')[0].split('.')[1];
						if (price.split('_')[price.split('_').length-1] == 'free'){
							domain.addClass('hot');
							if (!c.freeperiod){
								make_free(domain, zone, price, 'unbind');
								if ($chk($(domain.get('id').split('_')[1]))){
									light_sel(zone, price, 'unbind');
								}
							}
							c.freeperiod = false;
						}
					}
				});
				domains.each(function(domain){
					if (c.freeperiod){
						var id = domain.get('name');
						var price = id.split('|')[1];
						if (price){
							var zone = id.split('|')[0].split('.')[1];
							if (free_domains[zone]){
								for (var i = 0; i < free_domains[zone].length; i++){
									if (price + '_free' == free_domains[zone][i]){
										make_free(domain, zone, price, 'bind');
										if ($chk($(domain.get('id').split('_')[1]))){
											light_sel(zone, price, 'bind');
										}
										c.freeperiod = false;
									}
								}
							}
						}
					}
				});
			}
		}
	});
	var act = '';
	if (c.freeperiod){
		act = 'bind';
	}
	else{
		act = 'unbind';
	}
	for (var i in free_domains){
		light_sel(i, free_domains[i][0], act);
	}
}
var check_prices = function(){
	try{
		current.request.cancel();
	}
	catch(e){}
	if (current.get('id').split('|')[0] == 'registration'){return};
	current.request = new Ajax('{' + get_request(current) + '}', {
		container: current,
		url: '/shop.x',
		onSuccess: function(r){
			if (!r){
				this.onFailure();
				return;
			}
			var c = this.options.container.getElement('.amount_block');
			var cc = new Element('div');
			var services = [];
			var domains = false;
			if (!r.service[0]){
				services[0] = r.service;
			}
			else{
				services = r.service;
			}
			for (var k = 0; k < services.length; k++){
				if (services[k].tariff != this.options.container.get('id').split('|')[1]){
					if (services[k].tariff == 'registration.nic'){
						domains = true;
						continue;
					}
					else if (services[k].tariff == 'package.freedomain'){
						services[k] = services[k].service[0];
					}
					else{
						continue;
					}
				}
				for (var i in services[k].param){
					var li = this.options.container.list.getElement('li[id=param_' + i + ']');
					if (li){
						for (var j = 0; j < services[k].param[i].length; j++){
							var tmp = li.getElement('li[id=' + services[k].param[i][j].value + ']');
							if (tmp){
								tmp = tmp.getLast();
								if (tmp.getLast() && tmp.getLast().tagName.toLowerCase() == 'span'){
									tmp.getLast().dispose();
								}
								if (services[k].param[i][j].amount){
									tmp.set('html', tmp.get('text') + '<span>&nbsp;&ndash; ' + services[k].param[i][j].amount + '</span>');
								}
							}
						}
					}
				}
				if (services[k].prices && typeof services[k].prices.action[0].price != 'undefined'){
					(new Element('h4', {'html': 'Расчетная стоимость услуги:'})).inject(cc);
					var ul = new Element('ul');
					ul.inject(cc);
					for (var i = 0; i < services[k].prices.action.length; i++){
						var li = new Element('li', {'html': tips['actions.' + services[k].prices.action[i].type] + ': '});
						if (services[k].prices.action[i].discount){
							var ul2 = new Element('ul');
							(new Element('li', {'html': 'Базовая стоимость: ' + services[k].prices.action[i].price})).inject(ul2);
							(new Element('li', {'html': 'Скидка: ' + services[k].prices.action[i].discount})).inject(ul2);
							(new Element('li', {'html': 'Итого: ' + services[k].prices.action[i].amount})).inject(ul2);
							ul2.inject(li);
						}
						else{
							li.set('html', li.get('html') + services[k].prices.action[i].amount);
						}
						li.inject(ul);
					}
					if (services[k].prices.total){
						(new Element('li', {'html': 'Общая стоимость услуги: ' + services[k].prices.total.amount + (domains ? '<sup><a href="#_1">1</a></sup>' : '')})).inject(ul)
						if (domains){
							(new Element('div', {'class':'comments', 'html':'<sup id="_1">1</sup><div>регистрация доменов оплачивается отдельно.</div>'})).inject(cc);
						}
					}
				}
			}
			c.setStyle('height', c.getHeight() + 'px');
			var tmp = cc.get('html');
			c.set('html', tmp);
			if (tmp){
				c.getParent().removeClass('hidden');
			}
			else{
				c.getParent().addClass('hidden');
			}
			c.setStyle('height', 'auto');
		}
	});
}
var check_global_rules = function(){
	var rules_ok = false;
	S.getElements('.service').each(function(div){
		if (div.ok){
			rules_ok = true;
		}
	});
	if (rules_ok){
		btn_cart.getParent().removeClass('sdisabled');
	}
	else{
		btn_cart.getParent().addClass('sdisabled');
	}
}
var make_free = function(domain, zone, price, act){
	price = price.replace('_free', '');
	var free_price = price + '_free';
	var sel = $('sel_registration.' + zone);
	if (!$chk(sel)){return};
	if (act == 'bind'){
		domain.set('name', domain.get('name').replace(price, free_price));
		sel.set('value', free_price);
		domain.getLast().set('html', domain.get('id').split('_')[1] + '<span>&nbsp;&ndash; ' + $(sel.options[sel.selectedIndex]).get('text') + '</span>');
		domain.addClass('hot');
	}
	else{
		domain.set('name', domain.get('name').replace(free_price, price));
		sel.set('value', price);
		domain.getLast().set('html', domain.get('id').split('_')[1] + '<span>&nbsp;&ndash; ' + $(sel.options[sel.selectedIndex]).get('text') + '</span>');
		domain.removeClass('hot');
	}
}
var light_sel = function(zone, price, act){
	var tmp = $('sel_.' + zone);
	var tmp2 = $('sel_registration.' + zone);
	if ($chk(tmp) && $chk(tmp2)){
		price = price.replace('_free', '');
		var free_price = price + '_free';
		if (act == 'bind'){
			if (!$chk(tmp.getElement('option[value=' + free_price + ']'))){
				tmp2.getElement('option[value=' + free_price + ']').clone().inject(tmp);
			}
			var t = tmp.getElement('option[value=' + price + ']');
			if ($chk(t)){
				t.dispose();
			}
			tmp.set('value', free_price).fireEvent('change');
		}
		else{
			if (!$chk(tmp.getElement('option[value=' + price + ']'))){
				tmp2.getElement('option[value=' + price + ']').clone().inject(tmp);
			}
			var t = tmp.getElement('option[value=' + free_price + ']');
			if ($chk(t)){
				t.dispose();
			}
			tmp.set('value', price).fireEvent('change');
		}
	}
}
var push_domain = function(own_domain, status){
	var meta = '';
	var key = '';
	var text = '';
	var init = current.list.options.params.domain ? current.list.options.params.domain.init : false;
	if (init && init <= current.list.getElement('li[id=param_domain]').getElements('li').length){
		Message(
			'Достигнут лимит',
			'К данному тарифу можно присоединить только ' + init + ' ' + case_number(init, 'алиас', 'алиаса', 'алиасов') + '.',
			'Alert',
			0,
			300
		);
		return;
	}
	if (typeof own_domain == 'object'){
		if (own_domain.hasClass('pgray')){
			return;
		}
		own_domain.addClass('pgray');
		if (status == 'cart'){
			var id = own_domain.getParent().getParent().get('id');
			key = 'dom_' + id;
			text = id + '<span>&nbsp;&ndash; из корзины</span>';
		}
		else{
			text = own_domain.getParent().getParent().get('id');
			key = 'dom_' + text;
			text = (text.length > 34) ? '<span title="' + text + '">' + text.substr(0, 17) + '..' + text.substr(text.length - 17, text.length) + '</span>' : text;
			var sel = own_domain.getParent().getParent().getLast().getFirst();
			meta = sel.get('name');
			key += '|' + sel.get('value');
			text += '<span>&nbsp;&ndash; ' + $(sel.options[sel.selectedIndex]).get('text') + '</span>';
		}
	}
	else{
		key = 'dom_' + own_domain;
		text = own_domain + '<span>&nbsp;&ndash; свой</span>';
	}
	inject_param_value(text, key, 'add', meta);
}
var get_request = function(div){
	var service_request = [];
	var tar = div.get('id').split('|');
	switch(tar[0]){
		case 'cpanel':
		case 'vps':
		case 'registration':
		case 'isp':
			var act = {'type': 'provide'};
			break;
		case 'ssl':
			var act = {'type': 'issue'};
			break;
		default: break;
	}
	var params = {};
	var freedomain = '';
	div.list.getElements('.selected_params').each(function(ul){
		ul.getElements('li').each(function(li){
			var id = li.get('id');
			var meta = li.meta;
			if (id.split('_')[0] == 'dom'){
				var price = li.get('name').split('|')[1];
				var domain = id.split('_')[1];
				if (price){
					tmp_obj = 'service:{tariff:"' + meta + '", action:[{type:"register"}], param:{zone:[{"value":"' + domain.replace(domain.split('.')[0] + '.', '') + '"}], domain:[{"value":"' + domain + '"}], period:[{"value":"' + price + '"}]}}';
					if (price.split('_')[price.split('_').length-1] == 'free'){
						freedomain = tmp_obj;
					}
					else{
						service_request[service_request.length] = tmp_obj;
					}
					meta = '';
				}
				id = domain;
			}
			_name = li.getParent().getParent().get('id').split('_')[1];
			if (!params[_name]){
				params[_name] = [];
			}
			var j = params[_name].length;
			params[_name][j] = {'value' : id};
			if (meta){
				var tmp = meta.split('|');
				for (var i = 0; i < tmp.length; i++){
					params[_name][j][tmp[i].split(':')[0]] = tmp[i].split(':')[1];
				}
			}
		});
	});
	if (tar[0] == 'registration'){
		service_request = service_request.join(',');
		return service_request;
	}
	tmp_obj = 'service:{tariff:"' + tar[1] + '", action:[' + JSON.encode(act) + '], param:' + JSON.encode(params) + '}';
	if (freedomain){
		service_request[service_request.length] = 'service:{tariff:"package.freedomain", ' + tmp_obj + ',' + freedomain + '}';
	}
	else{
		service_request[service_request.length] = tmp_obj;
	}
	service_request = service_request.join(',');

	return service_request;
}
var parse_response = function(r){
	var errors = [];
	for (var i = 0; i < r.service.length; i++){
		if (r.service[i]['tariff'] && r.service[i]['tariff'] == 'package.freedomain'){
			var err = parse_response(r.service[i]);
			errors = errors.concat(err);
		}
		if (r.service[i]['@error']){
			if (r.service[i]['@error'] == 'error.service.hasconflict'){
				$H(r.service[i].conflicts).each(function(c){
					for (var j = 0; j < c.length; j++){
						errors[errors.length] = {
							'code'		: c[j].code,
							'service'	: c[j].service,
							'domain'	: c[j].domain,
							'scope'		: c[j].scope
						}
					}
				});
			}
			else if (r.service[i]['@error'] == 'error.service.hassametest'){
				errors[errors.length] = {
					'code'		: 'conflict.tariff.hassametest',
					'tariff'	: r.service[i].tariff
				}
			}
			else if (r.service[i]['@error'] == 'error.service.hassameactive'){
				errors[errors.length] = {
					'code'		: 'conflict.tariff.hassameactive',
					'tariff'	: r.service[i].tariff
				}
			}
			else if (r.service[i]['@error'] == 'error.service.hassametestcart'){
				errors[errors.length] = {
					'code'		: 'conflict.tariff.hassametestcart',
					'tariff'	: r.service[i].tariff
				}
			}
		}
	}
	return errors;
}
//-----------------------------------------------------------------------------------------------*/
var init_shop = function(){
//--b_reg----------------------------------------------------------------------------------------*/
	var b_reg = $('block_registration');
	if ($chk(b_reg)){
		b_reg.getElements('a').each(function(a){
			a.idd = a.get('title');
			a.set('title', '');
			a.addEvent('click', function(e){
				if ($chk(e)){e.stop()};
				light(this);
				if ($chk(b_reg.getNext())){
					remove_old_blocks(current, b_reg.getNext());
				}
				add_block(current, a.idd);
			});
		});
		b_reg.onShow = function(){
			var a = b_reg.getElement('.current');
			if ($chk(a)){
				a.fireEvent('click');
			}
		}
	}
//--block_registration_nic-block_registration_relcom---------------------------------------------*/
	[$('block_registration_nic'), $('block_registration_relcom')].each(function(d_form){
		d_form.button = d_form.getElement('input[type=button]');
		d_form.field = d_form.getElement('input[type=text]');
		d_form.zones = d_form.getElements('input[type=checkbox]');
		d_form.results = d_form.getElement('table.results');
		d_form.domains_body = d_form.getElement('.body');
		d_form.field.addEvent('keyup', function(){
			if (this.get('value')){
				d_form.button.getParent().removeClass('sdisabled');
			}
			else{
				d_form.button.getParent().addClass('sdisabled');
			}
		}).addEvent('keypress', function(e){
			if (e.code == 13){
				d_form.button.fireEvent('click');
			}
		}).fireEvent('keyup');
		d_form.button.addEvent('click', function(e){
			if ($chk(e)){e.stop()};
			d_form.field.fireEvent('keyup').fireEvent('blur');
			var name = d_form.field.get('value').split('.')[0].toLowerCase();
			if (!name){
				return;
			}
			d_form.field.set('value', name);
			var zones = d_form.zones.filter(function(checkbox){return checkbox.get('checked')});
			var zone_names = {};
			zones.each(function(checkbox){
				var zone = checkbox.get('id').split('.');
				zone = zone.splice(1, zone.length-1);
				zone = zone.join('.');
				zone_names[zone] = zone;
			});
			if (!zones.length){
				d_form.zones[0].setProperty('checked', 'checked').fireEvent('click');
				var zone = d_form.zones[0].get('id').split('.');
				zone = zone.splice(1, zone.length-1);
				zone = zone.join('.');
				zone_names[zone] = zone;
			}
			d_form.results.getParent().removeClass('hidden');
			d_form.results.getElements('tr').each(function(tr, i){
				if (!i){
					return;
				}
				tr.dispose();
			});
			$H(zone_names).each(function(z_name){
				var id_domain = name + '.' + z_name;
				if ($chk($(id_domain))){
					var tr = new Element('tr');
					var short_name = cut(name + '.' + z_name, 18);
					(new Element('td')).inject(tr);
					(new Element('td', {html: '<b title="' + name + '.' + z_name + '">' + short_name + '</b>'})).inject(tr);
					(new Element('th', {html: '<a href="#">' + tips['domain_in_cart'] + '</a>'})).inject(tr);
					tr.inject(d_form.results.getFirst());
					tr.getLast().getFirst().addEvent('click', function(e){
						if ($chk(e)){e.stop()};
						var block_l = current.getElement('.links');
						if ($chk(block_l)){
							block_l.getElements('a').each(function(a){
								if (a.idd == 'block_registration_basket'){
									a.fireEvent('click');
									blinked($(id_domain));
								}
							});
						}
						else{
							var domain = tr.getFirst().getNext().getFirst().get('title')
							Message(
								'Информация',
								'Домен <b class="hot">' + domain + '</b> уже присутствует в корзине. Его повторный заказ невозможен.<br/>Чтобы приобрести этот домен, посетите <a href="/cabinet/cart/">раздел корзины</a>.',
								'Alert',
								0,
								400
							);
						}
					});
				}
				else{
					var tr = new Element('tr', {id: id_domain});
					var short_name = cut(name + '.' + z_name, 18);
					(new Element('td', {html: '<div class="plus hidden" title="' + tips['add_domain'] + '"></div>'})).inject(tr);
					(new Element('td', {html: '<b title="' + name + '.' + z_name + '">' + short_name + '</b>'})).inject(tr);
					(new Element('th', {html: '<img src="/images/preload.gif"/>' + tips['check']})).inject(tr);
					tr.inject(d_form.results.getFirst());
					tr.getFirst().getFirst().addEvent('click', function(){push_domain(this)});

					new Ajax('{domain:"' + name + '.' + z_name + '", parse:"yes"}', {
						domain: name + '.' + z_name,
						url: '/whois.x',
						onSuccess: function(response){
							if (!response){
								this.onFailure();
								return;
							}
							var status = response.answer.registered;
							var domain = response.domain;
							var tr = $(domain);
							if (!$chk(tr)){
								return;
							}
							var zone = domain.split('.');
							delete zone[0];
							zone = zone.join('.');
							var th = tr.getLast();
							if (status == 'no'){
								tr.getLast().set('text', '');
								var sel = $('sel_registration' + zone).clone();
								sel.set('id', 'sel_' + zone);
								sel.inject(tr.getLast());
								sel.addEvent('change', function(){
									if ($(this.options[this.selectedIndex]).hasClass('hot')){
										sel.addClass('hot');
									}
									else{
										sel.removeClass('hot');
									}
									if ($chk($('dom_' + domain))){
										//$('dom_' + domain).getElement('.cross').fireEvent('click');
										//push_domain(this.getParent('tr').getFirst().getFirst());
									}
								}).addEvent('keyup', function(){
									this.fireEvent('change');
								});
								sel.removeClass('hidden');
								tr.getFirst().getFirst().removeClass('hidden');
								if ($chk($('dom_' + domain))){
									tr.getFirst().getFirst().addClass('pgray');
									sel.set('value', $('dom_' + domain).getProperty('name').split('|')[1]);
								}
								check_action_rules(current);
							}
							else if (status == 'yes'){
								th.set('html', '<a href="#">' + tips['busy'] + '</a>');
								th.getFirst().addEvent('click', function(e){
									if ($chk(e)){e.stop()};
									Message(
										tips['whois'],
										response.answer.raw.replace(/\n/g, '<br/>').replace(/\'/g, '&#39;').replace(/\"/g, '&quot;'),
										'Tip',
										0,
										450
									);
								});
							}
							else if (status == 'unavailable'){
								th.set('html', '<a href="#">' + tips['unavailable_to_order'] + '</a>');
								th.getFirst().addEvent('click', function(e){
									if ($chk(e)){e.stop()};
									Message(
										tips['whois'],
										response.answer.raw.replace(/\n/g, '<br/>').replace(/\'/g, '&#39;').replace(/\"/g, '&quot;'),
										'Tip',
										0,
										450
									);
								});
							}
							else{
								th.set('html', '<a href="#">' + tips['request_failed'] + '</a>');
								th.getFirst().addEvent('click', function(e){
									if ($chk(e)){e.stop()}
									tr.getLast().set('html', '<img src="/images/preload.gif"/>' + tips['check']);
									this.send('{domain:"' + this.options.domain + '", parse:"yes"}');
								}.bind(this));
							}
						},
						onFailure: function(){
							var tr = $(this.options.domain);
							if (!$chk(tr)){
								return;
							}
							tr.getLast().set('html', '<a href="#">' + tips['request_failed'] + '</a>');
							tr.getLast().getFirst().addEvent('click', function(e){
								if ($chk(e)){e.stop()}
									tr.getLast().set('html', '<img src="/images/preload.gif"/>' + tips['check']);
								this.send('{domain:"' + this.options.domain + '", parse:"yes"}');
							}.bind(this));
						}
					});
				}
			});
		});
		d_form.onShow = function(){
			d_form.field.focus();
		}
	});
//--block_registration_own-----------------------------------------------------------------------*/
	var own = $('block_registration_own');
	if ($chk(own)){
		own.button = own.getElement('input[type=button]');
		own.field = own.getElement('input[type=text]');
		own.field.addEvent('keyup', function(){
			if (/([a-z0-9\-]+\.)+(com|net|org|info|biz|name|aero|edu|coop|museum|mobi|travel|int|gov|mil|arpa|root|nato|web|csnet|ddn|me|ac|ad|ae|af|ag|ai|al|am|an|ao|aq|ar|as|at|au|aw|az|ba|bb|bd|be|bf|bg|bh|bi|bj|bm|bn|bo|br|bs|bt|bv|bw|by|bz|ca|cc|cd|cf|cg|ch|ci|ck|cl|cm|cn|co|cr|cu|cv|cx|cy|cz|de|dj|dk|dm|do|dz|ec|ee|eg|eh|er|es|et|eu|fi|fj|fk|fm|fo|fr|ga|gd|ge|gf|gg|gh|gi|gl|gm|gn|gp|gq|gr|gs|gt|gu|gw|gy|hk|hm|hn|hr|ht|hu|id|ie|il|im|in|io|iq|ir|is|it|je|jm|jo|jp|ke|kg|kh|ki|km|kn|kp|kr|kw|ky|kz|la|lb|lc|li|lk|lr|ls|lt|lu|lv|ly|ma|mc|md|mg|mh|mk|ml|mm|mn|mo|mp|mq|mr|ms|mt|mu|mv|mw|mx|my|mz|na|nc|ne|nf|ng|ni|nl|no|np|nr|nu|nz|om|pa|pe|pf|pg|ph|pk|pl|pm|pn|pr|ps|pt|pw|py|qa|re|ro|ru|rw|sa|sb|sc|sd|se|sg|sh|si|sj|sk|sl|sm|sn|so|sr|st|su|sv|sy|sz|tc|td|tf|tg|th|tj|tk|tm|tn|to|tp|tr|tt|tv|tw|tz|ua|ug|uk|um|us|uy|uz|va|vc|ve|vg|vi|vn|vu|wf|ws|ye|yt|yu|za|zm|zw)$/i.test(this.get('value'))){
				own.button.getParent().removeClass('sdisabled');
			}
			else{
				own.button.getParent().addClass('sdisabled');
			}
		}).addEvent('keypress', function(e){
			if (e.code == 13){
				own.button.fireEvent('click');
			}
		});
		own.button.addEvent('click', function(e){
			if ($chk(e)){e.stop()};
			if (this.getParent().hasClass('sdisabled')){
				return;
			}
			own.getElement('.tip').addClass('hidden');
			var d_name = own.field.get('value').toLowerCase();
			own.field.fireEvent('keyup').fireEvent('blur');
			if ($('dom_' + d_name)){
				Message(
					'Информация',
					'Домен <b class="hot">' + d_name + '</b> уже добавлен к одной из заказанных услуг.',
					'Alert',
					0,
					400
				);
				return;
			}
			push_domain(d_name);
			var is_our = false;
			var sel = d_name.split('.');
			sel[0] = 'sel_registration';
			sel = sel.join('.');
			if ($chk($(sel))){
				new Ajax('{domain:"' + d_name + '", parse:"yes"}', {
					domain: d_name,
					url: '/whois.x',
					onSuccess: function(response){
						if (!response){
							this.onFailure();
							return;
						}
						var mes = own.getElement('.tip').getElement('p');
						var status = response.answer.registered;
						var short_name = cut(d_name, 17);
						if (status == 'no'){
							mes.set('html', pattern(tips['own_domain_not_registered'], [d_name, short_name]));
							own.getElement('.tip').removeClass('hidden');
						}
					}
				});
			}
			own.field.set('value', '').fireEvent('keyup').focus();
		});
		own.onShow = function(){
			own.field.focus();
		}
	}
//--block_registration_basket--------------------------------------------------------------------*/
	if ($chk($('block_registration_basket'))){
		$('block_registration_basket').getElements('div.plus').each(function(div){
			div.addEvent('click', function(){push_domain(this, 'cart')});
		});
	}
//--btn_cart-------------------------------------------------------------------------------------*/
	btn_cart = $('add_to_cart');
	if ($chk(btn_cart)){
		btn_cart.addEvent('click', function(e){
			if ($chk(e)){e.stop()};
			if (this.getParent().hasClass('sdisabled')){return};
			var send_obj = [];
			var tmp_obj = '';
			var act = '';
			var params = '';
			var freedomain = '';
			var no_domain = '';
			S.getElements('.service').each(function(div){
				if (div.ok){
					send_obj[send_obj.length] = get_request(div);
				}
				if (!freedomain && div.freeperiod){
					freedomain = div;
				}
			});
			var send = function(){
				new Ajax('{' + send_obj.join(',') + '}',{
					query: '{' + send_obj.join(',') + '}',
					url: '/cart.x?add',
					onSuccess: function(r){
						if (!r){
							if (!$chk($('auth'))){
								this.onFailure();
							}
							force_fire_events = true;
							login_or_die();
							return;
						}
						if (r['@error']){
							var errors = parse_response(r);
							for (var i = 0; i < errors.length; i++){
								if (errors[i].domain){
									for (var j = 0; j < errors[i].domain.length; j++){
										if ($chk($('dom_' + errors[i].domain[j].value))){
											if (errors[i].code == 'conflict.registration.domain.exists'){
												if (confirm(tips['domain_in_cart1'] + ' ' + errors[i].domain[j].value + ' ' + tips['domain_in_cart2'])){
													$('dom_' + errors[i].domain[j].value).getElement('.cross').fireEvent('click');
													check_depend(current);
													var a = current.list.params.domain.getElement('a');
													a.fireEvent('click');
													set_paramsblock_position(a);
												}
											}
											else if (errors[i].code == 'conflict.hosting.domain.exists'){
												if (confirm(tips['domain_in_cart1'] + ' ' + errors[i].domain[j].value + ' ' + tips['domain_in_cart3'])){
													$('dom_' + errors[i].domain[j].value).getElement('.cross').fireEvent('click');
													check_depend(current);
													var a = current.list.params.domain.getElement('a');
													a.fireEvent('click');
													set_paramsblock_position(a);
												}
											}
											else{
												alert(tips['uknown_error']);
											}
										}
									}
								}
								else if (errors[i].code == 'conflict.tariff.hassametest'){
									var t = '';
									for (var o in tariffs){
										if (tariffs[o][errors[i].tariff]){
											t = tariffs[o][errors[i].tariff].title;
											break;
										}
									}
									if (t){
										Message(
											'Заказ невозможен',
											'Заказ услуги <b>' + t + '</b> на тестовый период невозможен по причине того, что вами привышен лимит использования тестовых услуг данного типа.',
											'Alert',
											0,
											400
										)
									}
								}
								else if (errors[i].code == 'conflict.tariff.hassametestcart'){
									var t = '';
									for (var o in tariffs){
										if (tariffs[o][errors[i].tariff]){
											t = tariffs[o][errors[i].tariff].title;
											break;
										}
									}
									if (t){
										Message(
											'Заказ невозможен',
											'Заказ услуги <b>' + t + '</b> на тестовый период невозможен по причине того, что услуга данного типа уже присутствует в <a href="/cabinet/cart/">корзине</a>.',
											'Alert',
											0,
											400
										)
									}
								}
								else if (errors[i].code == 'conflict.tariff.hassameactive'){
									var t = '';
									for (var o in tariffs){
										if (tariffs[o][errors[i].tariff]){
											t = tariffs[o][errors[i].tariff].title;
											break;
										}
									}
									if (t){
										Message(
											'Заказ невозможен',
											'Заказ услуги <b>' + t + '</b> на тестовый период невозможен по причине того, что услуга данного типа уже присутствует в вашем <a href="/cabinet/services/?status=ENABLED">списке услуг</a>.',
											'Alert',
											0,
											400
										)
									}
								}
							}
						}
						else{
							Message(
								tips['title'],
								tips['order_success'],
								'Alert',
								function(){
									page.goto('/cabinet/cart/')
								},
								220
							);
						}
					}
				});
			}
			if (freedomain){
				Message(
					'Подтверждение',
					'Вы не выбрали домен в подарок &ndash; бесплатный домен в зоне .ru на срок 1 год.<br/><br/>Продолжить без домена в подарок?',
					'Confirm',
					send,
					400
				)
			}
			else if (no_domain){
				Message(
					'Подтверждение',
					'Вы не выбрали домен в подарок &ndash; бесплатный домен в зоне .ru на срок 1 год.<br/><br/>Продолжить без домена в подарок?',
					'Confirm',
					send,
					400
				)
			}
			else{
				send();
			}
		});
	}
//--init-----------------------------------------------------------------------------------------*/
	S = $('shop');
	var template = S.getElement('.template');
	btn_add = $('add_service');
	if ($chk(btn_add)){
		btn_add.addEvent('click', function(e){
			if ($chk(e)){e.stop()};
			if ($chk($('temp_service'))){return false};
			btn_add.addClass('hidden');
			var new_div = template.clone(true);
			new_div.removeClass('template').addClass('service').addClass('textblock');
			new_div.inject(S);
			new_div.set('id', 'temp_service');
			set_pre_html(new_div);
			set_pre_events(new_div);
			select_current_service(new_div);
		}).fireEvent('click');
	}
//-----------------------------------------------------------------------------------------------*/
}