/* убрать/вставить надпись 'Enter your query' в форму serp search */
function serp_formInputFocus(focused)
{
	var inputField = document.getElementById('serp_queryFieldId');
	
	if (focused)
	{
		inputField.style.color = '#000000';
		if (inputField.value == 'Enter your query') inputField.value = '';
	}
	else
	{
		if (inputField.value == '')
		{
			inputField.style.color = '#999999';
			inputField.value = 'Enter your query';
		}
	}		
};
	
/* открыть окно serp search */
function open_search_window(keyword)
{
	var domain = keyword ? keyword : $('#serp_queryFieldId').attr('value');
	var url = '/cabinet/searcher/?r='+Math.random()+'#__engine__/__ppage__/__domain__/__page__/now';
	engine = document.getElementById('serp_engineTypeId');
	engine_value = engine.value; // why engine.options[engine.selectedIndex].value ?
	engine_value = engine_value ? engine_value : 'google';
	url = url.replace('__domain__', domain).replace('__engine__', engine_value).replace('__page__', '1');
	/* проверим куки на предмет results_per_page */
	var serp_results_per_page = 100;

	/* тут происходит доставание serp_results_per_page из куков. временно уберём эту функциональность */
	//var all_cookies = document.cookie.split(';');
	//var needed_cookie = engine_value == 'yahoo' ? 'yserpnum' : engine_value == 'msn' ? 'mserpnum' : 'gserpnum';
	//for (var i in all_cookies)
	//{
	//	var tmp = all_cookies[i].split('=');
	//	if (tmp[0] == needed_cookie || tmp[0] == ' ' + needed_cookie)
	//	{
	//		serp_results_per_page = parseInt(tmp[1]);
	//		break;
	//	};
	//};
	url = url.replace('__ppage__', serp_results_per_page);
	window.open(url, 'searcher_window');
};
var today = new Date();
window.today_date = today.getFullYear() + '-' + (today.getMonth()+1) + '-' + today.getDate();
if(!window.today_date){
	window.today_date = '2010-06-01';
}
var monthNames = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];

function timestamp2string(timestamp)
{
	var date = new Date(timestamp);
	return date.getDay() + '&nbsp;' + monthNames[parseInt(date.getMonth(),10)];
};

function timestamp2date(timestamp)
{
	var date = new Date(timestamp);
	var year = date.getYear() < 1000 ? date.getYear() + 1900 : date.getYear();
	return year + '-' + (date.getMonth() + 1) + '-' + date.getDay();
};

