	var PositionTrackingLoadInfo = { 'domain' : '', 'page' : 0, 'sort' : '', 'type' : '', 'engine' : '' , 'force_reload' : true };
	
	function positionTracking_setAjaxBusy(busy)
	{
		if (busy)
		{
			xmlHttpRequester_isBusy = 1;
			document.getElementById('central_busy_sign').style.display = 'inline';
			document.getElementById('central_busy_sign').style.top =  Math.round(screen.height / 2 - 100) + 'px';
			document.getElementById('central_busy_sign').style.left = Math.round(screen.width / 2 - 100) + 'px';
		}
		else
		{
			xmlHttpRequester_isBusy = 0;
			document.getElementById('central_busy_sign').style.display = 'none';
		}
	}
	
	function positionTracking_setAjaxBusy_(tab, busy, show_results)
	{
		var central_busy_sign = document.getElementById('central_busy_sign');
		var div = document.getElementById('tracking_' + tab + '_area');		
		if (busy)
		{
			div.appendChild(central_busy_sign);
			xmlHttpRequester_isBusy = 1;			
			central_busy_sign.style.display = 'inline';			
			document.getElementById('tracking_' + tab + '_resultsDiv').style.display = 'none';
		}
		else
		{
			xmlHttpRequester_isBusy = 0;
			central_busy_sign.style.display = 'none';	
			if(show_results)
				document.getElementById('tracking_' + tab + '_resultsDiv').style.display = '';		
		}
	}
	
	/* is called when tab header is clicked */
	function positionTracking_tabClick(tab, domain, page, sort, type, engine)
	{
		if (tab == 'sites' || tab == 'sites_manager') return Cabinet.open('tracking', 'sites');
		if (tab == 'keywords' || tab == 'keywords_manager') return Cabinet.open('tracking', 'keywords');
		if(typeof index_body_loaded == "undefined" || !index_body_loaded) return;	
				
		$('#tracking_start').css('display',userId?'none':'inline');
		hideLoginForm();
		hideReachedLimit();
		
		document.getElementById('div_cabinet_main').style.display = 'none';
		document.getElementById('div_cabinet_content').style.display = '';
		document.getElementById('div_cabinet_content').className = 'cabinet_content';	
	
		document.getElementById('path_firstLevelTabID').innerHTML = '&nbsp;&raquo;&nbsp;Position&nbsp;tracking';        /* path */
		document.title = 'Position Tracking '+String.fromCharCode(0x2013)+' Tracking results '+String.fromCharCode(0x2014)+' SERP Analytics';
		
		document.getElementById('tracking_firstLevelTab').className = 'active';
		document.getElementById('additional_firstLevelTab').className = '';
		
		document.getElementById('path_secondLevelTabID').innerHTML = '&nbsp;&raquo;&nbsp;Tracking results'; /* path */
		document.getElementById('additional_searchAreaId').style.display = 'none';                 /* hide other blocks */
		document.getElementById('competitor_searchAreaId').style.display = 'none';                 /* hide other blocks */
		document.getElementById('keyword_searchAreaId').style.display = 'none';    
		document.getElementById('serp_searchAreaId').style.display = 'none';
		document.getElementById('pricing_searchAreaId').style.display = 'none';
		document.getElementById('subscribe_searchAreaId').style.display = 'none';
		document.getElementById('account_searchAreaId').style.display = 'none';
		document.getElementById('tracking_searchAreaId').style.display = 'inline';            /* show required block */
				
		/* current input parameters */
		domain = domain ? domain : PositionTrackingLoadInfo['domain']; 		
		page = page ? page : PositionTrackingLoadInfo['page'] ? PositionTrackingLoadInfo['page'] : 1;
		sort = sort ? sort : PositionTrackingLoadInfo['sort'] ? PositionTrackingLoadInfo['sort'] : '';
		
		var breadcrumbs_domain = domain.split(/:/, 2);
		breadcrumbs_domain = breadcrumbs_domain.length > 1 ? breadcrumbs_domain[1] : domain;
		if(domain) document.getElementById('path_formEntryID').innerHTML = '&nbsp;&raquo;&nbsp;' + htmlspecialchars(breadcrumbs_domain);
		else document.getElementById('path_formEntryID').innerHTML = '';
		
		/* get the url to load the report */
		type = (typeof(type) != "undefined") ? type : PositionTrackingLoadInfo['type'];
		engine = (typeof(engine) != "undefined") ? engine : PositionTrackingLoadInfo['engine'];
		
		var url = '/cabinet/tracking/results.php?site=__domain__&type=__type__&sort=__sort__&engine=__engine__&n_page=__page__&now=__now__'
				.replace('__domain__', encodeURIComponent(domain))
				.replace('__page__', encodeURIComponent(page))
				.replace('__sort__', encodeURIComponent(sort))
				.replace('__type__', encodeURIComponent(type))
				.replace('__engine__', encodeURIComponent(engine))
				.replace('__now__', encodeURIComponent((new Date()).toString()))
		
		/* shows specified tab */
		if (!window.tracking_sitesTabHeader) window.tracking_sitesTabHeader = $('#tracking_sites_header');
		if (!window.tracking_keywordsTabHeader) window.tracking_keywordsTabHeader = $('#tracking_keywords_header');
		if (!window.tracking_resultsTabHeader) window.tracking_resultsTabHeader = $('#tracking_tracking_results_header');
		window.tracking_sitesTabHeader.removeClass('active_tab_header');
		window.tracking_keywordsTabHeader.removeClass('active_tab_header');
		window.tracking_resultsTabHeader.addClass('active_tab_header');
		document.getElementById('tracking_sites_area').style.display = 'none';
		document.getElementById('tracking_keywords_area').style.display = 'none';
		document.getElementById('tracking_tracking_results_area').style.display = 'inline';

		/* get the beginning of the page */
		window.scroll(0, 0);

		/* check if we really need to reload the report selected (may be we already loaded it) */	
		if(!PositionTrackingLoadInfo['force_reload'] && tab == 'tracking_results' && PositionTrackingLoadInfo['domain'] == domain && PositionTrackingLoadInfo['page'] == page
			&& PositionTrackingLoadInfo['sort'] == sort && PositionTrackingLoadInfo['type'] == type && PositionTrackingLoadInfo['engine'] == engine) return false;
				
		PositionTrackingLoadInfo['force_reload'] = false;
		window.location.replace('#tracking/' + encodeURIComponent(domain) + '/' + tab + '/' + sort + '/' + page + '/' + type+ '/' + engine);
		//if (xmlHttpRequester_isBusy) { alert('Previous request is not done yet'); return false; };

		xmlHttpRequester = createXMLHttpRequestObject(); // needed for IE. Who knows why?
						
		/* processing the response */
		var _queryDurationBegin = (new Date()).getTime()/1000;
		xmlHttpRequester.onreadystatechange = function()
		{
			if (xmlHttpRequester.readyState != 4) return;
		
			var _queryDurationEnd = (new Date()).getTime()/1000;
			$.get('/duration_logger.php?menu=tracking&tab='+tab+'&subject='+encodeURIComponent(domain)+'&page='+page+'&sort='+sort+'&duration='+(_queryDurationEnd - _queryDurationBegin));
			
			xmlDoc = xmlHttpRequester.responseXML; 
			if(xmlDoc)
			{
				document.getElementById('tracking_tracking_results_resultsDiv').innerHTML = xmlDoc.getElementsByTagName("html")[0].childNodes[0].nodeValue;
				eval('positionTracking_trackingResults_hint_data = ' + xmlDoc.getElementsByTagName("hint_data")[0].childNodes[0].nodeValue);
				eval('positionTracking_trackingResults_chart_data = ' + xmlDoc.getElementsByTagName("chart_data")[0].childNodes[0].nodeValue);
				if(positionTracking_trackingResults_hint_data['error_code'] == 'not_logged_in')
				{
					$('#tracking_results_errorDiv').css('display','inline').find('.errorString').html('This page requires authentication');
					showLoginForm('tracking', tab);
					show_results = false;
					PositionTrackingLoadInfo['force_reload'] = true;
				}
				else
				{
					positionTracking_trackingResults_draw('');
					PositionTrackingLoadInfo['domain'] = domain;
					PositionTrackingLoadInfo['page']   = page;
					PositionTrackingLoadInfo['sort']   = sort;						
					PositionTrackingLoadInfo['type']   = type;
					PositionTrackingLoadInfo['engine'] = engine;
					show_results = true;
				}
			}
			document.getElementById('tracking_'+tab+'_TabLink').href = '#tracking//'+tab+'//';
			positionTracking_setAjaxBusy_(tab,0,show_results);
			
		};
		/* send data */
		positionTracking_setAjaxBusy_(tab,1);
		xmlHttpRequester.open('GET', url, true);
		xmlHttpRequester.send(null);
		Cabinet.History.add({'menu': 'tracking', 'tab': 'tracking_results', 'subject': domain});
	};

//------------------------------
// common JS functions for my_sites, my_keywords
//-------------------------------

// check a group of checkboxes
function check_all(th, site){			
	var fe=th.form.elements;			
	var i;
	for(i=0;i<fe.length;i++){
		var c=fe[i];
		if(c.type=='checkbox' && c.name.substr(0,site.length)==site)
			c.checked=th.checked;
	}
}
(new Image()).src='/img/delete-loader.gif';

//conpoll_init(40,500);
function tracking_sites_draw(data, current, duration)
{
	if (window.TrackingSites_is_loaded) return;
	window.TrackingSites_is_loaded = true;
	
	TrackingManager.init(data)
	TrackingManager.draw();
	TrackingManager.data['total_duration'] = duration;
	return;
	
	if (!data['Site'].length)
	{
		$('#tracking_start').show().css('z-index','1'); /* show start block */
		copyTableRow(table, table.rows[6]);             /* show empty line in table */
		table.rows[table.rows.length-1].style.display='';
	}
	else $('#tracking_start').hide().css('z-index','0');    /* hide start block */
	
	
}


