// RND Box
(function($){
  $.fn.extend({
    box: function() {
      return $(this).each(function(){
		$(this).wrap('<div class="rnd-box"><div></div><div class="tl"></div><div class="tr"></div><div class="bl"></div><div class="br"></div></div>');
      });
    }
  })
})(jQuery);

// Region selector
var regionSelector = new (function() {
	var self = this;
	
	/**
	 * @param String region
	 * @return Object {region, descrition}
	 */
	this.parseRegion = function (region) {
		var matches, res = {region: region, description: ''};
		if (matches = region.match(/^(.*?)\s*\(((\d+\s+)*\d+)\)$/)) {
			res.region = matches[1];
			res.description = matches[2];
		}
		return res;
	};
	
	this.onReady = function () {
		var regions = $('.region select[name=region]');
		if (regions.size() <= 0) {
			return;
		}
		var container = $(regions).parents('h1'),
			div = $('<div class="header-large region-list"></div>')
			ul = $('<ul></ul>'),
			selected = '',
			btnClose = $('<a></a>').attr('href', '#').addClass('region-list-close').attr('title', 'Закрыть').click(function(){
				$(this).parent('div.region-list').toggle();
				return false;
			});
		regions.parents('form').hide();
		div.append(btnClose);
		regions.find('option.region-level-1').each(function(i, option) {
			selected = option.selected? option.text: selected;
			var region = self.parseRegion(option.text);
			var li = $('<li>' + (option.selected
					? region.region
					: '<a href="' + option.value + '">' + region.region + '</a>')
					+ (region.description? ' <span>' + region.description + '</span>': '')
					+ '</li>');
			var cities = $(option).parents('select[name=region]').find('option.region-' + $(option).attr('rel'));
			if (cities.size() > 0) {
				var ulCities = $('<ul class="region-cities"></ul>');
				cities.each(function(i, opt) {
					var region = self.parseRegion(opt.text);
					ulCities.append($('<li>' + (opt.selected
							? region.region
							: '<a href="' + opt.value + '">' + region.region + '</a>')
							+ (region.description? ' <span>' + region.description + '</span>': '')
							+ '</li>'));
				});
				li.append(ulCities);
			}
			ul.append(li);
		});
		var link = $('<a class="g-dotted" href="#" title="Выбрать другой город"></a>').html(regions.find('option[selected]').attr('title')).click(function() {
			var div = $('.region-list'), offset = $(this).offset();
			div.css('top', (offset.top - 1) + 'px');
			div.css('left', (offset.left - 1) + 'px');
			div.toggle();
			return false;
		});
		container.append(link);
		div.append(ul)
		var allRegionsOption = regions.find('.region-level-0:first');
		if (allRegionsOption.size() == 1) {
			div.append($('<a class="all-regions" href="' + allRegionsOption.val() + '">' + allRegionsOption.text() + '</a>'));
		}
		$('body').append(div);
	}
	
	return this;
})();

// Header table selector (bazar-extra)
var extraSelector = new (function(){
	var self = this;
	this.selector = '.bazar-extra';

	this.showSelector = function() {
		$(this).parents(self.selector).find('ul').show();
	};
	
	this.hideSelector = function(e) {
		e = e || event || window.event;
		if ($(e.target).parents(self.selector).size() <= 0) {
			$(self.selector).find('ul').hide();
		}
	};
	
	this.onReady = function() {
		var extra = $(this.selector);
		extra.find('ul').hide();
		extra.find('.title').addClass('title-active').click(self.showSelector);
		$(document).click(self.hideSelector);
	};

	return this;
})();

// Category selector in Add adv
var categorySelector = new (function() {
	var self = this;
	
	this.defaultLinkText = 'Выберите категорию объявления';
	
	this.closeSelector = function(e) {
		e = e || event || window.event;
		e.preventDefault();
		
		if ($.browser.msie) {
			$('select.popup-hidden').removeClass('popup-hidden').css('visibility', 'visible');
		}

		$(this).parents('div.selector').hide();
		return false;
	};
	
	this.showSelector = function(e) {
		e = e || event || window.event;
		e.preventDefault();
		
		if ($.browser.msie) {
			$('select').addClass('popup-hidden').css('visibility', 'hidden');
		}
		
		var selector = $(this).siblings('div.selector'), offset = $(this).offset();
		selector.css('top', (offset.top - 1) + 'px').css('left', (offset.left - 1) + 'px').show();
		return false;
	};
	
	this.onReady = function() {
		var categoriesContainer = $('.category-selector'),
			categoriesSelect = categoriesContainer.find('select[name=path]'),
			categorySelected = categoriesSelect.find('option[selected]:first'),
			categorySelectedGroup = categorySelected.parents('optgroup:first');
		if (categoriesSelect.size() <= 0) {
			return;
		}
		var linkText = (categorySelected.size() > 0 && categorySelected.text() != ''
				? (categorySelectedGroup.size() > 0? categorySelectedGroup.attr('label') + ' — ': '') + categorySelected.text()
				: self.defaultLinkText),
			container = $('<div class="categories-container header-middle g-mb2"><a href="#" class="g-dotted" title="' + 
				self.defaultLinkText + '">' + linkText + '</a></div>'),
			link = container.find('a.g-dotted').click(self.showSelector),
			selector = $('<div class="selector"><a href="#" class="selector-close" title="Закрыть"></a><ul class="level-1"></ul></div>'),
			selectorList = selector.find('ul');
			
			selector.find('a.selector-close').click(self.closeSelector);
		
			categoriesSelect.find('optgroup').each(function(i, grp) {
				grp = $(grp);
				var subList = $('<li class="level-1">' + grp.attr('label') + '<ul class="level-2"></ul></li>').appendTo(selectorList).find('ul');
				grp.find('option').each(function(iOpt, opt) {
					opt = $(opt);
					subList.append($('<li class="level-2">' +
						(opt.attr('selected')? opt.text(): '<a href="' + opt.val() + '">' + opt.text() + '</a>') +
						'</li>'));
				});
			});
		
		categoriesContainer.replaceWith(container.append(selector));
	};
})();

//var regionSelector = new RegionSelector();
//var extraSelector = new ExtraSelector();

$(function() {
	$('.g-box').box();
	regionSelector.onReady();
	extraSelector.onReady();
	categorySelector.onReady();
});

