
var Displayer = new function(){
	
	this.ShowFApplications = function (data){
		var apps = data['data'];
		var vblock = document.getElementById(config.TMyApp.HEADER);
		vblock.innerHTML = "У вас " + apps.length + " "+ helper.PluralForm(apps.length, 'приложение','приложения','приложений');
		vblock.innerHTML += "<p align='right'><a href='"+config.search+"'>Все приложения</a></p>";
		
		var vblocks = document.getElementById(config.TMyApp.BLOCK);
		for (i in apps)if (i.toString().match(/^\d+/g)!=null){
			vblocks.innerHTML+="<div class='pfs_app1'>"+
				"<img src='"+apps[i].img_src+"' width=100 height=100/><br/><div>"+
				"<a href="+config.app+"?c=view&id="+apps[i].id+">"+apps[i].name+"</a><br/>"+
				"<img src='"+apps[i].rimg+"' title='Рейтинг: "+apps[i].rating+"'><br/>"+
				"<small>"+apps[i].members+" "+helper.PluralForm(apps[i].members,'участник','участника','участников')+"</small></div></div>";
		}
	}
	this.ShowFAppBlock = function (data){
		var apps = data['data'];
		var block = getBlock(config.TGlobal.FAPPS);
		block.innerHTML="";
		for (i in apps) if (i.toString().match(/^\d+/g)!=null){
			if(i % 2 == 1) 
				block.innerHTML += "<li ><img src='"+apps[i].img_small+"' class='icon' align='absmiddle'> <a href='"+config.app+"?c=view&id="+apps[i].id+"'>"+apps[i].name+"</a><br/>";
			else 
				block.innerHTML += "<li class=even><img src='"+apps[i].img_small+"' class='icon' align='absmiddle' > <a href='"+config.app+"?c=view&id="+apps[i].id+"'>"+apps[i].name+"</a><br/>";
		}
		block.innerHTML+="<p align=right>"+apps.length+" приложений из "+data['count']+"<BR><a href='"+config.my_apps+"'>Показать все</a></p>";
	}
	this.ShowUserApps = function (data){
		var apps = data.data;
		var block = helper.getBlock('user_apps');
		block.innerHTML = "";
		DPaginator.Insert('paginator', data['page'], data['pages'], 'MainDataProvider.getUserApps');
		for (i in apps) if (i.toString().match(/^\d+/g)!=null){
			block.innerHTML+="<div class='pfs_app_tumb'>"+
				"<img width=100 height=100 src='"+apps[i].img_src+"'/><div>"+
				"<div><a href="+config.app+"?c=view&id="+apps[i].id+">"+apps[i].name+"</a></div>"+
				"<div class='pfs_app_rate'><img src='"+apps[i].rimg+"' title='Рейтинг: "+apps[i].rating+"'>   &nbsp; &nbsp;Игроки: "+apps[i].members+"</div>"+
				"<div class='pfs_app_info'>"+apps[i].description+"</div></div></div>";
		}
	}
	this.ShowLogin = function (data){
		alert(data);
	}
	this.ShowLogout = function (data){
		alert(data);
	}
	this.view = function (data){
		//Debug.Trace(data);
		alert('view');
	}
	this.ShowTopApplications = function (apps){
		var block = getBlock(config.TMain.TOP);
		
		block.innerHTML="<h1>Популярные</h1>";
		for (i in apps) if (i.toString().match(/^\d+/g)!=null){
			block.innerHTML+="<div class='pfs_app'>"+
				"<a href="+config.app+"?c=view&id="+apps[i].id+">"+
				"<img src='"+apps[i].img_src+"' width=100 height=100/><br/>"+
				apps[i].name+"</a><br/>"+
				"<small>"+apps[i].members+" "+helper.PluralForm(apps[i].members,'участник','участника','участников')+"</small></div>";
		}
	}
	this.ShowCatTop = function (apps){
		var block = helper.getBlock(config.TMain.CAT_TOP);
		block.innerHTML="";
		for (cat in apps){
			var html = "";
			html += "<div class='pfs_block_app'>"+
				"<h1><a href='"+config.search+"#type="+cat.split('_')[1]+"'>"+cat.split('_')[0]+"</a></h1>";
			
			for (i in apps[cat]) if (i.toString().match(/^\d+/g)!=null){
				html+="<div class='pfs_app1'>"+
		            "<div><a href='"+config.app+"?c=view&id="+apps[cat][i].id+"'>"+
		            "<img src='"+apps[cat][i].img_src+"' width=100 height=100/>"+
		            apps[cat][i].name+"</a><br>"+
		            "<img src='"+apps[cat][i].rimg+"' title='Рейтинг: "+apps[cat][i].rating+"'><br/>"+
		            apps[cat][i].description+
		            "</div>"+
		        "</div>";
			}
			html+="</div>";
			block.innerHTML+=html;
		}
	}
	
	this.ShowApplication = function (app){
		var nameb = helper.getBlock(config.TApp.NAME);
		var descb = helper.getBlock(config.TApp.DESCRIPTION);
		nameb.innerHTML = app.name;
		descb.innerHTML = app.description;
		if (app.role!='anonymous'){
			descb.innerHTML+="<BR><div style='float:right'><a href='/profile/"+app.owner_id+"/byid'>"+app.nickname+"</a></div>";
			helper.getBlock(config.TApp.MENU).innerHTML = "<a href='"+config.my_apps+"'>Мои приложения</a>";
			helper.getBlock(config.TApp.MENU).innerHTML += (app.flag==null)?"<a href='?c=view&id="+app.api_id+"&act=join'>Добавить приложение на страницу</a>":
				"<a href='?c=view&id="+app.api_id+"&act=quit'>Убрать приложение со страницы</a>";
			if (app.role=='owner')
				helper.getBlock(config.TApp.MENU).innerHTML += "<a href='" + config.edit + "?id="+app.api_id+ "'>Редактировать</a>";
			var block = helper.getBlock(config.TApp.EMBEDED);
			block.innerHTML = "Loading...";
			if (app.src=='')
				block.innerHTML="Приложение еще не загружено автором";
			else 
				CreateApplication(app);
			AppConfig.setBalance(app['value']);
			DVoter.init(helper.getBlock(config.TApp.VOTE),app);
		} else {
			helper.getBlock(config.TApp.EMBEDED).innerHTML="<span style='font-size:20pt; color:red;'>Зарегистрируйтесь на сайте, прежде чем просматривать приложения!</span>";
		}
	}
	function CreateApplication (app){
		
		var so = new SWFObject(app.src,'player',app.width,app.height,'9');
		var params = {
			allowfullscreen: "true",
			allownetworking: app.network,
			allowscriptaccess: "never"
		};
		var flashVars = {
			api_url:"http://88.198.65.109/api/api.php",
			api_id: app.api_id,
			viewer_id: app.viewer_id,
			viewer_type: app.viewer_type,
			user_id: app.user_id,
			group_id: app.group_id,
			is_app_user: app.is_app_user,
			auth_key: app.auth_key,
			language: app.language
		};
		for (param in params)
			so.addParam(param, params[param]);
		for (fv in flashVars)
			so.addVariable(fv, flashVars[fv]);
		
		//so.useExpressInstall('swf/expressinstall.swf');
		so.write(config.TApp.EMBEDED);
	}	
	
	function getBlock (name){
		return document.getElementById(name);
	}
}