function serp_archive_draw(data)
{
	var _template = Templates['serp']['archive'].begin();
	if (!data['error'] && (data['total_count'] == "0" || !data['total_count']))
		data['error'] = 'Sorry, no archive results for keywords starting with "' + data['letter'] + '"';
	if (data['error']) return _template.end(data['error']);
	
	/* div, в котором будет находится отображаемая таблица */
	var placeForVisibleTable = document.getElementById('serp_archive_placeForVisibleTable');
	while (placeForVisibleTable.childNodes.length > 0) placeForVisibleTable.removeChild(placeForVisibleTable.childNodes[0]); /* чистим место */

	/* шаблонная таблица (потом будет скрыта) */
	var tableTemplate = document.getElementById('archive_table');
	
	
	var keywords = data['keywords'];
	var results_per_page = data['archive_per_page'];//10;

	/* создаём отображаемую таблицу */
	var table = tableTemplate.cloneNode(true);
	table.rows[0].appendChild(table.rows[0].cells[0].cloneNode(true)); /* создаём копию ячейки основной таблицы */
	table.rows[0].appendChild(table.rows[0].cells[0].cloneNode(true));
	table.rows[0].appendChild(table.rows[0].cells[0].cloneNode(true));
	
	/* заполняем её */
	var keywords_per_column = Math.ceil(keywords.length/4);
	for (var i in keywords)
	{
		var current_subtable_num = parseInt(i/keywords_per_column);
		
		var currentSubTable = table.rows[0].cells[current_subtable_num].getElementsByTagName('table')[0];
		copyTableRow(currentSubTable, currentSubTable.rows[0]);
		var newRow = currentSubTable.rows[currentSubTable.rows.length - 1];
		newRow.cells[0].innerHTML = newRow.cells[0].innerHTML.replace('__n__', keywords[i]['n']);
		
		var links = newRow.cells[1].getElementsByTagName('a');
		
		links[0].href = '#/serp/'+data['letter']+'/archive//'+data['page'];
		links[0].onclick = function(k){return function(){open_search_window(k);};}(keywords[i]['keyword']);
		links[0].innerHTML = links[0].innerHTML.replace('__keyword__', keywords[i]['keyword']);

		links[1].href = links[1].href
			.replace(/__keyword_ue__/g, encodeURIComponent(keywords[i]['keyword']))
			.replace(/__engine__/g, encodeURIComponent(data['engine']))
			.replace(/__date_ue__/g, encodeURIComponent(keywords[i]['last_date']))
			.replace(/__results_per_page__/g, '100')
			.replace(/__page__/g, '1');
		links[1].innerHTML = links[1].innerHTML.replace('__date__', timestamp2local(ymd2timestamp(keywords[i]['last_date'])));
		links[1].id = 'archive_calendar_link_prev_' + i;
		
		links[2].href = '#serp/'+encodeURIComponent(data['letter'])+'/archive//' + encodeURIComponent(data['page']);
		links[2].title = 'calendar_link';
		links[2].id = 'archive_calendar_link_' + i;
		links[2].onclick = function(i){ return function (){ serp_archive_dates_render('serp_archive_dates_'+i, backslashQuotes(keywords[i]['keyword']), keywords[i]['id'], 0, keywords[i]['last_date']);}}(i);		

		var spans = newRow.cells[1].getElementsByTagName('span');
		spans[0].id = 'serp_archive_dates_' + i + '_preview';
		spans[1].id = 'serp_archive_dates_' + i + '_detailed';
		spans[1].innerHTML = 'serp_archive_dates_' + i + '_detailed';
	};
	
	/* удаляем из таблиц второго уровня шаблонные ячейки */
	for (var i in [0,1,2,3]) table.rows[0].cells[i].getElementsByTagName('table')[0].deleteRow(0);
	table.style.display = '';                /* показываем отображаемую таблицу */
	tableTemplate.style.display = 'none';    /* скрываем шаблонную таблицу */
	placeForVisibleTable.appendChild(table); /* помещаем отображаемую таблицу в div, предназначенный для неё */
	
	loadedDates = {};
	
	_template.showPages(data['page'],data['total_count'],data['archive_per_page'],data['letter']);
	_template.end();
}

var serp_archive_xhr = createXMLHttpRequestObject();

function getPrevMonthBegin(currMonthBegin)
{
	var date_arr = currMonthBegin.split('-');
	var year = parseInt(date_arr[0],10);
	var month = parseInt(date_arr[1],10);
	if (month == 1) return ((year-1)+'-12-01');
	return (year+'-'+(month-1)+'-01');
};

function getNextMonthBegin(currMonthBegin)
{
	var date_arr = currMonthBegin.split('-');
	var year = parseInt(date_arr[0],10);
	var month = parseInt(date_arr[1],10);
	if (month == 12) return ((year+1)+'-01-01');
	return (year+'-'+(month+1)+'-01');
};

function month_ago(_date)
{
	var date_arr = _date.split('-');
	var year = parseInt(date_arr[0],10);
	var month = parseInt(date_arr[1],10);
	var day = parseInt(date_arr[2],10);
	var _Date = new Date(year, month - 1, day, 0, 0, 0, 0);
	_Date.setDate(_Date.getDate() - 30);
	return _Date.getFullYear()+'-'+(_Date.getMonth() + 1)+'-'+_Date.getDate();
};

var loadedDates = {};

