/* login */
function test(form, callback)
{
	if(form.user.value == '' || form.pass.value == '')
	{
		_$('error_msg').style.display = 'block';
		trytofocus(form.user);
		return false;
	}

	for(var i=0;i<form.elements.length;i++)
		form.elements[i].disabled = true;

	JsHttpRequest.query(
		window.login_url+'?r='+Math.random(),
		{
			user: form.user.value,
			pass: form.pass.value,
			alien:form.alien.checked,
			time: new Date().getTimezoneOffset()
		},
		function(result, debugMessages)
		{
			if (debugMessages)
				alert(debugMessages);

			if(result.code == 200)
			{
				startqipActions(result);

				endMenu(1);
				_$('unauth_menu').style.display = 'none';
				_$('auth_menu').style.display = '';

				var username = form.user.value;
				username = username.toLowerCase().split('@');
				var domain = username[1] || 'qip.ru';
				username = username[0];
				if(username.length + domain.length >= 22 && _$('set_homepage'))
					_$('set_homepage').style.width = 'auto';

				var username_top = (username.length>25 ? username.substr(0,20)+'...' : username) + '@' + domain;
				var username_info = (username.length>12 ? username.substr(0,11)+'...' : username);

				_$('error_msg').style.display = 'none';
				_$('username').innerHTML = username_top;

				redirUrl = _$('login_redirect').value;
				if(redirUrl.length > 0)
				{
					if(redirUrl != 'self')
						window.location = redirUrl;
					else
						window.location.reload();
				}
			}
			_$('error_msg').style.display = 'block';
			elems = form.elements;
			for(var i=0;i<elems.length;i++)
				elems[i].disabled = false;
			form.user.blur();
			trytofocus(form.user);
			if(callback)
				callback(null, result.code);
		}
	);
	return false;
}

function startqipActions(result)
{
	//форма логина
	var login_form = _$('qip_login_form');
	var user_info = _$('qip_user_info');
	if(!login_form || !user_info) return;
	login_form.parentNode.removeChild(login_form);
	user_info.style.display = '';
	var login_form2 = _$('qip_login_form2');
	if (login_form2) login_form2.style.display = 'none';
	//блоки
	_$('qip_greeting').innerHTML = getDayTime() + result.fn;
	var fields = ['love', 'friends'];
	for(var i=0; i<fields.length; i++)
		if(fields[i] in result)
			_$('qip_'+fields[i]+'_new').parentNode.style.display = 'block';
	//личный кабинет
	updateOwnCabinet();
}

/* Добавление функций загрузки */
function addLoadEvent(func)
{
	var oldonload = window.onload;
	if (typeof window.onload != 'function')
		window.onload = func;
	else
	{
		window.onload = function()
		{
			oldonload();
			func();
		}
	}
}

/* Генерирование подписей к числительным */
function pluralForm(n, form1, form2, form5)
{
	n = Math.abs(n)%100;
	n1 = n%10;
	if(n > 10 && n < 20) return form5;
	if(n1 > 1 && n1 < 5) return form2;
	if(n1 == 1) return form1;
	return form5;
}

/**
 * Обновление информации личного кабинета
 */
function updateOwnCabinet()
{
	if(!('reload_personal_url' in window))
		return;
	JsHttpRequest.query(
		window.reload_personal_url, null,
		function(result, debugMessages)
		{
			if (debugMessages=='false')
				return;
			setTimeout('updateOwnCabinet()', 600000); //10 минут
			_$('qip_greeting').innerHTML = getDayTime() + result.fn;

			var fields = {'mail': 0, 'love': 1, 'friends': 1};
			var titles = [['новое письмо', 'новых письма', 'новых писем'], ['новое сообщение', 'новых сообщения', 'новых сообщений']];

			for(var field in fields)
				if((field in result) && (result[field] = parseInt(result[field])))
				{
					var elem = _$('qip_'+field+'_new'), t = titles[fields[field]];
					if(elem)
						elem.innerHTML =  result[field] + ' ' + pluralForm(result[field], t[0], t[1], t[2]);
				}
		},
		true
	)
}