var DVoter = new function (){
	this.currentVote = 0;
	this.block = null;
	this.voted = false;
	
	this.init = function (block, app){
		this.currentVote = app['votes'];
		this.vote_count = app['vote_count'];
		this.block = block;
		this.Create();
	}
	
	this.Create = function (){
		var type="";
		var content = "";
		for (i=1; i<=5; i++)
			content+="<img src='/i/sempty.PNG' name="+i+" onmouseover='DVoter.OnOver(this)' onmouseout='DVoter.OnOut(this)' onclick='DVoter.OnClick(this)' style='cursor:pointer'>";
		this.block.innerHTML=content;
		this.block.innerHTML += "<BR><div>Всего оценок: " + this.vote_count + "</div>";
		DVoter.block.title = "Средняя оценка: " + this.currentVote;
		this.refresh(this.currentVote);
	}
	this.OnOver = function (obj){
		//if (! DVoter.voted)
			DVoter.refresh(obj.name);
	}
	this.OnOut = function (obj){
		//if (! DVoter.voted)
			DVoter.refresh(this.currentVote);
	}
	this.OnClick = function (obj){
		if (! DVoter.voted)
			AppConfig.OnVote(obj.name);
	}
	this.OnSave = function (res){
		if (res == 0){
			DVoter.block.childNodes[6].innerHTML = "Вы уже голосовали";
			DVoter.refresh(DVoter.currentVote);
		} else {
			DVoter.currentVote = res;
			DVoter.refresh(res);	
			DVoter.block.childNodes[6].innerHTML = "Спасибо, ваш голос учтен!";
		}
		DVoter.voted = true;
	}
	this.refresh = function (cur){
		for (i=0; i<5; i++){
			var el = this.block.childNodes[i];
			if (el.name<=cur)
				el.src = "/i/sfill.PNG";
			else 
				if (el.name<=Math.round(cur)){
					el.src = "/i/shalf.PNG";
				} else 
					el.src = "/i/sempty.PNG";
		}
			
	}
}

