var ag_rek_class = Class.create();

ag_rek_class.prototype = {
	initialize : function(args) {
		this.remote = new ag_server();
		this.remote.set_code("rek");
		this.last_s = '';
		this.changed = 0;
		this.next = 0;
		this.active_connection = 0;
		this.last_search = 0;
		this.last_search_total = 0;
		this.search_results_div = 0;

		this.game_list_array = new Array();
		this.game_list_total = 0;
		this.bind_code();
		this.genre = [];
		this.price = {};
		this.t_row = new Template('<a href="#{link}" target=_blank>#{name} <span onclick="ag_rek.add_game(#{i});return false;">Добавить</span></a>');
		this.t_genre = new Template("Показов страниц в выбранных жанрах. За неделю: <b>#{w}</b> | За месяц: <b>#{m}</b>");

		this._tooltip = 0;

	},

	onload : function() {
		this._tooltip = new AG.Tooltip();
		this._tooltip.top	= -38;
		this._tooltip.left	= 320;

	},

	bind_code : function() {
	
	},

	get_price : function(id) {
		return this.price[id];
	},

	cache_price_id : function(id) {
		return this.price[id];
	},


	set_pricelist : function(p) {
		this.price = p;

		for(var i=0; i < this.price.length; i++){
			var obj = this.price[i];

		}

	},

	dump_genre_list: function(){
		var line   = new Template("#{name} (Страниц: #{w} в неделю, #{m} в месяц)\r\n");
		var total  = new Template("Всего страниц: #{w} в неделю, #{m} в месяц)\r\n");
		var separator = "-----------------------------------------\r\n";
		copy(this.format_to_clipboard(this.genre, line, total, separator));
		this._tooltip.show('copygenres','Статистика по выбранным жанрам скопирована в буфер обмена (clipboard).<br><br>Теперь вы можете её вставить в письмо, DOC-файл и так далее.');
	},

	check_genre : function(obj,id) {
		// {id:'0','name','NULL','d':0,'w':0,'m':0}
		
		if(obj.checked){ // добавим жанр
			var o = {};
			o['id'] = id;
			o['name'] = genre_data['name'][id];
			o['d'] = genre_data['day'][id]?genre_data['day'][id]:0;
			o['w'] = genre_data['week'][id]?genre_data['week'][id]:0;
			o['m'] = genre_data['mon'][id]?genre_data['mon'][id]:0;
			this.genre.push(o);
		}
		else{ // удалим жанр
			for(var i=0; i < this.genre.length; i++){
				if(this.genre[i]['id'] == id){
					this.genre.splice(i,1);
				}
			}
		}

		var sum = {d:0,w:0,m:0};
		for(var i=0; i < this.genre.length; i++){
			sum['d'] += this.genre[i]['d'];
			sum['w'] += this.genre[i]['w'];
			sum['m'] += this.genre[i]['m'];
		}

		if(this.genre.length){
			$('genres_off').hide();
			$('genres_on').show();
			$('copygenres').style.visibility = 'visible';
		}
		else{
			$('genres_off').show();
			$('genres_on').hide();
			$('copygenres').style.visibility = 'hidden';
		}
		$('genres_on').innerHTML = this.t_genre.evaluate(sum);
	
	},

	load_search_games : function(nick) {
		this.remote.set_param("action","add");
		this.remote.set_param("user_id",nick);
		this.remote.set_param("board_id",current_board);
		this.remote.on_load(this.show_founded_games.bind(this));
		this.remote.load();
	},

	search_response : function(a,request,json) {
		if (a.is_error()){
			alert(a.error_text());
			return;
		}
		if (!a.get('result')){
				return ;
		}
		this.last_search = a.get('list');
		this.last_search_total = a.get('total');
		this.show_search_list();
	},

	game_found_row : function(data,i) {
		data['name'] = data['IS_RUS'] && data['GAME_RUS_NAME'] ? data['GAME_RUS_NAME'] : data['GAME_NAME'];
		data['link'] = '/games/' + data['GAME_SHORT_NAME'];
		data['i'] = i;
		return this.t_row.evaluate(data);
	},

	add_game : function(i) {
		var game = this.last_search[i];

		if(this.game_list_total){
			for(var i=0; i < this.game_list_total; i++){
				if(this.game_list_array[i]['GAME_ID'] == game['GAME_ID']) return;
			}
		}
		
		this.game_list_array.push(game);
		this.game_list_total = this.game_list_array.length;

		if(this.game_list_total > 1){
			this.game_list_array = this.game_list_array.sort(function(a,b){
				var str1 = a['name'];
				var str2 = b['name'];
			    if ( str1 < str2 ) {
					return -1;
			    }
			    else if ( str1 > str2 ) {
					return 1;
			    }
			    else {
					return 0;
			    }		
			
			});
		}
		this.refresh_game_list();
	},

	del_game : function(gid) {
		var game = this.last_search[i];

		if(this.game_list_total){
			for(var i=0; i < this.game_list_total; i++){
				if(this.game_list_array[i]['GAME_ID'] == gid){
					this.game_list_array.splice(i,1);
					this.game_list_total = this.game_list_array.length;
				}
			}
		}

		this.refresh_game_list();
	},

	clear_list : function() {
		this.game_list_array = Array();
		this.game_list_total = 0;
		this.refresh_game_list();
	},

	show_search_list : function() {
		if(!this.last_search_total) {
			this.close_help();
			return;
		}
		var rows = '';
		for(var i=0; i < this.last_search_total; i++){
			rows = rows + this.game_found_row(this.last_search[i],i);
		}

		$('search_menu_links').innerHTML = "<b onclick=\"ag_rek.close_help();$('game_entering').value='введите часть названия игры, которую вы хотите добавить в список';$('game_entering').className='not_entering'\" style=\"width:60px;margin-left:492px;_margin-left:478px;border:1px solid black;background-color:#ee0000;color:white;font-size:9px;padding:1px;font-weight:normal;display:block;cursor:pointer\">очистить</b>" + rows;
		this.open_help();
	},

	close_help : function(){
		if(!this.search_results_div) {
			this.search_results_div = $('search_menu');
		}
		this.search_results_div.style.display = 'none';
	},
	
	open_help : function(){
		if(!this.search_results_div) {
			this.search_results_div = $('search_menu');
		}
		set_pos('search_menu','game_entering',1,2);

	    setTimeout( function() {document.observe("click", closer)}, 1);
	    unsaver();
		
		this.search_results_div.style.display = 'block';
	},
	
	all_connections : function(req,count){
		if(count){
			$('game_entering').className = 'entering';
		}
		else{
			$('game_entering').className = 'not_entering';
		}
		this.check_queue();
	},

	current_connection : function(){
	},

	refresh: function(){
	    var s = $('game_entering').value;
		
		if(this.last_s == s && !this.changed){
			return;
		}

		if(s.length < 3){
			this.close_help();
			return;
		}

		this.last_s = s;
		this.changed = 0;

		var remote = new ag_server();
		remote.set_code("rek");
		remote.set_param("action","search");
		remote.set_param("s",s);
	
		remote.on_load(this.search_response.bind(this));
		remote.on_change_connection_count(this.all_connections.bind(this));
		remote.on_change_connection(this.current_connection.bind(this));
		this.add_queue(remote);
	},

	add_queue: function(obj){
		this.next = obj;
		this.active_connection = 0;
		this.check_queue();
	},

	check_queue: function(obj){
		if(!this.next) return;
		if(this.next.is_browser_connected()){
			return;
		}
		this.active_connection = this.next.load();
		this.next = 0;
	},

	refresh_game_list: function(){

		var list;
		if(this.game_list_total){
			var rows = '';
			var total_week = 0;
			var total_mon = 0;
			for(var i=0; i < this.game_list_total; i++){
			    var data = this.game_list_array[i];
				total_week += data['week'];
				total_mon += data['mon'];
				rows = rows + this.game_list_row(data,i);
			}

			list = this.game_list(rows,total_week,total_mon);
		}
		else{
			list = this.game_empty_list();
		}
		$('main_list').innerHTML = list;
	},

	game_list_row: function(data,i){
		return new Template('<tr id=game1><td class=t1><a class=sb href=#{link} target=_blank>#{name}</a></td><td class="s gray t3">#{week}</td><td class="s gray t3">#{mon}</td><td class=t4 title="Удалить из списка" onclick="ag_rek.del_game(#{GAME_ID})">&#215;</td></tr>').evaluate(data);
	},

	game_list: function(rows,total_week,total_mon){
		return '<table width=100% cellspacing=0 cellpadding=0 id=populated_list class=vipf_users style="border:1px solid gray;border-bottom:none"><tr><td class="s" style="background-color:#efefef">&nbsp;Название игры и количество показов страниц за...</td><td class="s t3" style="background-color:#efefef">неделю</td><td class="s t3" style="background-color:#efefef">месяц</td><td class=t4 style="cursor:default;background-color:#efefef">&nbsp;</td></tr>'+rows+"<tr><td class=\"s\" style=\"background-color:#efefef\">&nbsp;Всего показов страниц выбранных игр: </td><td class=\"s t3\" style=\"background-color:#efefef\"><b>"+total_week+"</b></td><td class=\"s t3\" style=\"background-color:#efefef\"><b>"+total_mon+"</b></td><td class=t4 style=\"background-color:#efefef\"><span class=maroon onclick=\"if(confirm('Очистить весь список?')){ag_rek.clear_list()};\">&#215;</span></td></tr></table>";
	},

	game_empty_list: function(){
		return '<table cellspacing=0 cellpadding=0 id=unpopulated_list class=vipf_users style="border:1px solid gray;border-bottom:none;width:100%;"><tr><td class="s p10 lbw c" style="width:580px;_width:100%;">Пока вы не выбрали ни одной игры &mdash; список пуст.</td></tr></table>';
	},

	dump_game_list: function(){
		var games_line   = new Template("#{name} (Страниц: #{week} в неделю, #{mon} в месяц)\r\n");
		var games_total  = new Template("Всего страниц: #{week} в неделю, #{mon} в месяц)\r\n");
		var separator = "-----------------------------------------\r\n";
		copy(this.format_to_clipboard(this.game_list_array, games_line, games_total, separator));
		this._tooltip.show('copygames','Статистика по выбранным играм скопирована в буфер обмена (clipboard).<br><br>Теперь вы можете её вставить в письмо, DOC-файл и так далее.');
	},
   
	format_to_clipboard :  function (stats, line, total_line, sep) {
    if (stats.length < 0)
      return false;
    
    var res = "";
    var total_counters = {};
    for (var x in stats[0]) {
      total_counters[x] = 0;
    };
    
    for (var i=0; i < stats.length; i++) {
      var r = stats[i];
      res += line.evaluate(r);
      
      for (var key in total_counters) {
        total_counters[key] += r[key];
      }
    };
    res += sep;
    res += total_line.evaluate(total_counters);
    return res;
  }

}

var ag_rek = new ag_rek_class();
var cl_flag = false;

function closer(e) {
  if (cl_flag) {
    ag_rek.close_help();
    document.stopObserving("click", closer);
  }
}


/*
function help_click(e) { 
	alert(1);
	e.cancelBubble = true;
	if (e.stopPropagation) e.stopPropagation();
}
*/
function saver(e) { cl_flag = false; }
function unsaver(e) { cl_flag = true; }
/*
document.observe("dom:loaded", function() {
  var box = $("search_menu");
  box.observe("mouseover", saver);
  box.observe("mouseout", unsaver);
	ag_rek.onload();
//	$('search_menu_links').observe('click', help_click);


});
*/