/* если нужно, загружем даты для киворда, и вызываем функцию отрисовки */
function serp_archive_dates_render(span_id_prefix, keyword, ekeyword_id, array_index, last_date)
{
	if (array_index < 0) array_index = 0;	
	var datesPreviewSpan = document.getElementById(span_id_prefix + '_preview');
	datesPreviewSpan.style.display = 'none';
	
	var datesDetailedSpan = document.getElementById(span_id_prefix + '_detailed');
	datesDetailedSpan.innerHTML = 'Loading...';
	datesDetailedSpan.style.display = 'inline';
	
	/* проверим, есть ли нужные даты в массиве */
	if (!loadedDates[ekeyword_id]) 
		loadedDates[ekeyword_id] = [last_date];
	if (loadedDates[ekeyword_id].length - array_index >= 4) 
		return draw_archive_dates(span_id_prefix, keyword, ekeyword_id, array_index);

	/* последняя дата, которая есть в массиве */
	last_date = loadedDates[ekeyword_id].length ? loadedDates[ekeyword_id][loadedDates[ekeyword_id].length - 1] : last_date;

	serp_archive_xhr = createXMLHttpRequestObject();
	/* запрашиваем у сервера */
	serp_archive_xhr.onreadystatechange = function()
	{
		if (serp_archive_xhr.readyState != 4) return;
		var data = new String(serp_archive_xhr.responseText);
		var Data; eval(('Data = ' + data));		
		
		if (Data['dates'].length){
			for (var i = Data['dates'].length - 1; i >= 0; i--)
				if (!loadedDates[ekeyword_id].length)
					loadedDates[ekeyword_id].push(Data['dates'][i]);
				else if (loadedDates[ekeyword_id][loadedDates[ekeyword_id].length-1] > Data['dates'][i])
					loadedDates[ekeyword_id].push(Data['dates'][i]);
		}
		draw_archive_dates(span_id_prefix, keyword, ekeyword_id, array_index);
	};

	//var url = '/archive_dates.php?se=google&query='+keyword+'&resperpage=100&date='+month_ago(last_date);
	var url = '/cabinet/serp/archive_dates.php?&ekeyword_id='+ekeyword_id+'&date='+last_date;
	serp_archive_xhr.open('GET', url);
	serp_archive_xhr.send(null);
};

/* функция отрисовки дат из массива, заполненного функцией выше */
function draw_archive_dates(span_id_prefix, keyword, ekeyword_id, array_index)
{
	var datesDetailedSpan = document.getElementById(span_id_prefix + '_detailed');
	
	var inner_html = '';
	for (var i = array_index; i <= array_index + 3; i++)
	{
		if (i < 0) continue;
		if (!loadedDates[ekeyword_id][i]) continue;
		var data_string = loadedDates[ekeyword_id][i];
		var data_elements = data_string.split('-');
		var year = data_elements[0];
		var month = parseInt(data_elements[1], 10); 
		var month_string = monthNames[month-1];
		var day = parseInt(data_elements[2],10);
		/* заполняем поле */
		inner_html = '<a target="searcher_window" href="http://'+location.host+'/cabinet/searcher/?r='+Math.random()+'#google/100/'+encodeURIComponent(keyword)+'/1/'+encodeURIComponent(data_string)+'" title=\'' + data_string + '\'>&nbsp;' + day + '&nbsp;' + month_string + '</a>&nbsp;' + inner_html;
	};
	if (inner_html == '') {
		inner_html = 'no more dates&nbsp;&nbsp;'; /* если поле не заполнилось, значит, дат больше нет (это, конечно, сомнительно, но пишем _быстро_ */
	}
	else inner_html = '<a style="cursor:pointer" onclick="serp_archive_dates_render(\''+backslashQuotes(span_id_prefix)+'\',\''+backslashQuotes(keyword)+'\','+ekeyword_id+','+(parseInt(array_index,10) + 4)+', null);">&laquo;</a>&nbsp;&nbsp;' + inner_html;
	if (array_index > 0) inner_html += '&nbsp;<a style="cursor:pointer" onclick="serp_archive_dates_render(\''+backslashQuotes(span_id_prefix)+'\',\''+backslashQuotes(keyword)+'\','+ekeyword_id+','+(parseInt(array_index,10)-4)+', null);">&raquo;</a>';
	datesDetailedSpan.innerHTML = inner_html;
};
window.moreDatesArray = {};
window.fullserp_data = null;
window.fullserp_checkboxes = [];
window.fullserp_editable = true;