var DGlobal = new function (){
	this.ShowBalance = function (b){
		block = helper.getBlock(config.TGlobal.BALANCE);
		block.innerHTML = b/100;
	}
}

var DAppConfig = new function(){
	this.visible = false;
	this.Show = function (){
		this.visible = true;
		conf_block = helper.getBlock(config.TAppConfig.BLOCK);
		conf_block.style['display']='block';
	}
	this.Hide = function (){
		this.visible = false;
		conf_block = helper.getBlock(config.TAppConfig.BLOCK);
		conf_block.style['display']='none';
	}
	this.ShowBalance = function (b){
		if ( ! this.visible) this.Show();
		var app_block = helper.getBlock(config.TAppConfig.BALANCE);
		app_block.innerHTML = b/100;
	}
	this.ShowError = function (error){
		if ( ! this.visible) this.Show();
		conf_block = helper.getBlock(config.TAppConfig.ERROR);
		conf_block.innerHTML = error;
	}
	
}


var DSearch = new function (){
	this.ShowResults = function (data){
		var vblocks = document.getElementById(config.TSearch.BLOCK);
		helper.getBlock(config.TSearch.FIND).innerHTML="Найдено приложений: "+data['items']+" ";
		vblocks.innerHTML="";
		DPaginator.Insert('paginator', data['page'], data['pages'], 'Search.go');
		var apps = data['data'];
		for (i in apps)if (i.toString().match(/^\d+/g)!=null){
			vblocks.innerHTML+="<div class='pfs_app1'>"+
				"<img src='"+apps[i].img_src+"'/><br/><div>"+
				"<a href="+config.app+"?c=view&id="+apps[i].id+">"+apps[i].name+"</a><br/>"+
				"<img src='"+apps[i].rimg+"' title='Рейтинг: "+apps[i].rating+"'><br/>"+
				"<small>"+apps[i].members+" "+helper.PluralForm(apps[i].members,'участник','участника','участников')+"</small></div></div>";
		}
	}
	this.ShowCatalog = function (cat){
		var vblocks = document.getElementById(config.TSearch.CATALOG_BLOCK);
		var temp="";
		for (i in cat)if (i.toString().match(/^\d+/g)!=null){
			temp+="<option value='"+cat[i].id+"'>"+cat[i].name+"</option>";
		}
		vblocks.innerHTML="<select onchange='Search.go();' id='"+config.TSearch.CATALOG+"' style='width:200px'><option value=0>Любой</option>"+temp+"</select>";
	}
}

var DPaginator = new function (){
	this.Insert = function (where, current, total, callback){
		var block = helper.getBlock(where);
		block.innerHTML="";
		for (i=current-3; i<total || i<current+3; i++ ) if (i>=1 && i<=total){
			if (i==current)
				block.innerHTML+="<b>"+i+"</b> ";
			else
				block.innerHTML+="<a onclick=\""+callback+"({'page':"+i+"}); return false;\" href='#page="+i+"'>"+i+"</a> ";
		}
	}
}

var DEditor = new function (){
	this.ShowApp = function (app){
		helper.getBlock(config.TEdit.NAME).value = app.name;
		helper.getBlock(config.TEdit.DESC).value = app.description;
		helper.getBlock(config.TEdit.SCLIENT).value = app.sclient;
		helper.getBlock(config.TEdit.SSERVER).value = app.sserver;
		helper.getBlock(config.TEdit.STATE).value = app.visible;
		helper.getBlock(config.TEdit.TYPE).value = app.type;
		helper.getBlock(config.TEdit.BIG_IMG).src = app.img_src;
		helper.getBlock(config.TEdit.SMALL_IMG).src = app.img_small;
		helper.getBlock(config.TEdit.ID).innerHTML = app.id;
		helper.getBlock(config.TEdit.LINK).innerHTML = "<a href='"+config.app+'?c=view&id='+app.id+"'>"+app.name+"</a>";
	}
	this.ShowCatalog = function (cat){
		var sel = helper.getBlock(config.TEdit.TYPE);
		for (i in cat ) if (i.toString().match(/^\d+/g)!=null){
			sel.options.add(new Option(cat[i].name, cat[i].id));
		}
	}
}

var helper = new function (){
	this.getBlock = function (name){
		return document.getElementById(name);
	}	
	this.PluralForm = function (n, form1, form2, form5){
	    n = Math.abs(n) % 100;
	    n1 = n % 10;
	    if (n > 10 && n < 20) return form5;
	    if (n1 > 1 && n1 < 5) return form2;
	    if (n1 == 1) return form1;
	    return form5;
	}
}