/**
 * Возвращает название времени суток
 */
function getDayTime()
{
	var t = new Date().getHours();
	var d = new Date().getDay();
	var str_t='';
	if (t < 5) str_t = 'Доброй ночи';
	else if (t < 10) str_t = 'Доброе утро';
	else if (t < 12 && (d == 0 || d == 6)) str_t = 'Доброе утро';
	else if (t < 18) str_t = 'Добрый день';
	else str_t = 'Добрый вечер';
	return str_t;
}

/** события загрузки **/
/* переопределяем значения геокодов если стоят куки */
function loader_geo()
{
	window.geo_code = getCookie('sqip_weather_code');
}

function showBlock(id)
{
	var myDiv = _$(id);
	isDisplayed = myDiv.style.display == 'none';
	myDiv.style.display = isDisplayed ? 'block' : 'none';
	if (isDisplayed && id == 'id')
	{
		var field = _$('qip_login').user;
		field.select();
		trytofocus(field);
	}
	return false;
}

/** Google search log **/
function goSearch(form)
{
	var qfield = form[window.menu_data[window.active.name].qname] || window.active.qfield || form.elements[0];
	if(qfield.value == '' && window.menu_data[window.active.name].redir === 0)
		return;
	if(window.active.name == 'google')
	{
		document.createElement('IMG').src = window.base_url+'skin/img/searchg_log.gif?uniq=' + getCookie('startqip_uniq') +
			'&text=' + escape(encodeURI(qfield.value)) + '&t='+new Date().getTime();
	}
	return form.submit();
}

function goSearch2(form)
{
	if(typeof(suggest) == 'undefined' || suggest.dis)
		return goSearch(form);
	if(suggest.s.style.display == 'none' || suggest.sug_select == -1)
	{
		if(suggest.sel_pr)
			suggest.addI('from','presug');
		else if(suggest.hc)
			suggest.addI('from','suggest');
		goSearch(form);
	}
	if(suggest.sug_select >= 0)
	{
		suggest.setSuggest(suggest.s.childNodes[suggest.sug_select]);
		if(suggest.isHidden())
			return suggest.hide();
	}
}

var sint = false;
function ds()
{
	suggest.disable();
}
function su()
{
	if(sint == false)
		suggest.init('qip_suggest', 'search_form_text_internet', 'search_form_internet', 'search_btn_internet', 'http://search.qip.ru/suggest?q=');
	sint = true;
	suggest.enable();
	suggest.goSearch = goSearch2;
}

/** Yandex search log **/
function log(a, pos, search)
{
	var path = (a && a.href) ? a.href : document.location;
	document.createElement('IMG').src = window.base_url+'skin/img/searchy_log.gif?uniq=' + getCookie('uniq') + '&url=' + path +
		"&pos=" + pos + "&search=" + search;
}

/* переключение табов */
function openMenu(tab)
{
	var menu_data = window.menu_data;
	if(menu_data[tab] == null)
		return;

	var form = document.forms['search_form'];

	if(!window.active)
		def_params();

	var qfield = window.active.qfield = window.active.qfield || form[menu_data[window.active.name].qname];

	if(!qfield)
		return;

	var redirect = menu_data[tab].redir === 1;
	for(var i in menu_data)
		if(!redirect)
			_$('menu_item_'+i).className = (i == tab) ? 'aktiv' : '';

	window.active.name = tab;

	qfield.name = menu_data[tab].qname;
	form.action = menu_data[tab].url;

	trytofocus(qfield);

	if(qfield.value != '' || redirect)
		goSearch(form);
	else if(typeof(menu_data[tab].callback) == 'function')
		menu_data[tab].callback.call();
}

function sample(span,url)
{
	if (url)
		JsHttpRequest.query(url,{},function(r, dbg) {},true);
	if (_$('search_form_text_internet')) {
		_$('search_form_text_internet').value = span.innerHTML;
		trytofocus(_$('search_form_text_internet'));
	} else if (_$('search_form_text')) {
		_$('search_form_text').value = span.innerHTML;
		trytofocus(_$('search_form_text'));
	}
}