function initNewRow1(newRow, data, not_editable)
{
	/* checkbox */
	window.fullserp_checkboxes.push({'row': newRow, 'checkbox': newRow.cells[1].getElementsByTagName('input')[0], 'ekeyword_id': data['ekeyword_id']});
	
	/* keyword */
	var keywordSpan = newRow.cells[2].getElementsByTagName('span')[0];
	keywordSpan.innerHTML = htmlspecialchars(data['keyword']);
	
	/* free tracking ? */
	var freeTrackingSpan = newRow.cells[2].getElementsByTagName('span')[2];
	if (data['freetracking'])
		freeTrackingSpan.style.display = 'inline';
	else
	{
		freeTrackingSpan.style.display = 'none';
		
		/* deactivated ? */
		var deactivatedSpan = newRow.cells[2].getElementsByTagName('span')[1];
		deactivatedSpan.style.display = data['active'] ? 'none' : 'inline';
	};
	
	/* last date and more dates */
	var hrefs = newRow.cells[3].getElementsByTagName('a');
	var lastDateHref = hrefs[0];
	var moreDatesHref = hrefs[1];
	var spans = newRow.cells[3].getElementsByTagName('span');
	var loadingSpan = spans[0];
	var moreDatesSpan = spans[1];
	if (data['last_date'])
	{
		lastDateHref.innerHTML = htmlspecialchars(data['last_date']);
		lastDateHref.href = '/cabinet/searcher/?r='+Math.random()+'#google/100/'+encodeURIComponent(data['keyword'])+'/1/'+data['last_date'];
	}
	else
	{
		lastDateHref.style.display = 'none';
		moreDatesHref.style.display = 'none';
		loadingSpan.innerHTML = 'No archive dates';
		loadingSpan.style.display = 'inline';
	};
	moreDatesHref.onclick = function(_div,_ekwid, keyword){return function(){ show_more_dates1(_div,_ekwid, keyword); };}(newRow.cells[3], data['ekeyword_id'], data['keyword']);

	/* deletion crosssign */
	var delHref = newRow.cells[4].getElementsByTagName('a')[0];
	var delLoader = newRow.cells[4].getElementsByTagName('img')[0];
	delHref.onclick = function(row, ekwid){return function(){
			if (!window.fullserp_editable) { alert('You are viewing this page in a test mode. Editing keywords is available only to SEO account'); return; };
			row.cells[4].getElementsByTagName('a')[0].style.display = 'none';
			row.cells[4].getElementsByTagName('img')[0].style.display = 'inline';
			$.getJSON('/cabinet/serp/fullserp.php', {'action': 'delkw', 'ekwid': ekwid}, function(data){
					
					/* обычно должно удаляться */
					if (data['result'] != 'ok') return;

					/* удалим строку таблицы */
					window.FullSerp_TableWrapper.deleteRow(row);
					
					/* удалим из данных эту строку */
					for (var i in window.fullserp_data['rows'])
						if (window.fullserp_data['rows'][i]['ekeyword_id'] == ekwid)
							{ window.fullserp_data['rows'].splice(i,1); break; };

					/* удалим соотв. ссылки на чекбокс */
					for (var i in window.fullserp_checkboxes)
					{
						if (window.fullserp_checkboxes[i]['ekeyword_id'] == ekwid)
							{ window.fullserp_checkboxes.splice(i,1); break; };
					};
				});
		};}(newRow, data['ekeyword_id']);
};

