function template(str,array,length){
//Это заплатка
	if(!length)length=2;
	return str.replace(
		new RegExp('(\\$|\\?|!)(\\d{1,'+length+'})(?:\\x28((?:[^\\x29]|\\\\\\x29)*)\\x29)?|\\$(\\$|\\?|!)','g'),
		function(str,command,index,content,ecran){
			if(ecran && ecran!=''){return ecran;}
			
			if(!(index in array)){ return str;}
			
			var t='',m=array[+index]||'';
			
			switch(command){
				case '$': t=m; break
				case '?': if(m!='')t=content; break;
				case '!': if(m=='')t=content;
			}

			return t;
		}
	);
};

function multiInterval(timeout,exec){
	var i=0;
	if(!(exec instanceof Array)) exec=[exec];
	var f=setInterval(
		function(){
			if((exec[i])()) if(++i>=exec.length) clearInterval(f);
		},
		timeout
	);
}

function getNavigator(){
	document.body.appendChild(createNodeByArray.d(['div',,
		['select',{id:'ganr_select'},
			['option',{value:'/?0-4'},'Фэнтези'],
			['option',{value:'/?0-5'},'Фантастика'],
			['option',{value:'/?0-6'},'Horror'],
			['option',{value:'/?0-7'},'Школы магии'],
			['option',{value:'/?0-15'},'Повседневность'],
			['option',{value:'/?0-18'},'Другие']
		],
		['input',{type:'button',onclick:function(){updateNavigator('http://roles.borda.ru'+this.previousSibling.value);}}]
	]));
}

function updateNavigator(url){

	var links=[];

	var urlout='http://roles.borda.ru/?7-0-0-00000030-000-0-0';
	var w=window.open(url);
	var razdelname='';
	
	multiInterval(500,[
		function(){
			var ret=false;
			if(w.loaded){
				var t=w.document.body.innerHTML;
				w.close();

				if(razdelname==''){
					razdelname=t.match(/<a[^>]*><u>Форум<\/u><\/a> +\u00BB +<a[^>]*><u>([^<]*)<\/u><\/a>/i)[1];
				}
				t.replace(/<FONT class="font3"><A href="(\/\?1-\d{1,2}-\d+-\d{8}-000-0-0-\d{10})"[^>]*>(http:\/\/[^\s]*) \/ ((?:[^<\x28]|<(?!\/A>)|\x28(?!\d{1,2}.\d{1,2}))*[^\s\x28<])\s*(?:\x28(\d{1,2}.\d{1,2})(?: - ([^\x29]+))?\x29)?<\/A><\/FONT>/gi,
					function(str,url,urlgame,name,dat,res){
						if(name=='')name=urlgame.replace(/http:\/\/|(?:borda|forum24)\.ru/,'');
						links.push([url,urlgame,name,dat,res]);
					}
				);

				url.replace(/\?0-(\d{1,2})(?:-(\d+))?/,function(str,razdel,startpage){
					if(startpage===undefined) startpage=0;
					else startpage=Number(startpage);
					if(t.search(new RegExp('<A href="\\/\\?0-'+razdel+'-'+(startpage+40)+'">','i'))>-1){
						ret=false;
						url='http://roles.borda.ru/?0-'+razdel+'-'+(startpage+40);
						w=window.open(url);
					}
					else{
						ret=true;
						w=window.open(urlout);
					}
				});
			}
			return ret;
		},
		function outputLinks(){
			var ret=false;
			
			if(w.loaded){
				links.sort(function(a,b){
					if(a[2]>b[2]) return 1;
					else if(a[2]<b[2]) return -1;
					else if(a[2]==b[2]){
						if(a[1]>b[1]) return 1;
						else if(a[1]<b[1]) return -1;
					}
				});
				//[url,urlgame,name,dat,res]
				var t='';
				for(var j=0;j<links.length;j++){
					t+=template('[url=$1]<игра>[/url] [b][url=http://roles.borda.ru/$0]$2 ($3?4( - )$4)[/url][/b]\r\n',links[j])
				}
				
				w.theForm.message.value=w.theForm.message.value.replace(
					new RegExp('\\[big\\]\\[b\\]'+razdelname+'\\[\\/b\\]\\[\\/big\\](?:[^\\[]|\\[(?!big\\]\\[b\\]))*','gi'),
					'[big][b]'+razdelname+'[/b][/big]\r\n\r\n'+t+'\r\n\r\n');
				w.theForm.submit();
				
				return true;
			}
			else return false;
		}
	]);

}