/**
 * изменение города для всех блоков
 * res $record запись
 */
function changeCity(res)
{
	town = res.geo.city;
	town_love = res.geo.rp;
	short_town_love    = (town_love.length > 13) ? (town_love.substr(0,10) + '...') : town_love;
	short_town_love_w  = (town_love.length > 18) ? (town_love.substr(0,16) + '...') : town_love;
	short_town_weather = (res.weather_name.length > 25) ? (res.weather_name.substr(0,25) + '...') : res.weather_name;
	window.geo_code = res.code;

	var div_job = _$('div_job');
	if(div_job)
		div_job.innerHTML = res.job;

	var tmp_elem = {innerHTML: '', value: ''};

	(_$('sp_town')       || tmp_elem).innerHTML = town;
	(_$('sp_love_town')  || tmp_elem).innerHTML = short_town_love;
	(_$('hd_love_geo')   || tmp_elem).value     = res.geo.love;
	(_$('weather')        || tmp_elem).innerHTML = res.weather;
	(_$('a_weather_cap') || tmp_elem).innerHTML = short_town_weather;

	setCookie('sqip_weather_code', window.geo_code, new Date(new Date().getFullYear()+1, 1, 1), '/', '.qip.ru');
}

/**
 * Сохранение куки лавпланета
 */
function lovesave(f)
{
	val = f.pol.options[f.pol.selectedIndex].value + '-'
		+ f.spol.options[f.spol.selectedIndex].value + '-'
		+ f.bage.value + '-' + f.tage.value;
	set_startqip_settings('love', val);
}

/* переключение табов новостей */
function switchBlock(lnk, n)
{
	var table = lnk;
	while(table.tagName.toLowerCase() != 'table')
		table = table.parentNode;

	var items = table.getElementsByTagName('div');
	for(var i=0; i<items.length; i++)
		items[i].className = items[i].className.replace('aktiv', '');
	lnk.parentNode.className += ' aktiv';

	set_startqip_settings('news_tab', n);

	i = 0;
	while(block = _$('content_' + i++))
		block.className = block.className.replace(/ hidden/g, '') + (i-1 == n ? '' : ' hidden');
}

function focusField(field, def_val)
{
	if(field.value != def_val)
		return;
	field.className = field.className.split(' ')[0];
	field.value = '';
}

function blurField(field, def_val)
{
	if(field.value != '')
		return;
	field.className = field.className + ' pole_d';
	field.value = def_val;
}

/* Перезагрузка информационных блоков погоды
 * $town_id string geo города
 */
function infoReload(town_id)
{
	//запоминаем текущий город в отдельной переменной
	window.geo_code = town_id;
	JsHttpRequest.query(
		window.base_url+'blocks/reload'+'?r='+Math.random(),
		{
			code: town_id
		},
		function(result, debugMessages)
		{
			if (!debugMessages)
				changeCity(result);
			hide_n_show();
		},
		true
	);
	return false;
}

function hide_n_show()
{
	_$('town_lnk').style.display = 'block';
	_$('sl_town').parentNode.style.display = 'none';
	_$('sl_town').disabled = true;
	window.weatherData.b_town.style.display = 'inline';
}

/* подгрузка скрипта со списком городов и их кодов */
function switchTownSelect(p, curCode, jsName)
{
	var b_town = _$('sp_town');
	b_town.parentNode.style.display = p ? 'none' : '';
	var town_lnk = _$('town_lnk');
	town_lnk.style.display = p ? 'none' : '';

	var sel = _$('sl_town');
	if(sel.options.length > 1)
	{
		sel.parentNode.style.display = p ? 'block' : 'none';
		sel.disabled = !p;
		town_lnk.style.display = p ? 'none' : 'inline';
		return trytofocus(sel);
	}

	var town_loading = _$('town_loading');
	town_loading.style.display = 'block';

	window.weatherData = {'select': sel, 'span': town_loading, 'code': curCode, 'b_town': b_town};
	document.body.appendChild(_$$('script', {type: 'text/javascript', charset: 'utf-8', src: window.base_url+'js/' + jsName}));
}