function serp_fullserp_draw(data)
{
	var _template = Templates['serp']['fullserp'].begin();
	if (data['error']) { _template.end(data['error']); return; };
	
	/* editable? */
	window.fullserp_editable = data['not_editable'] ? false : true;
	
	/* creating table wrapper */
	if (!window.FullSerp_TableWrapper)
		window.FullSerp_TableWrapper = new CTableWrapper(
			document.getElementById('serp_fullserp_table'),
			{'shown':[0], 'templates':[1,2], 'counter':{'cell':0, 'init':1}, 'ifempty': 'no_keywords'}
			);
	window.FullSerp_TableWrapper.reset();
	window.fullserp_data = data;

	/* init main del checkbox */
	var delCommonCheckbox = window.FullSerp_TableWrapper.Shown['header'].cells[1].getElementsByTagName('input')[0];
	var delCommonCheckboxFunc = function(){ for (var i in window.fullserp_checkboxes) window.fullserp_checkboxes[i]['checkbox'].checked = this.checked; };
	if (detectedBrowserIsIE) delCommonCheckbox.onclick = delCommonCheckboxFunc;
	else delCommonCheckbox.onchange = delCommonCheckboxFunc;

	for (var i in data['rows'])
		initNewRow1(window.FullSerp_TableWrapper.newRow('result'), data['rows'][i]);

	/* init form to add keywords */
	$('#fullserp_add_form').ajaxForm({
		'type': 'POST', 'url':'/cabinet/serp/fullserp.php?action=addkw', 'dataType': 'json', 'data': {},
		'beforeSubmit':function(formData, jForm){
				if (!window.fullserp_editable) { alert('You are viewing this page in a test mode. Editing keywords is available only to SEO account'); return false; }
				var kw = jForm.get(0).keyword.value.replace(/^\s+/,'').replace(/\s+$/, '').replace(/\s{2,}/, ' ');
				jForm.get(0).keyword.value = kw;
				if (!kw) return false;
				for (var i in formData) if (formData[i].name == 'keyword') { formData[i].value = kw; break; };

				jForm.get(0).keyword.disabled = true;
				jForm.get(0).submit.disabled = true;
				document.getElementById('serp_fullserp_loader').style.visibility = 'visible';
			
			},
		'success':function(data, status, xhr, jForm){
				for (var i in data['rows'])
				{
					window.fullserp_data['rows'].push(data['rows'][i]);
					initNewRow1(window.FullSerp_TableWrapper.newRow('result'), data['rows'][i]);
				};

				var errorSpan = document.getElementById('serp_fullserp_addFormMessage');
				if (data['error'])
				{
					errorSpan.innerHTML = htmlspecialchars(data['error']);
					errorSpan.style.visibility = 'visible';
				}
				else	errorSpan.style.visibility = 'hidden';
				
				document.getElementById('serp_fullserp_loader').style.visibility = 'hidden';
				jForm.get(0).keyword.disabled = false;
				jForm.get(0).keyword.value = '';
				jForm.get(0).submit.disabled = false;
			}
		});
	
	var freeAccountNotice = $('#serp_fullserp_freeAccountNotice');
	if (data['not_editable']) freeAccountNotice.css('display', 'inline').find('span:first').html(window.userAccount);
	else freeAccountNotice.hide();
	
	_template.end();
};

function show_more_dates1(_div, _ekwid, keyword)
{
	var div = $(_div);
	div.find('a[name=lastDate],a[name=moreDatesLink]').hide();
	div.find('span[name=Loading]').css('display','inline');

	$.getJSON('/cabinet/serp/fullserp.php', {'action': 'moredates', 'ekwid': _ekwid}, function(data){
			if (!window.moreDatesArray[_ekwid]) window.moreDatesArray[_ekwid] = [];
			for (var i in data['dates']) window.moreDatesArray[_ekwid].push(data['dates'][i]);
			draw_more_dates1(div, _ekwid, keyword, window.moreDatesArray[_ekwid].length - 3);
			div.find('span[name=Loading]').css('display', 'none');
			div.find('span[name=moreDatesSpan]').css('display', 'inline');
		});
};

