/**
 * @author Vlad Yakovlev (scorpix@design.ru)
 * @copyright Art.Lebedev Studio (http://www.artlebedev.ru)
 */
var subscribe = (function()
{
	/*
	 * Идентификаторы типов подписки (новости, статьи, вакансии).
	 */
	var types = ['news', 'articles', 'vacancies'];

	/**
	 * Объект, хранящий по идентификаторам типов подписки идентификаторы и названия городов.
	 */
	var cityIds = {};
	

	
	/**
	 * Идентификатор типа подписки, для которой открыт список городов.
	 */
	var activePopup = '';
	
	/**
	 * Путь на сервере для изменения e-mail пользователя.
	 */
	var changeEmailPath = '#';

	$(window).load(function()
	{	
		setActivitySubscribeForm();
		setActivitySubscribes();
		fillCitiesTypes();
		changeTypes('subscribe-vacancies-sector');
		changeTypes('subscribe-vacancies-type');
		
		
		 /**
 *  удаляем подписку. asar@design.ru
 */
		$('#info .wrap .delete input').click(function()
		{
        $('.askbefore').show();
        $('#info .wrap .delete input').attr('disabled', 'disabled');
		});
/*		$('#info .askbefore .answeryes input').click(function()
		{
           alert('delete');
		});
*/
		$('#info .askbefore .answerno input').click(function()
		{
        $('.askbefore').hide();
        $('#info .wrap .delete input').removeAttr('disabled');
		});
		/* end */
		
		

		$('#info .email .button input, #info .email .submit input').click(function()
		{
			return changeEmail(this);
		});
		
		$('body, #city-popup .close').click(function()
		{
			closeActive();
		});
		
		$('#city-popup').click(function(e)
		{
			clickCity(e.target);
			e.stopPropagation();
		});
		
		$('#city-popup .clear span').click(function() { clearCities(); });

		$('#subscribe-vacancies-sector ul.list').click(function(e)
		{
			if ('INPUT' == e.target.nodeName) 
				changeTypes('subscribe-vacancies-sector');
		});
		
		$('#subscribe-vacancies-type ul.list').click(function(e)
		{
			if ('INPUT' == e.target.nodeName) 
				changeTypes('subscribe-vacancies-type');
		});
		
		$('#subscribe .fill-all span').click(function(e)
		{
			var domId = e.target.parentNode.parentNode.parentNode.id;
			$('#' + domId + ' ul.list input').each(function()
			{
				this.checked = true;
			});
			changeTypes(domId);
		});
		
		$('#subscribe .clear-all span').click(function(e)
		{
			var domId = e.target.parentNode.parentNode.parentNode.id;
			$('#' + domId + ' ul.list input').each(function()
			{
				this.checked = false;
			});
			changeTypes(domId);
		});
		
		$('#subscribe .switch span').click(function(e)
		{
			setBlockEnable(e.target.parentNode.parentNode.parentNode, true);
		});
		
		$('#human-email-edit input').change(function()
		{
			validateEmail();
		}).keyup(function()
		{
			validateEmail();
		});
	});
	
	/**
	 * Изменение вида формы смены e-mail пользователя и отправка данных на сервер.
	 * @param {DomElement} obj
	 */
	function changeEmail(obj)
	{
		if ('submit' == $(obj).attr('type'))
		// Пользователь изменил e-mail - отправляем информацию на сервер.
		{
			if ('#' == changeEmailPath)
			{
				$('#human-email-edit').hide();
				$('#human-email-view').text($('#Email').attr("value"));
				$('#Email_h').val($('#Email').attr("value"));
				$('#human-email-view').show();
				$('#info .email')
					.find('.submit').hide().end()
					.find('.button').show();
					
			}
			else
			{
				
						$('#human-email-edit').hide();
						$('#human-email-view').text(jData.email).show();
						$('#info .email')
							.find('.submit').hide().end()
							.find('.button').show();
							
				
			}
		}
		else
		// Отображаем форму изменения e-mail.
		{
			$('#human-email-view').hide();
			$('#human-email-edit input').val($('#human-email-view').text());
			$('#human-email-edit input').change();
			$('#human-email-edit').show();
			$('#info .email')
				.find('.button').hide().end()
				.find('.submit').show();
		}
		
 		return false;
	}
	
	 /**
	 * Показываем блок с вопросом: точно удалять? если да, удаляем подписчика. если нет, прячем блок.
	 * asar@design.ru
	 */
  var checker=0;
	function deleteSubscriber()
	{

    if(checker == 0){
        $('.askbefore').show();
        checker=1;
    }else{
        $('.askbefore').hide();
        checker=0;
    }


		return false;
	}
	
	/**
	 * Определяет активность экшенов выбора секторов и позиций.
	 * @param {string} blockId
	 */
	function changeTypes(blockId)
	{
		var jEl = $('#' + blockId);
		var checkedCount = jEl.find('ul.list input:checked').length;

		if (jEl.find('ul.list li').length == checkedCount)
		{
			jEl.find('.fill-all span').removeClass('active');
			jEl.find('.clear-all span').addClass('active');
		}
		else if (0 == checkedCount)
		{
			jEl.find('.fill-all span').addClass('active');
			jEl.find('.clear-all span').removeClass('active');
		}
		else
		{
			jEl.find('.fill-all span').addClass('active');
			jEl.find('.clear-all span').addClass('active');
		}
	}
	
	/**
	 * Очищает фильтр городов в попапе.
	 */
	function clearCities()
	{
		cityIds[activePopup] = {};
		updateCities(activePopup);

		$('#city-popup input:checked').removeAttr('checked').each(function()
		{
			$(this).next().removeClass('checked');
		});
	}
	
	/**
	 * Обрабатывает клик мышки на город в попапе.
	 * @param {DomElement} obj
	 */
	function clickCity(obj)
	{
		if ('INPUT' != obj.nodeName)
			return;

		if (obj.checked) 
		{
			cityIds[activePopup][obj.value.toString()] = $(obj).next().text().substr(1);
			//alert(cityIds[activePopup][obj.value.toString()] + ', ' + obj.value.toString() + ', ' + activePopup);
			$(obj).next().addClass('checked');
		}
		else 
		{
			delete cityIds[activePopup][obj.value.toString()];
			$(obj).next().removeClass('checked');
		}
		
		updateCities(activePopup);
	}
	
	/**
	 * Закрывает активный попап, если он был открыт.
	 */
	function closeActive()
	{
		if (!activePopup)
			return;

		var wrap = $('#wrap');
		wrap.css('height', '1px');
		$('#city-popup').hide();
		wrap.css('height', '100%');
		$(window).resize();
		activePopup = '';
	}
	
	/**
	 * Отмечает чекбоксы городов в попапе.
	 */
	function fillCities()
	{
		//$('#city-popup input:checked').removeAttr('checked');
		
		for (var id in cityIds[activePopup])
			document.getElementById('Region_' + id).checked = true;
		
		$('#city-popup input:checked').each(function()
		{
			$(this).next().addClass('checked');
		});
		updateCities(activePopup);
	}


	function initCitties()
	{
		

	}
	
	/**
	 * Заполняет внутренний массив городов для использования в попапах.
	 */
	function fillCitiesTypes()
	{
		for (var i = 0; i < types.length; i++)
		{
			cityIds[types[i]] = {};
			
			var string = $('#' + types[i] + '-cities').val();
			
			if (string) 
			{
				var ids = string.split(',');
				
				if (ids.length != $("input[@name = '" + types[i] + "-cities']").length){
				for (var j = 0; j < ids.length; j++) 
					cityIds[types[i]][ids[j].toString()] = $('#Region_' + ids[j]).next().text().substr(1);
				}
			}
				
			updateCities(types[i]);
		}
	}
	
	/**
	 * Возвращает положение элемента на странице от верхнего левого угла.
	 * @param {DomElement} obj Элемент, у которого нужно узнать позицию.
	 * @return {Array} Массив, который содержит смещение от левого (индекс 0)
	 *                 верхнего (индекс 1) края.
	 */
	function findPos(obj)
	{
		var curleft = curtop = 0;
		
		if (obj.offsetParent) 
			do 
			{
				curleft += obj.offsetLeft;
				curtop += obj.offsetTop;
			}
			while (obj = obj.offsetParent);

		return [curleft,curtop];
	}
	
	/**
	 * Показывает на странице попап с городами для подписки.
	 * @param {string} type Тип подписки (новости, статьи, вакансии).
	 */
	function openPopup(type)
	{
		var noOpen = false;

		if (activePopup && activePopup == type)
			noOpen = true;

		closeActive();
		
		if (noOpen)
			return;

		activePopup = type;
		fillCities();
		
		$('#city-popup .change').hide();
		$('#city-popup .' + activePopup).show();

		var wrap = $('#wrap');
		var obj = $('#city-popup');
		wrap.css('height', '1px');
		obj.show();

		var offsetParent = findPos(document.getElementById('form'));
		var offsetBlock  = findPos($('#subscribe-' + type + ' .popup-action').get(0));
		var top = (offsetBlock[1] - offsetParent[1]) / 1.2 / carcas.getEmK();
		obj.css('margin-top', top + 'em');
		wrap.css('height', '100%');
		$(window).resize();
	}
	
	/**
	 * Задает активность всей формы подписки (зависит от того, авторизован ли пользователь).
	 */
	function setActivitySubscribeForm()
	{
		if (!$('#info').length || 'none' == $('#info').css('display'))
		{
			$('#subscribe-wrap')
				.addClass('disabled')
				.find('.subscribe-disabled').show();
		}
	}
	
	/**
	 * Задает активность частей формы по переключателю (новости и статьи; вакансии).
	 */
	function setActivitySubscribes()
	{
		var className = parseInt($('#subscribe-news-articles-active').val()) ? 'in' : 'out';
		$('#subscribe-news-articles .switch div').addClass(className);
		
		className = parseInt($('#subscribe-vacancies-active').val()) ? 'in' : 'out';
		$('#subscribe-vacancies .switch div').addClass(className);
		
		$('#subscribe .section').each(function()
		{
			setBlockEnable(this, false);
		});
	}
	
	/**
	 * Управляет возможностью изменения подписки.
	 * @param {DomElement} block Элемент блока, у которого нужно поменять активность.
	 * @param {boolean} isSwitch Переключить текущее состояние или просто обновить визуально (когда загружается страница).
	 */
	function setBlockEnable(block, isSwitch)
	{
		var switchDiv = $(block).find('.switch');
		
		var disable;
		
		if (switchDiv.find('div.in').length)
			disable = isSwitch ? true : false;
		else
			disable = isSwitch ? false : true;

		if (disable)
		{
			$(block)
				.addClass('disabled')
				.find('.disabled-back').show().end()
				.find('.switch div').removeClass('in').addClass('out');
			$(switchDiv)
				.find('b.in').removeClass('disabled').end()
				.find('b.out').addClass('disabled').end()
				.find('span').attr('title', 'Включить');
			$('#' + block.id + '-active').val(0);
		}
		else
		{
			$(block)
				.removeClass('disabled')
				.find('.disabled-back').hide().end()
				.find('.switch div').removeClass('out').addClass('in');
			$(switchDiv)
				.find('b.out').removeClass('disabled').end()
				.find('b.in').addClass('disabled').end()
				.find('span').attr('title', 'Выключить');
			$('#' + block.id + '-active').val(1);
		}
		
		var emailForm = $('#info .email');
		
		// Если подписки не активны, надо скрыть форму изменения e-mail, иначе - показать
		
	}
	
	/**
	 * Задает путь для изменения e-mail пользователя.
	 * @param {string} path
	 */
	function setChangeEmailPath(path)
	{
		changeEmailPath = path;
	}
	
	/**
	 * Обновлят информацию о городах на странице по типу подписки.
	 * @param {string} type Тип подписки (новости, статьи, вакансии).
	 */
	function updateCities(type)
	{
		var length = 0;
		
		for (var k in cityIds[type]) 
			length++;

		if (length) 
		{
			var string = '<' + 'span class="notempty">В&#160;городах<\/span>: ';
			var hidden = '';
			var i = 0;
			
			for (var k in cityIds[type]) 
			{
				hidden += i ? ',' : '';
				hidden += k.toString();
				string += i ? ', ' : '';
				string += cityIds[type][k];
				i++;
			}
			
			$('#' + type + '-cities').val(hidden);

			string += '.';
			$('#subscribe-' + type + ' .popup-action').html(string);
			$('#city-popup .clear span').removeClass('disabled');
		}
		else 
		{
			$('#' + type + '-cities').val('');
			$('#subscribe-' + type + ' .popup-action').html('<' + 'span>Во&#160;всех городах.<\/span>');
			$('#city-popup .clear span').addClass('disabled');
		}
		
		$('#subscribe-' + type + ' .popup-action span').click(function(e)
		{
			openPopup(type);
			$.browser.msie && carcas.ieResize();
			e.stopPropagation();
		});
	}
	
	function validateEmail()
	{
		var validRegExp = /^\s*[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\s*$/i;
		var strEmail = $('#human-email-edit input').val();
		
		if ('' == strEmail || -1 == strEmail.search(validRegExp))
		{
			$('#human-email-edit input').addClass('wrong');
			$('#info .email .submit input').get(0).disabled = true;
		}
		else
		{
			$('#human-email-edit input').removeClass('wrong');
			$('#info .email .submit input').get(0).disabled = false;
		}
	}
	
	return {
		setChangeEmailPath: setChangeEmailPath
	};
})();