/* заполнение options select */
function fillOptions(opts)
{
	var data = window.weatherData;
	var sel = data.select;
	opts = opts.split(';');
	for(var i=0; i<opts.length; i++)
	{
		var entry = opts[i].split(',');
		sel.options[i] = new Option(entry[1], entry[0]);
		if(data.code == entry[0])
			sel.options[i].selected = true;
	}
	data.span.style.display = 'none';
	sel.parentNode.style.display = 'block';
	sel.disabled = false;
	trytofocus(sel);
}

function _$(id){return document.getElementById(id);}

/* создание элемента с атрибутами */
function _$$(tagname, attr)
{
	var elem = document.createElement(tagname);
	if(attr)
		for(var i in attr)
			elem[i] = attr[i];
	return elem;
}

function trytofocus(el){try{el.focus()}catch(e){};}

function setClass(elem, className){elem.className += ' ' + className;}
function unsetClass(elem, className){elem.className = elem.className.replace(new RegExp(className, 'g'), '');}
function hasClass(elem, className){return new RegExp("(^|\\s)"+className+"(\\s|$)").test(elem.className);}

function activateTab(elem)
{
	var alinks = _$('i-quot').getElementsByTagName('A');
	var apages = _$('i-graph').getElementsByTagName('DIV');

	for (var i = 0; i < alinks.length; i++)
	{
		var cur = (alinks[i] == elem);
		cur ? setClass(alinks[i], 'i-active') : unsetClass(alinks[i], 'i-active');
		cur ? setClass(apages[i], 'i-active') : unsetClass(apages[i], 'i-active');
	}
}

function closeMenu()
{
	setTimeout("endMenu()", 200);
}
function endMenu(p)
{
	if(_$('id') && (!_$('qip_login').user.disabled || p))
		_$('id').style.display = 'none';
}

//сохранение настроек страницы для qip.ru
function set_startqip_settings(fieldname, value, cookie_name, project)
{
	cookie_name = cookie_name || 'startqip_settings'; //имя куки

	var settings = getCookie(cookie_name);
	if(!settings) //кука не существует
		settings = '';

	settings = _unpack(settings); //распаковка
	if(!(settings instanceof Object)) //в куке была лажа
		settings = {};

	settings[fieldname] = value; //сохранение значения
	settings = _pack(settings); //упаковка

	project = project || 'start';

	setCookie(
		cookie_name,
		settings,
		new Date(2010, 1, 1),
		'/',
		(new RegExp(project+"(qip(2|3)?)?\.qip\.ru").test(document.domain) ? document.domain : project+'.qip.ru')
	);
}

function get_startqip_settings(field_name, cookie_name)
{
	cookie_name = cookie_name || 'startqip_settings'; //имя куки

	var settings = getCookie(cookie_name);
	if(!settings) //кука не существует
		return null;

	settings = _unpack(settings); //распаковка
	if(!(settings instanceof Object)) //в куке была лажа
		return null;

	return (field_name in settings) ? settings[field_name] : null;
}

//упаковка и распаковка данных в куке
function _pack(obj)
{
	var data = [];
	for(var field in obj)
		data.push(field+'='+obj[field]);
	return data.join('|');
}
function _unpack(packed)
{
	var data = packed.split('|'), obj = {};
	for(var i=0; i<data.length; i++)
	{
		data[i] = data[i].split('=');
		if(data[i].length === 2)
			obj[data[i][0]] = data[i][1];
	}
	return obj;
}

function disableForm(form, disable)
{
	var elems = form.elements;
	for(var i=0; i<elems.length; i++)
		elems[i].disabled = disable;
}

function checkAll(src_elem, target_elem_name)
{
	var elems = src_elem.form.elements;
	for(var i=0; i<elems.length; i++)
		if(elems[i].type.toLowerCase() == 'checkbox' && (elems[i].name == target_elem_name || elems[i].name == src_elem.name))
			elems[i].checked = src_elem.checked;
}