function draw_more_dates1(_div, _ekwid, keyword, current_index)
{
	var moreDatesLength = 3;
	
	if (!window.moreDatesArray[_ekwid].length) { _div.html('No more dates'); return; };

	/* есть ли предыдущие даты */
	if (current_index > 0)
	{
		var prevDateLink = _div.find('a[name=prevDateLink]');
		prevDateLink.css('display', 'inline');
		prevDateLink.css('visibility', 'visible');
		prevDateLink.get(0).onclick = function(_div, _ekwid, keyword, _idx){return function(){draw_more_dates1(_div, _ekwid, keyword, _idx);};}(_div, _ekwid, keyword, current_index - moreDatesLength);
	}
	else	_div.find('a[name=prevDateLink]').css('display', 'inline').css('visibility', 'hidden');

	/* нарисуем даты */
	for (var i = 0; i < moreDatesLength; i++)
	{
		if (current_index + i < window.moreDatesArray[_ekwid].length && current_index + i >= 0)
		{
			var a = _div.find('a[name=link'+i+']');
			a.css('visibility', 'visible')
			a.css('display', 'inline')
			a.attr('href', '/cabinet/searcher/?r='+Math.random()+'#google/100/'+encodeURIComponent(keyword)+'/1/'+encodeURIComponent(window.moreDatesArray[_ekwid][i+current_index]))
			a.html(htmlspecialchars(window.moreDatesArray[_ekwid][i+current_index])+'&nbsp;&nbsp;');
		}
		else
		{
			_div.find('a[name=link'+i+']')
				.css('display', 'none')
				.css('visibility', 'hidden')
		};
	};

	/* есть ли следующие даты */
	if (current_index + moreDatesLength < window.moreDatesArray[_ekwid].length)
		_div.find('a[name=nextDateLink]')
			.css('display', 'inline')
			.css('visibility', 'visible')
			.get(0).onclick = function(_div, _ekwid, keyword, _idx){return function(){draw_more_dates1(_div, _ekwid, keyword, _idx);};}(_div, _ekwid, keyword, current_index + moreDatesLength);
	else	_div.find('a[name=nextDateLink]').css('display', 'inline').css('visibility', 'hidden');

};

function deleteFullserpKeywords1(form)
{
	if (!window.fullserp_editable) { alert('You are viewing this page in a test mode. Editing keywords is available only to SEO account'); return; };
	
	var ekeywords_todelete = [];
	form.submit.disabled = true;
	for (var i in window.fullserp_checkboxes)
	{
		window.fullserp_checkboxes[i].disabled = true;
		if (!window.fullserp_checkboxes[i]['checkbox'].checked) continue;
		ekeywords_todelete.push(window.fullserp_checkboxes[i]['ekeyword_id']);
		window.fullserp_checkboxes[i]['row'].cells[4].getElementsByTagName('a')[0].style.display = 'none';
		window.fullserp_checkboxes[i]['row'].cells[4].getElementsByTagName('img')[0].style.display = 'inline';
	};
	
	$.getJSON('/cabinet/serp/fullserp.php', {'action': 'delkw', 'ekwid': ekeywords_todelete.join(':')}, function(data){
			
			/* обычно должно удаляться */
			if (data['result'] != 'ok') return;

			/* удалим строки таблицы и соотв. ссылки на чекбоксы */
			var i = 0;
			while (i < window.fullserp_checkboxes.length)
			{
				if (window.fullserp_checkboxes[i]['checkbox'].checked)
				{
					window.FullSerp_TableWrapper.deleteRow(window.fullserp_checkboxes[i]['row']);
					window.fullserp_checkboxes.splice(i,1);
					continue;
				};
				
				window.fullserp_checkboxes[i++]['checkbox'].disabled = false;
			};

			form.submit.disabled = false;
		});
};