function CMSite(SitesGroup)
{
	/* hierarchy */
	this.SitesGroup = SitesGroup;
	this.Group = this.SitesGroup.Group;
	this.Manager = this.Group.Manager;
	
	this.GroupviewRow = null;
	this.SitesviewRow = null;
	
	this.init = function(data)
	{
		this.id = data['id'];
		this.group_id = data['group_id'];
		this.data = data;
		return this;
	};

	this.draw = function()
	{
		var _this = this;
		
		var not_active = (this.data['active'] != 't');
		var gen_reports = (this.data['has_stats'] == 'f');
		var no_stats    = !parseInt(this.data['up']) && !parseInt(this.data['down']) && !parseInt(this.data['eq']) && !parseInt(this.data['found']) && !parseInt(this.data['lost']);
		
		/* creating new rows */
		//var rowname = not_active ? 'deactivated' : gen_reports ? 'generating' : no_stats ? 'empty_stat' : 'stats';
		var rowname = not_active ? 'deactivated' : gen_reports ? 'empty_stat' : no_stats ? 'empty_stat' : 'stats';
		
		this.GroupviewRow = this.SitesGroup.TableWrapper.newRow(rowname);
		this.GroupviewRow.id = 'tracking_groups_siterow_'+this.id;
		
		this.SitesviewRow = this.Manager.SitesTableWrapper.newRow(rowname);
		this.SitesviewRow.id = 'tracking_sites_siterow_'+this.id;
		
		/* deletion checkboxes */
		this.gDelBox = this.GroupviewRow.cells[1].getElementsByTagName('input')[0];
		this.gDelBox.checked = false;
		this.sDelBox = this.SitesviewRow.cells[1].getElementsByTagName('input')[0];
		this.sDelBox.checked = false;
		
		this.gDelBox.onchange = function(){ _this.sDelBox.checked = _this.gDelBox.checked; };
		this.sDelBox.onchange = function(){ _this.gDelBox.checked = _this.sDelBox.checked; };
		
		this.delBoxes = $([this.gDelBox,this.sDelBox]);
		
		
		/* domain */
		var domainSpan1 = this.GroupviewRow.cells[2].getElementsByTagName('span')[0];
		domainSpan1.innerHTML = htmlspecialchars(this.data['domain']);
		
		var domainSpan2 = this.SitesviewRow.cells[2].getElementsByTagName('span')[0];
		domainSpan2.innerHTML = htmlspecialchars(this.data['domain']);
		
		Hints['tracking']['domainHint'].setFor($([domainSpan1,domainSpan2]), {'subject': ('Site: '+this.data['domain']), 'clicks': this.data['clicks'], 'rank': this.data['rank'], 'top1count': this.data['top1count'], 'top3count': this.data['top3count'], 'top5count': this.data['top5count'], 'top10count': this.data['top10count'], 'total_count': this.data['total_count']});
		
		
		/* keywords count */
		this.KwCountSpan = $(this.SitesviewRow.cells[3].getElementsByTagName('a')[0])
			.attr('href', '#tracking//keywords//')
			.html('')
			.click(function(){_this.Manager.selectKeywordGroup(_this.Group.id); Cabinet.open('tracking','keywords');})
			.hover(function(e){_this.Group.KeywordsGroup.showHint(e);}, function(e){_this.Group.KeywordsGroup.hideHint();});
		
		
		var cell_iterator = 5;
		
		if (!not_active && !gen_reports && !no_stats)
		{
			var domain = this.data['domain'];
			
			/* up */
			var link1 = $([this.GroupviewRow.cells[3],this.SitesviewRow.cells[4]]).find('a')
				.attr('href', '#tracking/'+this.Group.id+':'+encodeURIComponent(domain)+'/tracking_results///up/')
				.attr('title', function(index,attr){return attr.replace('__n__',_this.data['up']);})
				.click(function(d){return function(){positionTracking_tabClick('tracking_results',d,1,'','up','');return false;};}(this.Group.id+':'+domain));
			link1.find('span:eq(0)').html(htmlspecialchars(this.data['up']));
			link1.find('span:eq(1)').attr('title', function(index,attr){return attr.replace('__n__',_this.data['up']);});
			
			/* down */
			var link2 = $([this.GroupviewRow.cells[4],this.SitesviewRow.cells[5]]).find('a')
				.attr('href', '#tracking/'+this.Group.id+':'+encodeURIComponent(domain)+'/tracking_results///down/')
				.attr('title', function(index,attr){return attr.replace('__n__',_this.data['down']);})
				.click(function(d){return function(){positionTracking_tabClick('tracking_results',d,1,'','down','');return false;};}(this.Group.id+':'+domain));
			link2.find('span:eq(0)').html(htmlspecialchars(this.data['down']));
			link2.find('span:eq(1)').attr('title', function(index,attr){return attr.replace('__n__',_this.data['down']);});
			
			/* eq */
			var link3 = $([this.GroupviewRow.cells[5],this.SitesviewRow.cells[6]]).find('a')
				.attr('href', '#tracking/'+this.Group.id+':'+encodeURIComponent(domain)+'/tracking_results///eq/')
				.attr('title', function(index,attr){return attr.replace('__n__',_this.data['eq']);})
				.click(function(d){return function(){positionTracking_tabClick('tracking_results',d,1,'','eq','');return false;};}(this.Group.id+':'+domain));
			link3.find('span:eq(0)').html(htmlspecialchars(this.data['eq']));
			link3.find('span:eq(1)').attr('title', function(index,attr){return attr.replace('__n__',_this.data['eq']);});
			
			/* found */
			var link4 = $([this.GroupviewRow.cells[6],this.SitesviewRow.cells[7]]).find('a')
				.attr('href', '#tracking/'+this.Group.id+':'+encodeURIComponent(domain)+'/tracking_results///found/')
				.attr('title', function(index,attr){return attr.replace('__n__',_this.data['found']);})
				.click(function(d){return function(){positionTracking_tabClick('tracking_results',d,1,'','found','');return false;};}(this.Group.id+':'+domain));
			link4.find('span:eq(0)').html(htmlspecialchars(this.data['found']));
			link4.find('span:eq(1)').attr('title', function(index,attr){return attr.replace('__n__',_this.data['found']);});
			
			/* lost */
			var link5 = $([this.GroupviewRow.cells[7],this.SitesviewRow.cells[8]]).find('a')
				.attr('href', '#tracking/'+this.Group.id+':'+encodeURIComponent(domain)+'/tracking_results///lost/')
				.attr('title', function(index,attr){return attr.replace('__n__',_this.data['lost']);})
				.click(function(d){return function(){positionTracking_tabClick('tracking_results',d,1,'','lost','');return false;};}(this.Group.id+':'+domain));
			link5.find('span:eq(0)').html(htmlspecialchars(this.data['lost']));
			link5.find('span:eq(1)').attr('title', function(index,attr){return attr.replace('__n__',_this.data['lost']);});
			
			/* all stats link */
			$([this.GroupviewRow.cells[8],this.SitesviewRow.cells[9]]).find('a')
				.attr('href', '#tracking/'+this.Group.id+':'+encodeURIComponent(domain)+'/tracking_results////')
				.click(function(d){return function(){positionTracking_tabClick('tracking_results',d,1,'','','');return false;};}(this.Group.id+':'+domain));
				
			cell_iterator = 10;
		};
		
		/* traffic */
		this.GroupviewRow.cells[cell_iterator-1].innerHTML = htmlspecialchars(this.data['clicks'] != 'N/A' ? formatNumber(this.data['clicks']): this.data['clicks']);
		this.SitesviewRow.cells[cell_iterator].innerHTML = htmlspecialchars(this.data['clicks'] != 'N/A' ? formatNumber(this.data['clicks']): this.data['clicks']);
		cell_iterator++;
		
		/* rank */
		this.GroupviewRow.cells[cell_iterator-1].innerHTML = htmlspecialchars(this.data['rank'] != 'N/A' ? '$' + formatNumber(this.data['rank']) : this.data['rank']);
		this.SitesviewRow.cells[cell_iterator].innerHTML = htmlspecialchars(this.data['rank'] != 'N/A' ? '$' + formatNumber(this.data['rank']) : this.data['rank']);
		cell_iterator++;
		
		var _this = this;
		
		/* deletion crosssigns */
		this.delLoaders = $([this.GroupviewRow.cells[cell_iterator-1],this.SitesviewRow.cells[cell_iterator]]).find('img:eq(1)');
		this.delLinks = $([this.GroupviewRow.cells[cell_iterator-1],this.SitesviewRow.cells[cell_iterator]]).find('a:first')
			.click(function(){_this.Group.deleteSite(_this.id);});
	};

	this.setKeywordsCount = function(count)
	{
		this.KwCountSpan.html(count);
	};
	
	this.undraw = function()
	{
		this.SitesGroup.TableWrapper.deleteRow(this.GroupviewRow);
		this.Manager.SitesTableWrapper.deleteRow(this.SitesviewRow);
	};
};
function CMKeyword(KeywordsGroup)
{
	this.KeywordsGroup = KeywordsGroup;
	this.Group = this.KeywordsGroup.Group;
	this.Manager =this.Group.Manager;
	
	this.Row = null;
	
	this.init = function(data)
	{
		this.id = data['id'];
		this.group_id = data['group_id'];
		this.data = data;
		return this;
	};
	
	this.draw = function()
	{
		var _this = this;
		
		this.Row = this.KeywordsGroup.TableWrapper.newRow('keyword');
		this.Row.id = 'tracking_keywords_kwrow_'+this.id;
		
		this.delBox = this.Row.cells[1].getElementsByTagName('input')[0];
		this.delBox.checked = false;
		
		var fullserp_link = this.Row.cells[2].getElementsByTagName('a')[0];
		if (parseInt(this.data['fullserp'],10))
		{
			fullserp_link.href = '/cabinet/searcher/?r='+Math.random()+'#google/100/'+encodeURIComponent(this.data['keyword'])+'/1/now';
			fullserp_link.style.display = 'inline';
		}
		else	fullserp_link.style.display = 'none';
		
		this.Row.cells[3].getElementsByTagName('span')[0].innerHTML =
			this.data['engine'] == 'google' ? 'Google' :
			this.data['engine'] == 'bing'   ? 'Y! &amp; Bing' :
			'?';
		
		this.Row.cells[4].getElementsByTagName('span')[0].innerHTML = htmlspecialchars(this.data['keyword']);

		if (!this.data['active'] || this.data['active'] != 't')
			this.Row.cells[4].getElementsByTagName('span')[1].style.display = 'inline';

		this.Row.cells[5].innerHTML = htmlspecialchars(this.data['avg_cpc'] != '0' ? '$'+this.data['avg_cpc'] : 'N/A');
		this.Row.cells[6].innerHTML = htmlspecialchars(this.data['exact_search_volume'] != '0' ? formatNumber(this.data['exact_search_volume']) : 'N/A');
		
		this.Row.cells[7].getElementsByTagName('span')[0].innerHTML = htmlspecialchars(this.data['last_processed'] == '1999-01-01 00:00:00' ? 'never' : this.data['last_processed']);
		
		var _cell = $(this.Row.cells[8]);
		this.delLink = _cell.find('a:first').click(function(){_this.Group.deleteKeyword(_this.id);});
		this.delLoader = _cell.find('img:eq(1)');

		//this.HintRow = this.KeywordsGroup.HintTableWrapper.newRow('keyword');
		//this.HintRow.id = 'tracking_keywords_hkwrow_'+this.id;
		//this.HintRow.cells[1].innerHTML = htmlspecialchars(this.data['keyword']);
	};
	
	this.undraw = function()
	{
		this.KeywordsGroup.TableWrapper.deleteRow(this.Row);
	};
};
function CMSitesGroup(Group)
{
	this.className = 'CMSitesGroup';
	
	this.Group = Group;
	this.Manager = Group.Manager;
	
	this.data = null;
	this.id = null;

	/* forms */
	this.addGroupForms = null;

	this.Div = null;
	this.NameSpan = null;
	this.TableWrapper = null;
	this.SitesRows = {};

	/* data related */
	this.keywordsCount = 0;
	this.sitesCount = 0;

	this.Sites = {};

	/* stats */
	this.clicks = 0;
	this.rank = 0;


	this.init = function(data)
	{
		this.id = data['id'];
		this.name = data['name'];
		this.sites = data['sites'];
		this.data = data;
		
		/* Div for group */
		this.Div = this.Manager.SitesGroupTemplate.clone().show().appendTo(this.Manager.SitesGroupPlace);
		
		/* header spans */
		var _this = this;
		this.KwCountSpan = this.Div.find("table:first a[name=KeywordsCount]");
		this.KwCountSpan.hover(function(e){ _this.Group.KeywordsGroup.showHint(e); }, function(e){ _this.Group.KeywordsGroup.hideHint(); });
		this.KwCountSpan.attr('href','#tracking//keywords//1');
		this.KwCountSpan.click(function(){ _this.Group.KeywordsGroup.hideHint(); Cabinet.open('tracking','keywords'); _this.Manager.selectKeywordGroup(_this.id); });
		this.delBox = this.Div.find("table:first input[name=DelBox]:checkbox").get(0);
		var delBoxChangeFunc = function(){ for (var i in _this.Sites) _this.Sites[i].gDelBox.checked = _this.Sites[i].sDelBox.checked = this.checked; };
		if (detectedBrowserIsIE) this.delBox.onclick = delBoxChangeFunc;
		else this.delBox.onchange = delBoxChangeFunc;
		
		/* table for group */
		this.TableWrapper = new CTableWrapper(this.Div.find('table:eq(1)').get(0), {'shown':[5],'templates':[0,1,2,3,4],'counter':{'cell':0,'init':1}});
		
		/* init sites */
		for (var i in this.sites)
		{
			var Site = new CMSite(this);
			Site.init(this.sites[i]);
			this.Sites[i] = Site;
		};

		/* init form to add new site into group */
		var _this = this;
		this.newSiteRow = $(this.TableWrapper.Shown['new_site']);
		var newSiteForm = this.newSiteRow.css('display','').find('form');
		this.newSiteFormInputs = newSiteForm.find('input');
		newSiteForm.ajaxForm({
			'type':'POST','url':Cabinet.Menus['tracking'].Tabs['sites'].structure['url'],'dataType':'json','data':{'action':'addsite','group':data['id']},
			'beforeSubmit':function(formData,jForm){
				/* check if input data is a valid domain name */
				_this.WarnSpan.hide(); _this.ErrorSpan.hide();
				for (var i in formData) if (formData[i]['name'] == 'domain')
				{
					formData[i]['value'] = trim(formData[i]['value']).toLowerCase().replace(/^\w+:\/\//,'').replace(/\/.*$/,'');
					if (!formData[i]['value'].match(/^(\w+(\-\w+)*\.)+[a-z]{2,}$/))
					{
						_this.ErrorSpan.html('Record you are trying to add is not a valid domain name').css('display','inline');
						return false;
					};
					break;
				};
				/* disabling input elements and sending data */
				_this.newSiteFormInputs.attr('disabled','disabled');
				if (!_this.AddSiteLoader) _this.AddSiteLoader = jForm.find("img[name='AddSiteLoader']");
				_this.AddSiteLoader.css('visibility','visible');
			},
			'success':function(data,status,xhr,jForm){
					if (data['result'] == 'ok' && data['site'])
					{
						_this.data['sites'][data['site']['id']] = data['site'];
						var Site = new CMSite(_this);
						Site.init(data['site']);
						_this.Sites[data['site']['id']] = Site;
						Site.draw();
						Site.setKeywordsCount(_this.Group.keywordsCount);

						_this.Group.sitesCount++;
						_this.Group.KeywordsGroup.setName();

						_this.Manager.redrawSuggestionSites();
						
						var table_length = _this.TableWrapper.length() + 1;
						_this.TableWrapper.Shown['new_site'].cells[0].innerHTML = table_length + '.';
						_this.TableWrapper.Shown['new_site'].className = 'row'+(table_length%2);
						jForm.clearForm();
						
						_this.WarnSpan.html('Tracking results for just added site will be available in 24 hours').css('display','inline');
						_this.ErrorSpan.hide();
					}
					else if (data['error'])
					{
						_this.WarnSpan.hide();
						_this.ErrorSpan.html(data['error']).css('display','inline');
					}
					else
					{
						_this.WarnSpan.hide();
						_this.ErrorSpan.html('Unknown server response').css('display','inline');
					};
					_this.newSiteFormInputs.removeAttr('disabled');
					_this.AddSiteLoader.css('visibility','hidden');
					_this.Manager.setTotalSites();
				}
			});
		this.ErrorSpan = this.newSiteRow.find("span[name='ErrorString']:first");
		this.WarnSpan = this.newSiteRow.find("span[name='WarnString']:first");

		/* init changing group name */
		this.NameSpan = this.Div.find("table:first span[name='GroupName']:first");
		this.NameEditSpan = this.Div.find("table:first span[name='EditLink']:first");
		this.NameLoaderSpan = this.Div.find("table:first img[name='EditLoader']:first");
		
		this.NameEditSpan.get(0).onclick = function(){
				var newName = window.prompt('New group name', _this.name); if (!newName || newName == _this.name) return;
				_this.NameEditSpan.hide();
				_this.NameLoaderSpan.css('display','inline');
				$.post(Cabinet.Menus['tracking'].Tabs['sites'].structure['url'],{'action':'changegroupname','group':_this.id,'name':newName},function(data){
						if (data['result'] == 'ok') _this.Group.setName(newName);
						_this.NameLoaderSpan.hide();
						_this.NameEditSpan.show();
					}, 'json');
			};
		
		/* init group deletion */
		this.DelGroupSpan = this.Div.find("table:first span[name='DelLink']:first");
		this.DelGroupLoader = this.Div.find("table:first img[name='DelLoader']:first");

		this.DelGroupSpan.get(0).onclick = function(){
				if (!window.confirm('Do you really want to delete group "'+_this.Group.name+'" with all sites and keywords?')) return;
				_this.DelGroupSpan.hide();
				_this.DelGroupLoader.css('display','inline');
				PositionTrackingLoadInfo['force_reload'] = true;
				
				$.post(Cabinet.Menus['tracking'].Tabs['sites'].structure['url'],{'action':'delgroup','group':_this.id},function(data){
					if (data['result'] == 'ok')
						_this.Manager.deleteGroup(_this.id);
				}, 'json');
			};
	};

	this.draw = function()
	{
		/* draw sites */
			/* сказали сортировать по порядку */
			var sortedKeys = []; for (var i in this.Sites) sortedKeys.push(i);
			sortedKeys = sortedKeys.sort(function(s){ return function(a,b){ return s[a].data['order'] - s[b].data['order']; }; }(this.Sites));
		for (var i = 0; i < sortedKeys.length; i++)
			this.Sites[sortedKeys[i]].draw();

		/* draw sum traffic and rank for group */
		this.setStat();
			
		/* draw group name */
		this.setName(this.name);

		/* draw group's keywords count */
		this.setKeywordsCount(this.Group.keywordsCount);
		
		/* для группы сайтов задаём цвет и номер последней строки */
		var table_length = this.TableWrapper.length()+1;
		this.TableWrapper.Shown['new_site'].cells[0].innerHTML = table_length + '.';
		this.TableWrapper.Shown['new_site'].className = 'row'+(table_length%2);
	};

	this.setStat = function()
	{
		var clicks = 0;
		var rank = 0;

		var up = 0; var down = 0; var eq = 0; var found = 0; var lost = 0;
		var top1count = 0; var top3count = 0; var top5count = 0; var top10count = 0; var total_count = 0;
		
		for (var i in this.Sites)
		{
			clicks += parseFloat(this.Sites[i].data['clicks']);
			rank += parseFloat(this.Sites[i].data['rank']);

			up += parseFloat(this.Sites[i].data['up']);
			down += parseFloat(this.Sites[i].data['down']);
			eq += parseFloat(this.Sites[i].data['eq']);
			found += parseFloat(this.Sites[i].data['found']);
			lost += parseFloat(this.Sites[i].data['lost']);

			top1count += parseFloat(this.Sites[i].data['top1count']);
			top3count += parseFloat(this.Sites[i].data['top3count']);
			top5count += parseFloat(this.Sites[i].data['top5count']);
			top10count += parseFloat(this.Sites[i].data['top10count']);
			total_count += parseFloat(this.Sites[i].data['total_count']);
		};
		
		if (!this.clicksSpan) this.clicksSpan = this.Div.find("table:first span[name=group_clicks]");
		if (!this.rankSpan) this.rankSpan = this.Div.find('table:first span[name=group_rank]');
		
		if (!this.upSpan) this.upSpan = this.Div.find('table:first span[name=group_up]')
		if (!this.downSpan) this.downSpan = this.Div.find('table:first span[name=group_down]')
		if (!this.eqSpan) this.eqSpan = this.Div.find('table:first span[name=group_eq]')
		if (!this.foundSpan) this.foundSpan = this.Div.find('table:first span[name=group_found]')
		if (!this.lostSpan) this.lostSpan = this.Div.find('table:first span[name=group_lost]')
		

		this.clicksSpan.html(htmlspecialchars(formatNumber(clicks)));
		this.rankSpan.html(htmlspecialchars(formatNumber(rank)));

		this.upSpan.html(up);
		this.downSpan.html(down);
		this.eqSpan.html(eq);
		this.foundSpan.html(found);
		this.lostSpan.html(lost);
		
		
		/* если ещё не создали структуру, создадим */
		if (!this.statData)
		{
			this.statData = {};
			Hints['tracking']['domainHint'].setFor(this.NameSpan, this.statData);
		};
		
		/* заполним (или изменим, если ф-я вызвана повторно) эту структуру */
		this.statData['subject'] = 'Group: '+this.name;
		this.statData['clicks'] = clicks;
		this.statData['rank'] = rank;
		this.statData['top1count'] = top1count;
		this.statData['top3count'] = top3count;
		this.statData['top5count'] = top5count;
		this.statData['top10count'] = top10count;
		this.statData['total_count'] = total_count;
	};

	this.undraw = function()
	{
		for (var i in this.Sites) this.Sites[i].undraw();
		this.Div.remove();
	};
	
	
	this.setName = function(name)
	{
		this.name = name.toString();;
		this.NameSpan.html(htmlspecialchars(name.length > 16 ? name.substr(0,12)+'...' : name)); // 20-18
		//this.NameSpan.attr('title',name);
	};
	
	this.setKeywordsCount = function(count)
	{
		this.keywordsCount = count;
		
		/* для группы в groupview */
		this.KwCountSpan.html(count);

		/* для сайтов в sitesview */
		for (var i in this.Sites)
			this.Sites[i].setKeywordsCount(count);
	};
	
	this.recountSites = function()
	{
		this.sitesCount = this.size();
		return this.sitesCount;
	};

	this.size = function()
	{
		var count = 0;
		for (var i in this.Sites) count++;
		return count;
	};
};
function CMKeywordsGroup(Group)
{
	this.className = 'CMKeywordsGroup';
	
	this.Group = Group;
	this.Manager = Group.Manager;

	this.Keywords = {};
	
	this.data = null;
	this.id = null;

	this.isDrawn = false;
	
	this.init = function(data)
	{
		this.id = data['id'];
		this.name = data['name'];
		this.keywords = data['keywords'];
		this.data = data;
		
		/* Div for group */
		this.Div = this.Manager.KeywordsGroupTemplate.clone().hide().appendTo(this.Manager.KeywordsGroupPlace);
		this.TableWrapper = new CTableWrapper(
			this.Div.find('table:first').get(0),
			{'shown':[0],'templates':[1,2,3], 'counter':{'cell':0,'init':1}, 'ifempty':'no_keywords'}
			);
		this.HintDiv = this.Manager.KeywordsHintGroupTemplate.clone().hide().appendTo(this.Manager.KeywordsHintGroupPlace);
		this.HintTableWrapper = new CTableWrapper(
			this.HintDiv.find('table:first').get(0),
			{'shown':[0,3],'templates':[1,2], 'counter':{'cell':0,'init':1}, 'ifempty':'no_keywords'}
			);
		this.HintGroupName = $(this.HintTableWrapper.Shown['header']).find("span[name='GroupName']");
		var _this = this;

		/* main deletion checkbox */
		this.delBox = this.TableWrapper.Shown['header1'].cells[1].getElementsByTagName('input')[0];
		var delBoxFunc = function(){ for (var i in _this.Keywords) _this.Keywords[i].delBox.checked = this.checked; };
		if (detectedBrowserIsIE) this.delBox.onclick = delBoxFunc;
		else this.delBox.onchange = delBoxFunc;
		
		/* create dropdown option for the group */
		this.ListOption = document.createElement('option');
		this.ListOption.setAttribute('value', this.id);
		this.setName(this.name, this.Group.SitesGroup.size(), this.size());
		this.Manager.GroupsList.appendChild(this.ListOption);

		/* init keywords */
		for (var i in this.keywords)
		{
			var Keyword = new CMKeyword(this);
			Keyword.init(this.keywords[i]);
			this.Keywords[this.keywords[i]['id']] = Keyword;
		};
	};
	
	this.size = function()
	{
		var count = 0;
		for (var i in this.keywords) count++;
		return count;
	};
	
	this.draw = function()
	{
		/* сказали сортировать по порядку */
		var sortedKeys = []; for (var i in this.Keywords) sortedKeys.push(i);
		sortedKeys = sortedKeys.sort(function(k){ return function(a,b){ return k[a].data['order'] - k[b].data['order']; }; }(this.Keywords));
		
		for (var i = 0; i < sortedKeys.length; i++)
			this.Keywords[sortedKeys[i]].draw();

		this.redrawHint();
	};

	this.undraw = function()
	{
		$(this.ListOption).remove();
		$(this.HintTableWrapper).remove();
		if (!this.isDrawn) return;
		for (var i in this.Keywords) this.Keywords[i].undraw();
		this.Div.remove();
	};

	this.show = function()
	{
		if (!this.isDrawn) { this.isDrawn = true; this.draw(); };
		this.Div.css('display','inline');
	};

	this.hide = function()
	{
		this.Div.hide();
	};

	this.setName = function(name, sitesCount, keywordsCount)
	{
		if (!name) name = this.name;
		this.name = name.toString();
		if (!sitesCount) sitesCount = this.Group.sitesCount;
		if (!keywordsCount) keywordsCount = this.size();
		var name_cutten = name.length>25?name.substr(0,23)+'...':name;
		this.ListOption.innerHTML = htmlspecialchars(name_cutten)+' ('+sitesCount+' sites, '+keywordsCount+' keywords)';
		this.HintGroupName.html(htmlspecialchars(name_cutten));
	};

	this.redrawHint = function()
	{
		this.HintTableWrapper.reset();
		
		var counter = 0;
		for (var i in this.Keywords)
		{
			counter++;
			if (counter > 10) break;
			var hintRow = this.HintTableWrapper.newRow('keyword');
			hintRow.id = 'tracking_keywords_hkwrow_' + this.Keywords[i].id;
			hintRow.cells[1].innerHTML = htmlspecialchars(this.Keywords[i].data['keyword']);
		};
		
		/* показываем первые десять строк */
		//for (var i = 4; i < this.HintTableWrapper.o.rows.length - 1; i++)
		//	this.HintTableWrapper.o.rows[i].style.display = (i < 13) ? '' : 'none';
		this.HintTableWrapper.Shown['and_so_on'].style.display = counter > 10 ? '' : 'none';
	};
	
	this.showHint = function(e)
	{
		set_span_position(e, this.HintDiv.show().get(0));
	};

	this.hideHint = function()
	{
		this.HintDiv.hide();
	};
};
function CMGroup(Manager)
{
	this.Manager = Manager;
	this.data = null;
	this.id = null;

	this.keywordsCount = 0;
	this.sitesCount = 0;
	
	this.init = function(data)
	{
		this.id = data['id'];
		this.name = data['name'];
		this.sites = data['sites'];
		this.keywords = data['keywords'];
		this.data = data;
		
		this.SitesGroup = new CMSitesGroup(this);
		this.SitesGroup.init(data);
		
		this.KeywordsGroup = new CMKeywordsGroup(this);
		this.KeywordsGroup.init(data);

		this.keywordsCount = this.KeywordsGroup.size();
		this.sitesCount = this.SitesGroup.size();
	};
	
	this.draw = function()
	{
		this.SitesGroup.draw();

		/* будем отрисовывать группы кивордов по мере необходимости */
		//this.KeywordsGroup.draw(); /* 
		this.KeywordsGroup.redrawHint();
		
		this.sitesCount = this.SitesGroup.size();
		this.keywordsCount = this.KeywordsGroup.size();
	};

	this.deleteSite = function(id)
	{
		this.SitesGroup.Sites[id].gDelBox.disabled = true;
		this.SitesGroup.Sites[id].sDelBox.disabled = true;
		this.SitesGroup.Sites[id].delLinks.hide();
		this.SitesGroup.Sites[id].delLoaders.css('display','inline');
		
		PositionTrackingLoadInfo['force_reload'] = true;
		var _this = this;
		$.post(Cabinet.Menus['tracking'].Tabs['sites'].structure['url'],{'action':'delsite','sites':id},function(data){
				if (data['result'] == 'ok')
				{
					/* удаляем сайт */
					_this.SitesGroup.Sites[id].undraw();
					delete _this.SitesGroup.Sites[id];
					
					/* меняем, где нужно, количество сайтов для группы */
					_this.sitesCount--;
					_this.KeywordsGroup.setName();
					_this.Manager.setTotalSites();
					_this.Manager.redrawSuggestionSites();
					
					/* корректируем цвет и номер последней строки */
					var table_length = _this.SitesGroup.TableWrapper.length()+1;
					_this.SitesGroup.TableWrapper.Shown['new_site'].cells[0].innerHTML = table_length + '.';
					_this.SitesGroup.TableWrapper.Shown['new_site'].className = 'row'+(table_length%2);

					/* пересчёт статистики для сайта */
					_this.SitesGroup.setStat();
				}
				else
				{
					_this.SitesGroup.Sites[id].gDelBox.disabled = false;
					_this.SitesGroup.Sites[id].sDelBox.disabled = false;
					_this.SitesGroup.Sites[id].delLinks.show();
					_this.SitesGroup.Sites[id].delLoaders.hide();
				};
				
			}, 'json');
	};

	this.deleteKeyword = function(id)
	{
		this.KeywordsGroup.Keywords[id].delBox.disabled = true;
		this.KeywordsGroup.Keywords[id].delLink.hide();
		this.KeywordsGroup.Keywords[id].delLoader.css('display','inline');
		PositionTrackingLoadInfo['force_reload'] = true;
		var _this = this;
		$.post(Cabinet.Menus['tracking'].Tabs['keywords'].structure['url'],{'action':'delkw','keywords':id},function(data){
				if (data['result'] == 'ok')
				{
					_this.KeywordsGroup.Keywords[id].undraw();
					delete _this.KeywordsGroup.Keywords[id];
					
					_this.keywordsCount--;
					_this.SitesGroup.setKeywordsCount(_this.keywordsCount);
					_this.KeywordsGroup.setName(null, null, _this.keywordsCount);
					_this.Manager.setTotalKeywords();

					_this.KeywordsGroup.redrawHint();
				}
				else
				{
					_this.KeywordsGroup.Keywords[id].delBox.disabled = false;
					_this.KeywordsGroup.Keywords[id].delLink.show();
					_this.KeywordsGroup.Keywords[id].delLoader.hide();
				};
			}, 'json');
	};

	this.setName = function(name)
	{
		this.name = name;
		this.SitesGroup.setName(name);
		this.KeywordsGroup.setName(name);
	};

	this.undraw = function()
	{
		this.SitesGroup.undraw();
		this.KeywordsGroup.undraw();
	};
};
function CManager()
{
	this.Groups = {};
	
	this.SitesGroupTemplate = null;
	this.SitesGroupPlace = null;

	this.className = 'CManager';
	
	this.maxSitesCount = 0;
	this.maxKeywordsCount = 0;
	
	this.sitesCount = 0;
	this.keywordsCount = 0;

	this.trackingChart = null;

	this.init = function(data)
	{
		var duration_begin = microtime(true);
		
		this.data = data;
		this.maxSitesCount = data['max_sites'];
		this.maxKeywordsCount = data['max_keywords'];
		this.howto_block = $('#tracking_howto');
		$('#groupView_maxSitesCount,#tracking_keywords_maxSitesCount').html(this.maxSitesCount);
		$('#groupView_maxKeywordsCount,#tracking_keywords_maxKeywordsCount').html(this.maxKeywordsCount);
		
		/* prevent reloading manager tabs */
		Cabinet.Menus['tracking'].Tabs['sites'].setOpen('');
		Cabinet.Menus['tracking'].Tabs['keywords'].setOpen('');
		
		if (data['error']) return false;
		
		/* sites table wrapper */
		this.SitesTableWrapper = new CTableWrapper(
			document.getElementById('positionTracking_sitesManager_table'),
			{'shown':[0], 'templates':[1,2,3,4,5], 'counter':{'cell':0,'init':1}, 'ifempty':'no_site'}
		);
		var _this = this;
		
		/* main deletion checkbox in sitesview */
		var delCommonCheckbox = this.SitesTableWrapper.Shown['header1'].getElementsByTagName('input')[0];
		var delCommonCheckboxFunc = function(){
					for (var i in _this.Groups) for (var j in _this.Groups[i].SitesGroup.Sites)
					{
						_this.Groups[i].SitesGroup.Sites[j].sDelBox.checked = this.checked;
						_this.Groups[i].SitesGroup.Sites[j].gDelBox.checked = this.checked;
					};
				};
		if (detectedBrowserIsIE) delCommonCheckbox.onclick = delCommonCheckboxFunc;
		else delCommonCheckbox.onchange = delCommonCheckboxFunc;

		/* template div for site groups */
		this.SitesGroupTemplate = $('#tracking_groups_templateDiv');
		this.SitesGroupPlace = $('#tracking_groups_place');

		/* template div for keywords group */
		this.KeywordsGroupTemplate = $('#tracking_keywords_groupTemplate');
		this.KeywordsGroupPlace = $('#tracking_keywords_groupsPlace');
		this.KeywordsHintGroupTemplate = $('#tracking_keywords_GroupHintTemplate');
		this.KeywordsHintGroupPlace = $('#tracking_keywords_GroupHintPlace');
		/* groups list dropdown list */
		this.GroupsList = document.getElementById('tracking_keywords_groupsListInput');
		this.GroupsListWrapper = new CDropDownListWrapper(this.GroupsList, 1);
		//this.GroupsList.onchange = function(){_this.selectKeywordGroup(this.value)};
		this.GroupsListWrapper.change(function(){_this.selectKeywordGroup(this.value)});
		this.SitesList = document.getElementById('tracking_keywordsManager_select');
		this.SitesListWrapper = new CDropDownListWrapper(this.SitesList, 1);
		
		this.groups = this.data['groups'];

		/* init groups */
		for (var id in this.groups)
		{
			var Group = new CMGroup(this);
			Group.init(this.groups[id]);
			this.Groups[id] = Group;
		};
		
		this.redrawSuggestionSites();
		
		/* Бутафорная группа для my keywords */
		this.EmptyKwDiv = this.KeywordsGroupTemplate.clone().show().appendTo(this.KeywordsGroupPlace);
		new CTableWrapper( this.EmptyKwDiv.find('table:first').get(0), {'shown':[0],'templates':[1,2,3], 'counter':{'cell':0,'init':1}, 'ifempty':'no_domain'});

		/* init forms to add new group */
		this.SWarnSpans = $('#tracking_groups_WarnSpan,#tracking_sites_WarnSpan');
		this.SErrorSpans = $('#tracking_groups_ErrorSpan,#tracking_sites_ErrorSpan');
		var addGroupForms = $('#tracking_groups_addgroup_form,#tracking_sites_addgroup_form');
		this.addGroupFormInputs = addGroupForms.find('input');
		var _this = this;
		addGroupForms.ajaxForm({
			'type':'POST', 'url':Cabinet.Menus['tracking'].Tabs['sites'].structure['url'], 'dataType':'json', 'data':{'action':'addgroup'},
			'beforeSubmit':function(formData, jForm){
					
					_this.SWarnSpans.hide(); _this.SErrorSpans.hide();
					
					/* проверим данные */
					var domain;
					for (var i in formData) if (formData[i]['name'] == 'domain')
					{
						domain = formData[i]['value'] = trim(formData[i]['value']).toLowerCase().replace(/^\w+:\/\//,'').replace(/\/.*$/,'');
						if (!domain.match(/^(\w+(\-\w+)*\.)+[a-z]{2,}$/))
						{
							_this.SErrorSpans.html('Record you are trying to add is not a valid domain name').css('display','inline');
							return false;
						};
						break;
					};
					if (!domain) return false;
					
					/* сделаем форму недоступной для редактирования */
					_this.addGroupFormInputs.attr('disabled','disabled');
					if (!_this.addGroupLoader) _this.addGroupLoader = $('#tracking_groups_AddGroupLoader,#tracking_sites_AddGroupLoader');
					_this.addGroupLoader.css('visibility','visible');
					
					if (jForm.attr('id') != 'tracking_sites_addgroup_form') return true;
					/* если добавляем через siteview, нужно проверить, не мониторится ли уже такой домен. Если мониторится, выдать предупреждение */
					var is_already_monitored = false;
					cycle: for (var i in _this.Groups) for (var j in _this.Groups[i].SitesGroup.Sites)
							if (_this.Groups[i].SitesGroup.Sites[j].data['domain'] == domain) {is_already_monitored = true; break cycle;};
					if (!is_already_monitored || window.confirm('Site you are trying to add is already monitored. Continue?')) return true;
					_this.addGroupFormInputs.removeAttr('disabled');
					_this.addGroupLoader.css('visibility','hidden');
					return false;
				},
			'success': function(data,status,xhr,jForm){
					if (data['result'] == 'ok' && data['group'])
					{
						var Group = new CMGroup(_this);
						Group.init(data['group']);
						_this.Groups[data['group']['id']] = Group;
						Group.draw();
						_this.redrawSuggestionSites();
						_this.SErrorSpans.hide();
						_this.SWarnSpans.html('Tracking results for just added sites will be available in 24 hours').css('display','inline');
					}
					else if (data['error'])
					{
						_this.SWarnSpans.hide();
						_this.SErrorSpans.html(data['error']).css('display','inline');
					}
					else
					{
						_this.SWarnSpans.hide();
						_this.SErrorSpans.html('Unknown server response').css('display','inline');
					};
					jForm.clearForm();
					_this.addGroupFormInputs.attr('disabled', '');
					_this.addGroupLoader.css('visibility','hidden');
					_this.setTotalSites();
				}
			});
			
		/* init form to add keywords */
		this.KWarnSpan = $('#tracking_keywords_WarnSpan');
		this.KErrorSpan = $('#tracking_keywords_ErrorSpan');
		this.addKwForm = $('#tracking_keywords_addkeywords_form');
		this.addKwForm.submit(function()
		{
			var group_id = this.group.value;
			if (!group_id)
			{
				_this.KWarnSpan.hide();
				_this.KErrorSpan.html('Please select group to add keywords to').css('display','inline');
				return false;
			};
			var engines = this.engine.value.split(",");
			var keywords = $.map(this.keywords.value.split("\n"), function(e,i){return trim(e.toString()).toLowerCase().replace(/\s+/g, ' ');});
			var ekeywordsToSend = [];
			
			keywords_iteration:
			for (var i = 0; i < keywords.length; i++)
			{
				/* пустые слова игнорим */
				if (!keywords[i]) continue;
				
				/* не будем добавлять дубликаты */
				for (var j = 0; j < i; j++)
					if (keywords[i] == keywords[j])
						continue keywords_iteration;
				
				/* киворд вместе с каждым engine'ом - отдельный ekeyword */
				engines_iteration:
				for (var e in engines)
				{
					/* не будем добавлять уже добавленные киворды */
					var Keywords = _this.Groups[group_id].KeywordsGroup.Keywords;
					for (var j in Keywords)
						if ( Keywords[j].data['keyword'] == keywords[i] && Keywords[j].data['engine'] == engines[e])
							continue engines_iteration;
								
					ekeywordsToSend.push({'keyword': keywords[i], 'engine': engines[e]});
				};
			};
			
			/* checking keywords list length */
			if (!ekeywordsToSend.length) return false;
			if (ekeywordsToSend.length + _this.keywordsCount > _this.maxKeywordsCount)
			{
				_this.KWarnSpan.hide();
				_this.KErrorSpan.html('You can use max '+_this.maxKeywordsCount+' keywords. You already have '+_this.keywordsCount+' keywords. You are trying to add '+ekeywordsToSend.length+' new keywords.').css('display','inline');
				return false;
			};
			
			/* дизейблим кнопки */
			_this.GroupsListWrapper.disable();
			if (!_this.addLoader) _this.addLoader = $('#tracking_keywords_addLoader');
			_this.addLoader.css('visibility','visible');
			this.keywords.disabled = true;
			this.engine.disabled = true;
			this.submit.disabled = true;
			
			var _form = this;
			var data = {'action':'addkw','group':group_id, 'ekeywords': JSON.stringify(ekeywordsToSend)}
			$.post(Cabinet.Menus['tracking'].Tabs['keywords'].structure['url'],data, function(data){
					if (data['result'] == 'ok')
					{
						if (data['keywords'])
						for (var i in data['keywords'])
						{
							var Keyword = new CMKeyword(_this.Groups[group_id].KeywordsGroup);
							Keyword.init(data['keywords'][i]);
							_this.Groups[group_id].KeywordsGroup.Keywords[data['keywords'][i]['id']] = Keyword;
							Keyword.draw();
							_this.Groups[group_id].keywordsCount++;
						};
						_this.Groups[group_id].SitesGroup.setKeywordsCount(_this.Groups[group_id].keywordsCount);
						_this.Groups[group_id].KeywordsGroup.setName(null, null, _this.Groups[group_id].keywordsCount);
						_this.Groups[group_id].KeywordsGroup.redrawHint();
						_this.addKwForm.clearForm();
						_this.KErrorSpan.hide();
						_this.KWarnSpan.html('Tracking results for just added keywords will be available in 24 hours');
						_this.KWarnSpan.css('display',data['keywords'].length?'inline':'none');
					}
					else if (data['error'])
					{
						_this.KWarnSpan.hide();
						_this.KErrorSpan.html(data['error']).css('display','inline');
					}
					else
					{
						_this.KWarnSpan.hide();
						_this.KErrorSpan.html('Unknown server response').css('display','inline');
					};
					_this.GroupsListWrapper.enable();
					//_this.GroupsList.disabled = false;
					_form.keywords.disabled = false;
					_form.engine.disabled = false;
					_form.submit.disabled = false;
					_this.addLoader.css('visibility','hidden');
					_this.setTotalKeywords();
				}, 'json');
			return false;

		});

		/* init delete button for sites */
		this.delButtons = $('#tracking_groups_deleteButton,#tracking_sites_deleteButton');
		this.delButtonLoaders = $('#tracking_groups_deleteButtonLoader,#tracking_sites_deleteButtonLoader');
		this.delButtons.click(function(){_this.deleteSites();});

		this.kwDelButtons = $('#tracking_keywords_deleteButton');
		this.kwDelButtonLoaders = $('#tracking_keywords_deleteLoader');
		this.kwDelButtons.click(function(){_this.deleteKeywords();});

		/* switcher */
		this.GroupviewArea_beforeChart = $('#tracking_sites_groupView_beforeChart');
		this.GroupviewArea_afterChart = $('#tracking_sites_groupView_afterChart');
		this.SitesviewArea_beforeChart = $('#tracking_sites_sitesView_beforeChart');
		this.SitesviewArea_afterChart = $('#tracking_sites_sitesView_afterChart');

		/* total counts */
		this.TotalKeywordsCountSpan = $('#groupView_totalKeywordsCount,#sitesView_totalKeywordsCount,#tracking_keywords_totalKeywordsCount');
		this.TotalSitesCountSpan = $('#groupView_totalSitesCount,#sitesView_totalSitesCount,#tracking_keywords_totalSitesCount');
		this.MaxKeywordsCountSpan = $('#groupView_maxKeywordsCount,#tracking_keywords_maxKeywordsCount');
		this.MaxSitesCountSpan = $('#groupView_maxSitesCount,#tracking_keywords_maxSitesCount');
		
		/* warning 'No keywords for some groups' */
		this.noKeywordsWarning = $('#siteView_noKeywordsWarning,#groupView_noKeywordsWarning');
		this.noSitesWarning = $('#tracking_keywords_noSitesWarning');

		this.data['init_duration'] = microtime(true) - duration_begin;

		return true;
	};
	
	this.draw = function()
	{
		var duration_begin = microtime(true);
		
		var _this = this;
		
		var SitesTabTemplate = Templates['tracking']['sites'].begin();
		var KeywordsTabTemplate = Templates['tracking']['keywords'].begin();

		if (this.data['error'])
		{
			SitesTabTemplate.end(this.data['error']);
			KeywordsTabTemplate.end(this.data['error']);
			return;
		};
		
		/* рисуем группы */
			/* сказали сортировать по порядку */
			var sortedKeys = []; for (var i in this.Groups) sortedKeys.push(i);
			sortedKeys = sortedKeys.sort(function(g){ return function(a,b){ return g[a].data['order'] - g[b].data['order']; }; }(this.Groups));
		for (var i = 0; i < sortedKeys.length; i++)
		{
			this.Groups[sortedKeys[i]].draw();
		};
			
		/* для my sites включаем sitesView */
		//this.switchView($.cookie('SitesManagerView') == 'sites' ? 'sites' : 'groups');
		this.switchView('groups');

		/* для my keywords выбираем пустую группу */
		this.selectKeywordGroup('');
		
		/* заполняем количество сайтов и кивордов */
		this.setTotalSites();
		this.setTotalKeywords();
		
		/* render tabs */
		SitesTabTemplate.end(this.data['error']);
		KeywordsTabTemplate.end(this.data['error']);
		
		// SEO trial, added by Andrew, 15.12.2010 
		if(userAccount == 'seo_trial'){
			$('#tracking_groups_trial').show();
			$('#tracking_sites_trial').show();
			$('#tracking_keywords_trial').show();
		}

		this.data['draw_duration'] = microtime(true) - duration_begin;
		
		this.trackingChart = new CTrackingSitesChart();
		this.trackingChart.init();
		this.trackingChart.plot();
	};

	this.deleteSites = function()
	{
		/* дизейблим кнопки */
		this.delButtons.attr('disabled','disabled');
		this.delButtonLoaders.css('visibility','visible');
		
		/* дизейблим чекбоксы и запоминаем выбранные сайты */
		var sites = [];
		for (var i in this.Groups)
		{
			this.Groups[i].SitesGroup.delBox.disabled = true;
			for (var j in this.Groups[i].SitesGroup.Sites)
			{
				this.Groups[i].SitesGroup.Sites[j].gDelBox.disabled = this.Groups[i].SitesGroup.Sites[j].sDelBox.disabled = true;
				if (this.Groups[i].SitesGroup.Sites[j].gDelBox.checked)
				{
					this.Groups[i].SitesGroup.Sites[j].delLinks.hide();
					sites.push(j);
				};
			};
		};
				
		/* если ничего не выбрано, возвращаем всё обратно */
		if (!sites.length)
		{
			for (var i in this.Groups)
			{
				this.Groups[i].SitesGroup.delBox.disabled = false;
				for (var j in this.Groups[i].SitesGroup.Sites)
					this.Groups[i].SitesGroup.Sites[j].gDelBox.disabled = this.Groups[i].SitesGroup.Sites[j].sDelBox.disabled = false;
			};
			this.delButtonLoaders.css('visibility','hidden');
			this.delButtons.removeAttr('disabled');
			return;
		};
		
		/* отправляем запрос */
		var _this = this;
		$.post(Cabinet.Menus['tracking'].Tabs['sites'].structure['url'],{'action':'delsite','sites':sites.join(',')},function(data){
			/* ОБРАБОТКА ОТВЕТА СЕРВЕРА */
			for (var i in _this.Groups)
				for (var j in _this.Groups[i].SitesGroup.Sites)
				{
					/* отпустим чекбокс возле имени группы */
					_this.Groups[i].SitesGroup.delBox.disabled = false;

					/* если сайт удаляемый */
					if (in_array(sites,j))
					{
						/* если удаление с сервера удачное */
						if (data['result'] == 'ok')
						{
							/* удалим сайты со страницы и из структуры */
							_this.Groups[i].SitesGroup.Sites[j].undraw();
							delete _this.Groups[i].SitesGroup.Sites[j];
							
							/* изменим соответствующим образом счётчик сайтов в my keywords */
							_this.Groups[i].sitesCount--;
							_this.Groups[i].KeywordsGroup.setName();
							
							/* корректируем цвет и номер последней строки для группы сайтов */
							var table_length = _this.Groups[i].SitesGroup.TableWrapper.length() + 1;
							_this.Groups[i].SitesGroup.TableWrapper.Shown['new_site'].cells[0].innerHTML = table_length + '.';
							_this.Groups[i].SitesGroup.TableWrapper.Shown['new_site'].className = 'row'+(table_length%2);
							
							continue;
						}
						/* если удаление неудачное => вернём на место крестики для удаления */
						_this.Groups[i].SitesGroup.Sites[j].delLinks.show();
						
					};
					
					/* отпустим чекбоксы для удаления напротив сайта */
					_this.Groups[i].SitesGroup.Sites[j].gDelBox.disabled = false;
					_this.Groups[i].SitesGroup.Sites[j].sDelBox.disabled = false;
				};
				
			/* отпускаем кнопки */
			_this.delButtons.removeAttr('disabled');
			_this.delButtonLoaders.css('visibility','hidden');
			
			/* считаем общее количество сайтов */
			_this.redrawSuggestionSites();
			_this.setTotalSites();

			/* показываем или скрываем кнопки 'Delete checked', 'Restore Settings', 'Save Settings' */
			_this.ShowOrHide_ButtonsForSites();
			
		},'json');

	};
	
	this.deleteKeywords = function()
	{
		/* дизейблим кнопки */
		this.kwDelButtons.attr('disabled','disabled');
		this.kwDelButtonLoaders.css('visibility','visible');
		this.GroupsListWrapper.disable();
		
		/* дизейблим чекбоксы и запоминаем выбранные сайты */
		var keywords = [];
		for (var i in this.Groups)
		{
			if (!this.Groups[i].KeywordsGroup.isDrawn) continue;
			
			this.Groups[i].KeywordsGroup.delBox.disabled = true;
			for (var j in this.Groups[i].KeywordsGroup.Keywords)
			{
				this.Groups[i].KeywordsGroup.Keywords[j].delBox.disabled = true;
				if (this.Groups[i].KeywordsGroup.Keywords[j].delBox.checked) keywords.push(j);
			};
		};
				
		/* если ничего не выбрано, возвращаем всё обратно */
		if (!keywords.length)
		{
			for (var i in this.Groups)
			{
				this.Groups[i].KeywordsGroup.delBox.disabled = false;
				for (var j in this.Groups[i].KeywordsGroup.Keywords)
					this.Groups[i].KeywordsGroup.Keywords[j].delBox.disabled = false;
			};
			this.kwDelButtonLoaders.css('visibility','hidden');
			this.kwDelButtons.removeAttr('disabled');
			this.GroupsListWrapper.enable();
			return;
		};
		
		/* отправляем запрос */
		var _this = this;
		$.post(Cabinet.Menus['tracking'].Tabs['keywords'].structure['url'],{'action':'delkw','keywords':keywords.join(',')},function(data){
			for (var i in _this.Groups)
			{
				for (var j in _this.Groups[i].KeywordsGroup.Keywords)
				{
					if (_this.Groups[i].KeywordsGroup.isDrawn)
						_this.Groups[i].KeywordsGroup.delBox.disabled = false;
					
					if (data['result'] == 'ok' && in_array(keywords, j))
					{
						if (_this.Groups[i].KeywordsGroup.isDrawn) _this.Groups[i].KeywordsGroup.Keywords[j].undraw();
						delete _this.Groups[i].KeywordsGroup.Keywords[j];
						
						_this.Groups[i].keywordsCount--;
						_this.Groups[i].SitesGroup.setKeywordsCount(_this.Groups[i].keywordsCount);
						_this.Groups[i].KeywordsGroup.setName(null, null, _this.Groups[i].keywordsCount);
						
						continue;
					}
					
					if (_this.Groups[i].KeywordsGroup.isDrawn)
						_this.Groups[i].KeywordsGroup.Keywords[j].delBox.disabled = false;
				};
				_this.Groups[i].KeywordsGroup.redrawHint();
			};
			
			_this.kwDelButtons.removeAttr('disabled');
			_this.kwDelButtonLoaders.css('visibility','hidden');
			_this.GroupsListWrapper.enable();
			_this.setTotalKeywords();
		},'json');

	};
	
	this.deleteGroup = function(id)
	{
		if (this.GroupsListWrapper.value() == id)
			this.selectKeywordGroup('');
		this.Groups[id].undraw();
		delete this.Groups[id];
		this.setTotalSites();
		this.setTotalKeywords();
	};

	this.switchView = function(view)
	{
		if (!view) view = this.currentView != 'groups' ? 'groups' : 'sites'; 
		if (view == 'sites')
		{
			$.cookie('SitesManagerView', 'sites');
			this.GroupviewArea_beforeChart.hide();
			this.GroupviewArea_afterChart.hide();
			this.SitesviewArea_beforeChart.css('display','inline');
			this.SitesviewArea_afterChart.css('display','inline');
			this.currentView = 'sites';
		}
		else
		{
			$.cookie('SitesManagerView', 'groups');
			this.SitesviewArea_beforeChart.hide();
			this.SitesviewArea_afterChart.hide();
			this.GroupviewArea_beforeChart.css('display','inline');
			this.GroupviewArea_afterChart.css('display','inline');
			this.currentView = 'groups';
		};
	};
	
	this.setTotalKeywords = function(count)
	{
		var showNoKeywordsWarning = false;
		
		var previousKeywordsCount = this.keywordsCount;
		
		if (count == undefined)
		{
			count = 0;
			for (var i in this.Groups)
			{
				count += this.Groups[i].keywordsCount;
				if (this.Groups[i].sitesCount > 0 && this.Groups[i].keywordsCount == 0) showNoKeywordsWarning = true;
			};
		};
		this.keywordsCount = count;
		this.TotalKeywordsCountSpan.html(count);

		/* дизейблим или инейблим инпут-бокс для добавления кивордов */
		if (previousKeywordsCount != this.keywordsCount)
		{
			var disabled = this.keywordsCount >= this.maxKeywordsCount;
			this.addKwForm.get(0).keywords.disabled = disabled;
			this.addKwForm.get(0).engine.disabled = disabled;
			this.addKwForm.get(0).submit.disabled = disabled;
			this.KWarnSpan.html(disabled?'Upgrade your account to add more keywords':'').css('display',disabled?'inline':'none');
			this.KErrorSpan.hide();
		};
		
		/* скрыть/показать надпись "Some of your group have no keywords" */
		if (showNoKeywordsWarning) this.noKeywordsWarning.show(); else this.noKeywordsWarning.hide();

		/* в зависимости от количества кивордов/сайтов скрыть или показать start block */
		this.setStartBlock();
	};

	this.setTotalSites = function(count)
	{
		var showNoKeywordsWarning = false;
		
		var previousSitesCount = this.sitesCount;
		
		if (count == undefined)
		{
			count = 0;
			for (var i in this.Groups)
			{
				count += this.Groups[i].sitesCount;
				if (this.Groups[i].sitesCount > 0 && this.Groups[i].keywordsCount == 0) showNoKeywordsWarning = true;
			};
		};
		this.sitesCount = count;
		this.TotalSitesCountSpan.html(count);

		/* если количество сайтов изменилось */
		if (previousSitesCount != this.sitesCount)
		{
			/* дизейблим или инейблим инпут-боксы для добавления сайтов */
			var disabled = this.sitesCount >= this.maxSitesCount;
			this.addGroupFormInputs.attr('disabled',disabled?'disabled':'');
			this.SWarnSpans.html(disabled?'Upgrade your account to add more sites':'').css('display',disabled?'inline':'');
			this.SErrorSpans.hide();
			for (var i in this.Groups)
			{
				this.Groups[i].SitesGroup.WarnSpan.html(disabled?'Upgrade your account to add more sites':'').css('display',disabled?'inline':'');
				this.Groups[i].SitesGroup.ErrorSpan.hide();
				this.Groups[i].SitesGroup.newSiteFormInputs.attr('disabled',disabled?'disabled':'');
			};
			
		};
		
		/* скрыть или показать кнопки 'Delete checked', 'Restore Settings', 'Save Settings' */
		if (!this.buttonsForSites) this.buttonsForSites = $('#tracking_sites_deleteButtonTable,#tracking_groups_deleteButtonTable');//$('#tracking_sites_deleteButton,#tracking_groups_deleteButton');
		this.buttonsForSites.css('display', this.sitesCount ? '' : 'none');

		/* скрыть или показать надпись "You haven't added any sites yet. Use a form below to add some!" */
		if (!this.noGroupDiv) this.noGroupDiv = $('#tracking_groups_nothingYetDiv');
		this.noGroupDiv.css('display', this.sitesCount ? 'none' : '');
		
		/* скрыть/показать надпись "Some of your group have no keywords" */
		if (showNoKeywordsWarning) this.noKeywordsWarning.show(); else this.noKeywordsWarning.hide();
		
		/* в зависимости от количества кивордов/сайтов скрыть или показать start block */
		this.setStartBlock();
	};
	
	this.setStartBlock = function()
	{
		this.howto_block.css('display', (!this.sitesCount || !this.keywordsCount) ? 'inline' : 'none');
	};
	
	this.selectKeywordGroup = function(id)
	{
		//this.GroupsList.disabled = true;
		this.GroupsListWrapper.disable();
		//this.GroupsList.value = id;
		this.GroupsListWrapper.setValue(id);
		
		if (!this.GroupsListLoader) this.GroupsListLoader = document.getElementById('keyword_list_loading');
		this.GroupsListLoader.visibility = 'visible';
		
		for (var i in this.Groups)
		{
			/* покажем или скроем группу */
			if (i == id) this.Groups[i].KeywordsGroup.show();
			else this.Groups[i].KeywordsGroup.hide();
			
			/* выключим все чекбоксы */
			this.Groups[i].KeywordsGroup.delBox.checked = false;
			for (var j in this.Groups[i].KeywordsGroup.Keywords)
				if (this.Groups[i].KeywordsGroup.Keywords[j].delBox)
					this.Groups[i].KeywordsGroup.Keywords[j].delBox.checked = false;
		};
		this.EmptyKwDiv.css('display',id?'none':'inline');
		this.addKwForm.get(0).group.value = id;
		
		this.GroupsListLoader.visibility = 'hidden';
		//this.GroupsList.disabled = false;
		this.GroupsListWrapper.enable();
	};

	this.recountSites = function()
	{
		var count = 0;
		for (var i in this.Groups)
			count += this.Groups[i].SitesGroup.recountSites();
		this.sitesCount = count;
		return this.sitesCount;
	};

	this.redrawSuggestionSites = function()
	{
		/* чистим список */
		//while (this.SitesList.childNodes[1])
		//	this.SitesList.removeChild(this.SitesList.childNodes[1]);
		this.SitesListWrapper.clear();
			
		/* выБираем уникальные значения доменов */
		var sites = {};
		for (var i in this.Groups)
			for (var j in this.Groups[i].SitesGroup.Sites)
				sites[this.Groups[i].SitesGroup.Sites[j].data['domain']] = 1;

		/* сортируем */
		var sortedSites = []; for (var i in sites) sortedSites.push(i);
		sortedSites = sortedSites.sort();
		for (var i = 0; i < sortedSites.length; i++)
		{
			//var newOption = document.createElement('option');
			//newOption.innerHTML = htmlspecialchars(sortedSites[i]);
			//newOption.setAttribute('value', sortedSites[i]);
			//this.SitesList.appendChild(newOption);
			this.SitesListWrapper.add(sortedSites[i], htmlspecialchars(sortedSites[i]));
		};


		if (!this.SuggestionKeywordsArea) this.SuggestionKeywordsArea = $('#suggested_keywords_table');
		this.SuggestionKeywordsArea.hide();
	};


};

var TrackingManager = new CManager();

function show_durations()
{
	var str = '';
	str += 'Serverside::Includes: ' + TrackingManager.data['duration00'] + '\n';
	str += 'Serverside::Globals: ' + TrackingManager.data['duration01'] + '\n';
	str += 'Serverside::ReadingInput ' + TrackingManager.data['duration02'] + '\n';
	str += 'Serverside::Authentication: ' + TrackingManager.data['duration03'] + '\n';
	str += 'Serverside::Switch: ' + TrackingManager.data['duration04'] + '\n';
	str += '\n';
	str += 'Serverside::Groups: ' + TrackingManager.data['duration1'] + '\n';
	str += 'Serverside::Sites: ' + TrackingManager.data['duration2'] + '\n';
	str += 'Serverside::Keywords: ' + TrackingManager.data['duration3'] + '\n';
	str += 'Serverside::Limitations: ' + TrackingManager.data['duration4'] + '\n';
	str += 'Serverside::Disconn: ' + TrackingManager.data['duration5'] + '\n';
	str += 'Serverside::Total: ' + TrackingManager.data['pg_duration'] + '\n';
	str += '\n';
	str += 'Clientside::Init: ' + TrackingManager.data['init_duration'] + '\n';
	str += 'Clientside::Draw: ' + TrackingManager.data['draw_duration'] + '\n';
	str += '\n';
	str += 'Total: ' + TrackingManager.data['total_duration'];
	alert(str);
};

function microtime(get_as_float)
{  
    var now = new Date().getTime() / 1000;  
    var s = parseInt(now);  
  
    return (get_as_float) ? now : (Math.round((now - s) * 1000) / 1000) + ' ' + s;  
}  
function CTrackingSitesChart()
{
	this.dataSets = {};

	this.dataGot = false; /* is true when data is already came */
	this.requestSend = false; /* is true when request is already sent but no data available yet */
	this.isPlottedAtLeastOnce = false; /* to prevent plotting tooltip twice */
	
	this.init = function()
	{
		if (!this.chartPlace)  this.chartPlace  = $('#tracking_chart_place');
		if (!this.chartLegend) this.chartLegend = $('#tracking_chart_legend');
		if (!this.dropDownsSpan) this.dropDownsSpan = $('#tracking_chart_dropdowns_span');
		if (!this.toolTip) this.toolTip = document.getElementById('tracking_chart_tooltip');
		if (!this.chartError) this.chartError = $('#tracking_chart_error');
		if (!this.DropDowns) this.DropDowns = [null, null];
		if (!this.showSpan) this.showSpan = $('#tracking_chart_show');
		if (!this.hideSpan) this.hideSpan = $('#tracking_chart_hide');
		if (!this.chartLoaders) this.chartLoaders = $('#tracking_chart_loader');
		if (!this.DivToBeHidden) this.DivToBeHidden = $('#tracking_chart_divToHide');
		
		this.dataToDraw = ['clicks'];
		this.Labels = { clicks: 'Est. traffic', rank: 'Est. cost', top1count: 'Top 1', top3count: 'Top 3', top5count: 'Top 5', top10count: 'Top 10' };
		this.currentDomain = 'total';
		
		if (this.showSpan.get(0)) this.showSpan.get(0).onclick = function(_this){return function(){_this.show();};}(this);
		if (this.hideSpan.get(0)) this.hideSpan.get(0).onclick = function(_this){return function(){_this.hide();};}(this);
		
		/* show or hide */
		this.hidden = $.cookie('SitesManagerChart') == 'shown' ? false : true;
		if (this.hidden) this.hide();
		else this.show();
		
		$('#tracking_sites_TabLink').click(function(_this){return function(){ _this.plot(); };}(this));
	};
	
	this.hide = function()
	{
		this.chartPlace.hide();
		this.chartLegend.hide();
		this.dropDownsSpan.hide();
		this.toolTip.style.display = 'none';
		this.chartError.hide();
		this.showSpan.css('display','inline');
		this.hideSpan.hide();
		this.chartLoaders.hide();
		this.DivToBeHidden.hide();
		this.hidden = true;
		$.cookie('SitesManagerChart', 'hidden');
	};
	
	this.show = function()
	{
		this.hideSpan.css('display', 'inline');
		this.showSpan.hide();
		this.hidden = false;
		this.DivToBeHidden.show();
		$.cookie('SitesManagerChart', 'shown');
		this.plot();
	};
	
	this.plot = function()
	{
		if (this.hidden) return;
		
		if (!this.dataGot)
		{
			this.getData();
			return;
		};
		
		/* DROPDOWNS */
			this.currentDomain = this.domainsListDD.value;
			
			if (!this.DropDowns[0])
			{
				this.DropDowns[0] = document.getElementById('tracking_chartType1');
				this.DropDowns[0].onchange = function(_this){return function(){_this.dataSetsAreChanged();};}(this);
				var ddvalue1 = $.cookie('chart1'); if (this.Labels[ddvalue1]) this.DropDowns[0].value = ddvalue1;
			};
			if (!this.DropDowns[1])
			{
				this.DropDowns[1] = document.getElementById('tracking_chartType2');
				this.DropDowns[1].onchange = function(_this){return function(){_this.dataSetsAreChanged();};}(this);
				var ddvalue2 = $.cookie('chart2'); if (this.Labels[ddvalue2]) this.DropDowns[1].value = ddvalue2;
			};
		
		
		/* DIVS */
			if (!this.chartPlace)  this.chartPlace  = $('#tracking_chart_place');
			if (!this.chartLegend) this.chartLegend = $('#tracking_chart_legend');
			if (!this.dropDownsSpan) this.dropDownsSpan = $('#tracking_chart_dropdowns_span');
			if (!this.toolTip) this.toolTip = document.getElementById('tracking_chart_tooltip');
			if (!this.chartError) this.chartError = $('#tracking_chart_error');
		
		/* IF NO DATA FOR CHART */
			if (!this.dataSets['total']['clicks'].length)
			{
				this.chartPlace.hide();
				this.chartLegend.hide();
				this.dropDownsSpan.hide();
				this.chartLoaders.hide();
				this.chartError.show();
				return;
			}
		
		/* PREPARING DATA TO BE DRAWN */
			/* what type of charts to draw */
			this.dataToDraw = [ this.DropDowns[0].value ];
			if (this.DropDowns[1].value != this.DropDowns[0].value) this.dataToDraw.push(this.DropDowns[1].value);
			var dataSeries = [ {label: this.Labels[this.dataToDraw[0]], data: this.dataSets[this.currentDomain][this.dataToDraw[0]]} ];
			
			/* options */
			var options = {
					series: { lines: { show: true }, points: { show: true } },
					crosshair: { mode: 'x' },
					xaxis: {
						mode: 'time',
						timeformat: '%y/%m/%d',
						ticks: [ this.dataSets[this.currentDomain]['clicks'][0][0], this.dataSets[this.currentDomain]['clicks'][this.dataSets[this.currentDomain]['clicks'].length-1][0] ]
						},
					yaxis: {
						tickFormatter: function(v, axis){ return formatNumber(v); }
						},
					grid: { show: true, hoverable: true, clickable: false },
					legend: { show: true, container: this.chartLegend, noColumns: 5 }
				};
				
			/* only max and min values on Y-axis */
			var _dataSet1 = this.dataSets[this.currentDomain][this.dataToDraw[0]];
			var minY1 = _dataSet1[0][1];
			var maxY1 = _dataSet1[0][1];
			for (var i = 0; i < _dataSet1.length; i++)
			{
				if (minY1 > _dataSet1[i][1]) minY1 = _dataSet1[i][1];
				if (maxY1 < _dataSet1[i][1]) maxY1 = _dataSet1[i][1];
			};
			//minY1 = maxY1 - 1.13*(maxY1 - minY1); /* смещаем графики */
			//if (minY1 < 0) minY1 = 0;
			options['yaxis']['ticks'] = [ Math.floor(minY1), Math.ceil(maxY1) ];
			
			/* if second chart must be plotted */
			if (this.dataToDraw[1])
			{
				dataSeries.push({label: this.Labels[this.dataToDraw[1]], data: this.dataSets[this.currentDomain][this.dataToDraw[1]], yaxis: 2});
				options['y2axis'] = { tickFormatter: function(v, axis){ return formatNumber(v); } };
				
				/* only max and min values on Y-axis */
				var _dataSet2 = this.dataSets[this.currentDomain][this.dataToDraw[1]];
				var minY2 = _dataSet2[0][1];
				var maxY2 = _dataSet2[0][1];
				for (var i = 0; i < _dataSet2.length; i++)
				{
					if (minY2 > _dataSet2[i][1]) minY2 = _dataSet2[i][1];
					if (maxY2 < _dataSet2[i][1]) maxY2 = _dataSet2[i][1];
				};
				maxY2 = 1.26*(maxY2 - minY2) + minY2; /* смещаем графики */
				options['y2axis']['ticks'] = [ Math.floor(minY2), Math.ceil(maxY2) ];
			};
		
		/* SHOW DIVS */
			this.chartPlace.show();
			this.chartLegend.show();
			this.dropDownsSpan.show();
			this.chartLoaders.hide();
			this.chartError.hide();
		
		/* PLOT */
			$.plot(this.chartPlace, dataSeries, options);
		
		
			if (this.isPlottedAtLeastOnce) return;
		/* TOOLTIP */	
			this.isPlottedAtLeastOnce = true;
			
			var _this = this;
			var _lastPoint = -100;
			this.chartPlace
				.mousemove(function(ev){set_span_position(ev, _this.toolTip);})
				.mouseout(function(ev){_this.toolTip.style.display = 'none';})
				.bind('plothover', function(ev, pos, item){
					for (var i in _this.dataSets[_this.currentDomain]['common'])
					{
						if (pos.x < parseInt(i,10) - 10000000) continue;
						if (pos.x > parseInt(i,10) + 10000000) continue;
						if (_lastPoint != i)
						{
							_lastPoint = i;
							_this.toolTip.innerHTML =
								'<b>'+(new Date(parseInt(i,10))).toDateString() + '</b><br />'+
								'Est. traffic: '+formatNumber(_this.dataSets[_this.currentDomain]['common'][i]['clicks'])+'<br />'+
								'Est. cost: $'+formatNumber(_this.dataSets[_this.currentDomain]['common'][i]['rank'])+'<br />'+
								'Top 1: '+formatNumber(_this.dataSets[_this.currentDomain]['common'][i]['top1count'])+'<br />'+
								'Top 3: '+formatNumber(_this.dataSets[_this.currentDomain]['common'][i]['top3count'])+'<br />'+
								'Top 5: '+formatNumber(_this.dataSets[_this.currentDomain]['common'][i]['top5count'])+'<br />'+
								'Top 10: '+formatNumber(_this.dataSets[_this.currentDomain]['common'][i]['top10count'])+'<br />';
						};
						_this.toolTip.style.display = 'inline';
						return;
					};
					_this.toolTip.style.display = 'none';
				});

	};
	
	this.getData = function()
	{
		/* preventing loading data twice */
		if (this.requestSent) return;
		this.requestSent = true;
		
		this.chartLoaders.show();
		
		var _this = this;
		$.getJSON(Cabinet.Menus['tracking'].Tabs['sites'].structure['url'], {action:'getchart', now:(new Date()).toString() }, function(data){
				
				_this.dataSets = {};
				
				/* total */
				_this.dataSets['total'] = {
					'common': {},
					'clicks': [], 'rank'  : [], 'top1count' : [], 'top3count' : [], 'top5count' : [], 'top10count': []
					};
				
				/* each group */
				_this.domainsListDD = document.getElementById('tracking_chartDomain');
				for (var i = _this.domainsListDD.length - 1; i > 0; i--) _this.domainsListDD.remove(i);
				_this.domainsListDD.onchange = function(__this){return function(){__this.dataSetsAreChanged();};}(_this);
				for (var group_id in data['chart'])
				{
					var listOption = document.createElement('option');
					listOption.setAttribute('value', '__group__'+group_id);
					listOption.style.fontWeight = 'bold';
					var group_name = data['chart'][group_id]['name']; //if (group_name.length > 18) group_name = group_name.substr(0,16)+'...';
					listOption.innerHTML = htmlspecialchars('Group: '+group_name);
					_this.domainsListDD.appendChild(listOption);
				
					_this.dataSets['__group__'+group_id] = {
							'common': {},
							'clicks': [], 'rank': [], 'top1count': [], 'top3count': [], 'top5count': [], 'top10count': []
						};

					/* each site */
					for (site_id in data['chart'][group_id]['sites'])
					{
						var listOption = document.createElement('option');
						listOption.setAttribute('value', '__site__'+site_id);
						var site_name = data['chart'][group_id]['sites'][site_id]['domain']; //if (site_name.length > 26) site_name = site_name.substr(0,24)+'...';
						listOption.innerHTML = '&nbsp;&nbsp;&nbsp;'+htmlspecialchars(site_name);
						_this.domainsListDD.appendChild(listOption);
						
						_this.dataSets['__site__'+site_id] = {
							'common': {},
							'clicks': [], 'rank': [], 'top1count': [], 'top3count': [], 'top5count': [], 'top10count': []
							};
						
						/* each point */
						for (var point in data['chart'][group_id]['sites'][site_id]['values'])
						{
							/* adding to Site */
							var pointInfo = data['chart'][group_id]['sites'][site_id]['values'][point];
							_this.dataSets['__site__'+site_id]['common'][pointInfo['date']*1000] = {
								'clicks': parseFloat(pointInfo['clicks']),
								'rank'  : parseFloat(pointInfo['rank']),
								'top1count': parseInt(pointInfo['top1count'],10),
								'top3count': parseInt(pointInfo['top3count'],10),
								'top5count': parseInt(pointInfo['top5count'],10),
								'top10count':parseInt(pointInfo['top10count'],10)
								};
							
							/* adding to Group */
							if (!_this.dataSets['__group__'+group_id]['common'][pointInfo['date']*1000])
								_this.dataSets['__group__'+group_id]['common'][pointInfo['date']*1000] = {
										'clicks': 0, 'rank': 0, 'top1count': 0, 'top3count': 0, 'top5count': 0, 'top10count': 0
									};
							_this.dataSets['__group__'+group_id]['common'][pointInfo['date']*1000]['clicks'] += parseFloat(pointInfo['clicks'])
							_this.dataSets['__group__'+group_id]['common'][pointInfo['date']*1000]['rank'] += parseFloat(pointInfo['rank']);
							_this.dataSets['__group__'+group_id]['common'][pointInfo['date']*1000]['top1count'] += parseInt(pointInfo['top1count'],10);
							_this.dataSets['__group__'+group_id]['common'][pointInfo['date']*1000]['top3count'] += parseInt(pointInfo['top3count'],10);
							_this.dataSets['__group__'+group_id]['common'][pointInfo['date']*1000]['top5count'] += parseInt(pointInfo['top5count'],10);
							_this.dataSets['__group__'+group_id]['common'][pointInfo['date']*1000]['top10count'] += parseInt(pointInfo['top10count'],10);
							
							/* adding to 'All' */
							if (!_this.dataSets['total']['common'][pointInfo['date']*1000])
								_this.dataSets['total']['common'][pointInfo['date']*1000] = {
										'clicks': 0, 'rank': 0, 'top1count': 0, 'top3count': 0, 'top5count': 0, 'top10count': 0
									};
							_this.dataSets['total']['common'][pointInfo['date']*1000]['clicks'] += parseFloat(pointInfo['clicks']);
							_this.dataSets['total']['common'][pointInfo['date']*1000]['rank'] += parseFloat(pointInfo['rank']);
							_this.dataSets['total']['common'][pointInfo['date']*1000]['top1count'] += parseInt(pointInfo['top1count'],10);
							_this.dataSets['total']['common'][pointInfo['date']*1000]['top3count'] += parseInt(pointInfo['top3count'],10);
							_this.dataSets['total']['common'][pointInfo['date']*1000]['top5count'] += parseInt(pointInfo['top5count'],10);
							_this.dataSets['total']['common'][pointInfo['date']*1000]['top10count'] += parseInt(pointInfo['top10count'],10);
						};
					};
				};

				for (var item in _this.dataSets) /* item = domain | group | 'total' */
				{
					var sortedDates = [];
					for (var _date in _this.dataSets[item]['common']) sortedDates.push(_date);
					var sortedDates = sortedDates.sort();
					for (var i in sortedDates)
					{
						var _date = parseInt(sortedDates[i],10)
						_this.dataSets[item]['clicks'].push([_date, _this.dataSets[item]['common'][_date]['clicks']]);
						_this.dataSets[item]['rank'].push([_date, _this.dataSets[item]['common'][_date]['rank']]);
						_this.dataSets[item]['top1count'].push([_date, _this.dataSets[item]['common'][_date]['top1count']]);
						_this.dataSets[item]['top3count'].push([_date, _this.dataSets[item]['common'][_date]['top3count']]);
						_this.dataSets[item]['top5count'].push([_date, _this.dataSets[item]['common'][_date]['top5count']]);
						_this.dataSets[item]['top10count'].push([_date, _this.dataSets[item]['common'][_date]['top10count']]);
					};
				};
				
				
				_this.dataGot = true;
				_this.requestSent = false;
				_this.plot();
			});
	};

	this.dataSetsAreChanged = function()
	{
		$.cookie('chart1', this.DropDowns[0].value);
		$.cookie('chart2', this.DropDowns[1].value);
		this.plot();
	};
};

function tracking_keywords_draw(data)
{
	if (window.TrackingSites_is_loaded) return;
	window.TrackingSites_is_loaded = true;
	
	TrackingManager.init(data)
	TrackingManager.draw();
	TrackingManager.data['total_duration'] = duration;
	return;
	TrackingManager.fill(data);
};


function tracking_keywords_setStateForAdditionElements(data)
{
	if (!data['sites'].length || data['current_site'] == '')
	{
		$('#keywords_to_add').attr('disabled', 'disabled');
		$('#keyword_list_add_button').attr('disabled','disabled');
		$('#tracking_keywordsManager_select').attr('disabled', 'disabled');
	}
	else
	{
		$('#keywords_to_add:disabled').removeAttr('disabled');
		$('#keyword_list_add_button:disabled').removeAttr('disabled');
		$('#tracking_keywordsManager_select:disabled').removeAttr('disabled');
	};
	var noMoreKeywords = (parseInt(data['current_keywords_count'],10) >= parseInt(data['max_allowed_keywords'],10));
	if (noMoreKeywords)
	{
		$('#keywords_to_add').attr('disabled', 'disabled');
		$('#keyword_list_add_button').attr('disabled','disabled');
		$('#suggested_keywords_add_button').attr('disabled', 'disabled');
		$('#my_keywords_add_form_message').css('display', '').find('td:first').html('You reached max number of keywords.');
	}
	else
	{
		$('#suggested_keywords_add_button:disabled').removeAttr('disabled');
		$('#my_keywords_add_form_message').css('display', 'none');
	};
};

var positionTracking_chartType1 = null;
var positionTracking_chartType2 = null;
var positionTracking_chartLabels = { clicks: 'Est. traffic', rank: 'Est. cost', top1count: 'Top 1', top3count: 'Top 3', top5count: 'Top 5', top10count: 'Top 10' };

function positionTracking_trackingResults_draw(data)
{
	var hint = document.getElementById('tracking_trackingResults_hint_div');
	var hint_data = positionTracking_trackingResults_hint_data;			
	var chart_data = positionTracking_trackingResults_chart_data;
	
	if (hint_data['error'])
	{
		document.getElementById('tracking_results_errorDiv').style.display = 'inline';
		document.getElementById('tracking_results_errorString').innerHTML = hint_data['error'];
		document.getElementById('tracking_tracking_results_resultsDiv').style.display = 'none';
		return;
	};
	for(i in hint_data)
	{		
		var row_el=document.getElementById('keyword_link_'+i);
		row_el.onmouseover=row_el.onmousemove = function(i){ return function (e){ var e = e || window.event; positionTracking_trackingResults_showHint(e, i);}}(i);	
		row_el.onmouseout = function () {positionTracking_trackingResults_hideHint();};		
	}
	
	if(userAccount == 'seo_trial')
		document.getElementById('tracking_results_trial').style.display = '';
	
	/* show results div */
	document.getElementById('tracking_results_errorDiv').style.display = 'none';
	document.getElementById('tracking_tracking_results_resultsDiv').style.display = 'inline';

	/* выпадающие менюшки */
		var chartTypeDropDown1 = document.getElementById('tracking_resultsChartType1');
		chartTypeDropDown1.onchange = function(){ positionTrackingResults_plot(); };
		if (!positionTracking_chartType1) positionTracking_chartType1 = $.cookie('rchart1');
		if (!positionTracking_chartType1) positionTracking_chartType1 = 'clicks';
		if (positionTracking_chartType1 && positionTracking_chartLabels[positionTracking_chartType1]) chartTypeDropDown1.value = positionTracking_chartType1;
		
		var chartTypeDropDown2 = document.getElementById('tracking_resultsChartType2');
		chartTypeDropDown2.onchange = function(){ positionTrackingResults_plot(); };
		if (!positionTracking_chartType2) positionTracking_chartType2 = $.cookie('rchart2');
		if (!positionTracking_chartType1) positionTracking_chartType1 = 'rank';
		if (positionTracking_chartType2 && positionTracking_chartLabels[positionTracking_chartType2]) chartTypeDropDown2.value = positionTracking_chartType2;
	
	/* show chart */
	positionTrackingResults_chartDataSets = { 'common': {}, 'clicks': [], 'rank': [], 'top1count': [], 'top3count': [], 'top5count': [], 'top10count': [] };
	for (var i = 0; i < chart_data.length; i++)
	{
		positionTrackingResults_chartDataSets['common'][chart_data[i]['date']*1000] = chart_data[i];
		positionTrackingResults_chartDataSets['clicks'].push([chart_data[i]['date']*1000, parseFloat(chart_data[i]['clicks'])]);
		positionTrackingResults_chartDataSets['rank'].push([chart_data[i]['date']*1000, parseFloat(chart_data[i]['rank'])]);
		positionTrackingResults_chartDataSets['top1count'].push([chart_data[i]['date']*1000, parseInt(chart_data[i]['top1count'],10)]);
		positionTrackingResults_chartDataSets['top3count'].push([chart_data[i]['date']*1000, parseInt(chart_data[i]['top3count'],10)]);
		positionTrackingResults_chartDataSets['top5count'].push([chart_data[i]['date']*1000, parseInt(chart_data[i]['top5count'],10)]);
		positionTrackingResults_chartDataSets['top10count'].push([chart_data[i]['date']*1000, parseInt(chart_data[i]['top10count'],10)]);
	};
	
	positionTrackingResults_plot();
	
		
	var _lastPoint = -100;
	var _tooltip = document.getElementById('tracking_resultsChart_tooltip');
	$('#tracking_results_chart_place')
		.mousemove(function(ev){set_span_position(ev, _tooltip);})
		.mouseout(function(ev){_tooltip.style.display = 'none';})
		.bind('plothover', function(ev, pos, item){
			for (var i in positionTrackingResults_chartDataSets['common'])
			{
				if (pos.x < parseInt(i,10) - 10000000) continue;
				if (pos.x > parseInt(i,10) + 10000000) continue;
				if (_lastPoint != i)
				{
					_lastPoint = i;
					_tooltip.innerHTML =
						'<b>'+(new Date(parseInt(i,10))).toDateString() + '</b><br />'+
						'Est. traffic: '+formatNumber(positionTrackingResults_chartDataSets['common'][i]['clicks'])+'<br />'+
						'Est. cost: $'+formatNumber(positionTrackingResults_chartDataSets['common'][i]['rank'])+'<br />'+
						'Top 1: '+formatNumber(positionTrackingResults_chartDataSets['common'][i]['top1count'])+'<br />'+
						'Top 3: '+formatNumber(positionTrackingResults_chartDataSets['common'][i]['top3count'])+'<br />'+
						'Top 5: '+formatNumber(positionTrackingResults_chartDataSets['common'][i]['top5count'])+'<br />'+
						'Top 10: '+formatNumber(positionTrackingResults_chartDataSets['common'][i]['top10count'])+'<br />';
				};
				_tooltip.style.display = 'inline';
				return;
			};
			_tooltip.style.display = 'none';
		});
		
}

var positionTracking_trackingResults_hint_data;
var positionTrackingResults_chartDataSets = {};

function positionTrackingResults_plot()
{
	/* выпадающие менюшки */
	var chartType1 = document.getElementById('tracking_resultsChartType1').value;
	if (positionTracking_chartType1 != chartType1)
	{
		positionTracking_chartType1 = chartType1;
		$.cookie('rchart1', positionTracking_chartType1);
	};
	var chartType2 = document.getElementById('tracking_resultsChartType2').value;
	if (positionTracking_chartType2 != chartType2)
	{
		positionTracking_chartType2 = chartType2;
		$.cookie('rchart2', positionTracking_chartType2);
	};

	var _labels = positionTracking_chartLabels;
	
	if (positionTrackingResults_chartDataSets[chartType1].length <= 0)
	{
		if (document.getElementById('tracking_results_chart'))
			document.getElementById('tracking_results_chart').style.display = 'none';
		return;
	};
	if (document.getElementById('tracking_results_chart')) document.getElementById('tracking_results_chart').style.display = 'block';
	
	var dataSeries = [ {label: _labels[chartType1], data: positionTrackingResults_chartDataSets[chartType1]} ];
	
	var options = {
			series: { lines: { show: true }, points: { show: true } },
			crosshair: { mode: 'x' },
			xaxis: {
				mode: 'time',
				timeformat: '%y/%m/%d',
				ticks: [ positionTrackingResults_chartDataSets['clicks'][0][0], positionTrackingResults_chartDataSets['clicks'][positionTrackingResults_chartDataSets['clicks'].length-1][0] ]
				},
			yaxis: { tickFormatter: function(v, axis){ return formatNumber(v); } },
			y2axis: { tickFormatter: function(v, axis){ return formatNumber(v); } },
			grid: { hoverable: true, clickable: false },
			legend: { show: true, container: $('#tracking_resultsChart_legend'), noColumns: 5 }
		};
		
	/* only max and min values on Y-axis */
	var _dataSet1 = positionTrackingResults_chartDataSets[chartType1];
	var minY1 = _dataSet1[0][1];
	var maxY1 = _dataSet1[0][1];
	for (var i = 0; i < _dataSet1.length; i++)
	{
		if (minY1 > _dataSet1[i][1]) minY1 = _dataSet1[i][1];
		if (maxY1 < _dataSet1[i][1]) maxY1 = _dataSet1[i][1];
	};
	options['yaxis']['ticks'] = [ Math.floor(minY1), Math.ceil(maxY1) ];

	/* if second chart must be plotted */
	if (chartType2 != chartType1)
	{
		dataSeries.push({label: _labels[chartType2], data: positionTrackingResults_chartDataSets[chartType2], yaxis: 2});
		options['y2axis'] = { tickFormatter: function(v, axis){ return formatNumber(v); } };
		
		/* only max and min values on Y-axis */
		var _dataSet2 = positionTrackingResults_chartDataSets[chartType2];
		var minY2 = _dataSet2[0][1];
		var maxY2 = _dataSet2[0][1];
		for (var i = 0; i < _dataSet2.length; i++)
		{
			if (minY2 > _dataSet2[i][1]) minY2 = _dataSet2[i][1];
			if (maxY2 < _dataSet2[i][1]) maxY2 = _dataSet2[i][1];
		};
		maxY2 = 1.26*(maxY2 - minY2) + parseFloat(minY2); /* смещаем графики */
		options['y2axis']['ticks'] = [ Math.floor(minY2), Math.ceil(maxY2) ];
	};
	
		
	if (document.getElementById('tracking_results_chart_place')) document.getElementById('tracking_results_chart_place').style.display = 'block';
	if (document.getElementById('tracking_resultsChart_dropdowns_span')) document.getElementById('tracking_resultsChart_dropdowns_span').style.display = 'inline';
	
	/* если таб в данный момент скрыт, нарисуется при клике на него */
	try 
	{
		$.plot($('#tracking_results_chart_place'), dataSeries, options);
		$('#tracking_tracking_results_TabLink').unbind('click.chart');
	}
	catch (exc)
	{
		$('#tracking_tracking_results_TabLink').bind('click.chart', function(d,o){ return function(){ $.plot($('#tracking_results_chart_place'), d, o); } }(dataSeries, options));
	};
	
};

function positionTracking_trackingResults_showHint(event, i)
{	
	//alert([event,i]);
	var hint_data = positionTracking_trackingResults_hint_data;		
	if (!event) var event = window.event;	
	var hint = document.getElementById('tracking_trackingResults_hint_div');
	set_hint_position(event, hint);
	//hint.style.left = event.clientX + (document.documentElement.scrollLeft || document.body.scrollLeft) + 15 + 'px';	
	//hint.style.top  = event.clientY + (document.documentElement.scrollTop || document.body.scrollTop) + 15 + 'px';	

	document.getElementById('tracking_trackingResults_hint_div_date').innerHTML = htmlspecialchars(hint_data[i]['date']);
	document.getElementById('tracking_trackingResults_hint_div_engine').innerHTML = htmlspecialchars(hint_data[i]['engine']);
	document.getElementById('tracking_trackingResults_hint_div_keyword').innerHTML = htmlspecialchars(hint_data[i]['keyword']);		
	document.getElementById('tracking_trackingResults_hint_div_position').innerHTML = htmlspecialchars(hint_data[i]['position']);
	document.getElementById('tracking_trackingResults_hint_div_link').innerHTML = htmlspecialchars(hint_data[i]['link']);
	hint.style.display = 'block';
	//hint.style.visibility='visible';
}

function positionTracking_trackingResults_hideHint()
{
	var hint = document.getElementById('tracking_trackingResults_hint_div');	
	hint.style.display = 'none';
	//hint.style.visibility='hidden';

}