function scrollCards(forward, isstart)
{
	if(!isstart)
		return window.clearInterval(window['cardsScrollData']['interval']);

	window['cardsScrollData'] = {
		container: _$('cards_container'),
		forward:   forward,
		pic_width: 80,
		delta:     8,
		interval:  window.setInterval('moveCards()', 30)
	};
}
function moveCards()
{
	var d = window['cardsScrollData'];
	var base = parseInt(d.container.style.marginLeft);
	if(base >= -d.pic_width-d.delta)
	{
		base -= d.pic_width;
		var childs = d.container.getElementsByTagName('div');
		d.container.insertBefore(childs[childs.length-1], childs[0]);
	}
	else if(base <= -d.pic_width*2+d.delta*2)
	{
		base += d.pic_width;
		var childs = d.container.getElementsByTagName('div');
		d.container.appendChild(childs[0]);
	}
	d.container.style.marginLeft = (base + (d.forward ? d.delta : -d.delta)) + 'px';
}

function setCookie(name, value, expires, path, domain, secure)
{
	var curCookie = name + "=" + escape(value) +
	((expires) ? "; expires=" + expires.toGMTString() : "") +
	((path) ? "; path=" + path : "") +
	((domain) ? "; domain=" + domain : "") +
	((secure) ? "; secure" : "");
	document.cookie = curCookie;
}

function getCookie(name)
{
	var prefix = name + "=";
	var cookieStartIndex = document.cookie.indexOf(prefix);
	if (cookieStartIndex == -1)
		return null;
	var cookieEndIndex = document.cookie.indexOf(";", cookieStartIndex + prefix.length);
	if (cookieEndIndex == -1)
		cookieEndIndex = document.cookie.length;
	return unescape(document.cookie.substring(cookieStartIndex + prefix.length, cookieEndIndex));
}

function deleteCookie(name, path, domain)
{
	if (getCookie(name))
	{
		document.cookie = name + "=" +
		((path) ? "; path=" + path : "") +
		((domain) ? "; domain=" + domain : "") +
		"; expires=Thu, 01-Jan-70 00:00:01 GMT";
	}
}

/* для элемента elem возвращает родителя (любой вложенности) с тегом parent_tag_name, если найден, иначе - false */
function getParentByTagName(elem, parent_tag_name)
{
	var cur_tag_name = elem.tagName.toLowerCase(), parent_tag_name = parent_tag_name.toLowerCase();
	while(cur_tag_name !== parent_tag_name && cur_tag_name !== 'html')
		elem = elem.parentNode, cur_tag_name = elem.tagName.toLowerCase();
	return (cur_tag_name === 'html') ? false : elem;
}

/* перехватчик кликов на ссылках */
function click_stat(event)
{
	event = event || window.event;

	if(!(event.which && (event.which == 1 || event.which == 2)
		 || event.button && (event.button == 0 || event.button == 1)))
		return false;

	var target = event.target || event.srcElement, //кликнутый элемент
		form, anchor, url, id;

	if(target.tagName.toLowerCase() == 'input'
		&& (target.type == 'submit' || target.type == 'image')
		&& (form = getParentByTagName(target, 'form'))
		&& form.action.length
	) url = form.action, id = form.name; //submit (или image) формы
	else if(
		   (anchor = getParentByTagName(target, 'a'))
		&& anchor.getAttribute('href').charAt(0) !== '#' //не якорь
	) url = anchor.href, id = anchor.id; //ссылка
	else return; //мимо

	var x = ('clientX' in event) ? (event.clientX - (_$('index_main_wrapper').offsetLeft || 0)) : 0,
		y = ('clientY' in event) ? (event.clientY + document.documentElement.scrollTop) : 0;

	var script = _$('link_stat_script');
	if(!script)
		document.body.appendChild(script = _$$('script', {id: 'link_stat_script', type: 'text/javascript', charset: 'utf-8'}));

	script.src = window.base_url + 'js/empty.js'
		+ '?id='   + (id.length ? id : ('pos' + x + 'x' + y))
		+ '&href=' + escape(url)
		+ '&r='    + new Date().getTime();
}