function Lernsys(){
	var statline;
	var usrcl;
	var totalcount;
	var punkte;
	var marksline;
	var marks;
	
	var pstat;
	var pstatcnt;
	var cats;
	
	var selectedQ = -10;
	var exposed;
	var marksCount=0;
	var hardCount=0;
	var unansCount=0;
	this.log = '';
	
	
	this.setStatline = function(line){statline=line;}
	this.setCl = function(cl){usrcl=cl;}
	this.setTotal = function(total){totalcount=total;}
	this.setPunktline = function(punkt){punkte=punkt;}
	this.setMarksline = function(marks){marksline=marks;}
	
	this.process = function(){
		//marks
		var len = marksline.length;
		marks = new Array();
		for(i=0;i<len;i=i+2){
			marks.push(parseInt(marksline.substring(i, i+2), 16));
		}
		
		//statline parse
		pstat = new Array();
		pstatcnt = new Array();
		//zero fill
		for(i=0;i<totalcount;i++){
			pstat[i] = 0;
			pstatcnt[i]=0;
		}
		//line parse
		len = statline.length;
		for (i=0; i<len; i=i+4){
			var sub = statline.substring(i, i+4);
			
			var pos = i/4;
			ts = parseInt(sub, 16);
			cnt = ts%64;
			ts = (ts-ts%64)/64; 
			pstat[pos] = ts;
			pstatcnt[pos]=cnt;
		}
		
		//sort by topic
		cats = new Array();
		for(i=1; i<15; i++) cats[i]=new Array();
		for(i in pstat){
			topic = TopicList.topic(i);
			
			if (cats[topic]) cats[topic].push(i);
		}
		//alert(cats[1]);
		
		
	}
	
	this.showMarked = function(){
		$('a[class^="q-nr"]').attr('style', "display:none");
		$('.lernboxheader a[class$="-m"]').attr('style', "");
		return false;
	}
	
	this.showHard = function(){
		$('a[class^="q-nr"]').attr('style', "display:none");
		$('.lernboxheader a[class*="-red"]').attr('style', "");
		return false;
	}
	
	this.showAll = function(){
		$('a[class^="q-nr"]').attr('style', "");
		return false;
	}
	
	this.showTable = function(){
		var restrict = CurUser.level>0 && CurUser.level<2;
		for(var i=1; i<15; i++){
			document.write('<div class="lernbox" id="topic'+i+'">');
			document.write('<div class="lernboxheader"><h1>');
			if (i<8){document.write(RB_Lang.GRUNDSTOFF+': ');}else{document.write(RB_Lang.ZUSATZSTOFF+': ');}
			document.write(TopicList.fullname(i)+'</h1>');
			Lernsys.log += +i+' '+TopicList.fullname(i)+'\n';
			for (j in cats[i]){
				var pos = cats[i][j];
				var tcnt = pstatcnt[pos];
				var tres = pstat[pos];
				tres = tres%4; 
				marked = '';
				if (valinarray(pos, marks)){
					marksCount++;
					marked = '-m';
				}
				
				if (pos> (totalcount/3) && restrict){
					tcl = '-grey';
					marked = '';
				}else{
					if (tcnt==0){
						tcl = '';
						unansCount++;
					}else if (tcnt==1){
						tcl= (tres==0)?'-red':'-lgreen';
						if (tres==0) hardCount++;
					}else{
						if (tres==3){
							tcl = '-green';
						}else{
							tcl = (tres==1)?'-lgreen':'-red';
							if (tres%2==0) hardCount++;
						}
					}
				}
				document.write('<a id="q'+pos+'" class="q-nr'+tcl+marked+'">'+punkte.charAt(pos)+'</a>');
				//document.write('<a href="#" class="q-nr'+tcl+marked+'">'+pos+'</a>');
			}
			document.write('<br class="clear"></div><div class="lernboxfooter"></div><br class="clear"></div>');
		}
		$('.lernprogress a').attr('href', '#');
		$('.lernprogress a').click(Lernsys.qclickthis);
		$('#unansbtn').html(RB_Lang.NOTANS(unansCount)+'');
		$('#markedbtn').html(RB_Lang.MARKEDQS(marksCount)+'');
		$('#hardsbtn').html(RB_Lang.HARDQS(hardCount)+'');
		if (hardCount==0)$('#hardsbtn').remove();
		if (marksCount==0)$('#markedbtn').remove();
	}
	
	this.qclickthis = function(){
		qnum = $(this).attr('id');
		qnum = qnum.substring(1);
		return Lernsys.qclick(qnum);
	}
	
	this.qclick = function(qnum){
		var oldid = '___';
		var cl = '';
		if (selectedQ>=0){
			var cl = $('#q'+selectedQ+'s').attr('class');
			$('#q'+selectedQ+'s').before('<a href="#" onclick="javascript:return Lernsys.qclick('+selectedQ+');" class="'+cl+'" id="q'+selectedQ+'">'+punkte.charAt(selectedQ)+'</a>');
			$('.lernbox-hl').attr('class', 'lernbox');
			oldid = $('.lernbox-hl').attr('id');
			//exposed.close();
			$('#q'+selectedQ+'s').remove();	
		}
		
		selectedQ = parseInt(qnum);
		
		cl = $('#q'+selectedQ).attr('class');
		$('#q'+selectedQ).before('<span onclick="javascript:return Lernsys.qclick('+selectedQ+');"  class="'+cl+'" id="q'+selectedQ+'s">'+punkte.charAt(selectedQ)+'</span>');
		$('#q'+selectedQ).parents('.lernbox').attr('class', 'lernbox-hl');
		var newid = $('.lernbox-hl').attr('id');
		if (newid!=oldid){
			exposed = $('.lernbox-hl').expose({api:true, onBeforeClose: function(){$('#ticket').hide();}});
			exposed.load();
		}
		$('#ticket').hide();
		$('#q'+selectedQ).remove();
		
		if (selectedQ> (totalcount/3) && CurUser.level<2){
			$('#ticket').html(UiHelp.ticketUnavailable());
			$('#ticket').center();
			$('#ticket').show();
			return false;
		}else{
			$.ajax({type: "GET", url: '/qtool-display/'+selectedQ+'/'+usrcl, async: true, success: Lernsys.qloaded});
		}
			
		return false;
	}
	
	this.qloaded = function(data){
		var tid = TopicList.topic(selectedQ);
		
		data = data.varReplace('topic', TopicList.fullname(tid));
		if (tid<8){
			data = data.varReplace('cl', 13);
		}else{
			data = data.varReplace('cl', usrcl);
		}
		var locstat = pstat[selectedQ];
		var loccnt = pstatcnt[selectedQ];
		var right=0;
		for (cnt=0; cnt<loccnt; cnt++){
			if (locstat%2==1){
				right++; locstat--;
			}
			locstat = locstat/2;
		}
		
		data = data.varReplace('right', ''+right);
		data = data.varReplace('wrong', ''+(pstatcnt[selectedQ]-right));
		
		$('#ticket').html(data);
		$('#ticket').center();
		$('#ticket').show();
	}
	
	this.startTraining = function(tp){
		if (tp==5){
			//demo training box
		}else{
			mb = new MessageBox(UiHelp.getGameStartWin(tp));
			mb.show();
		}
		return false;
	}
	this.lsStart = function(tp){
		cnt = $('input[name="lerntp"]:checked').val();
		sofort = $('#sofortPrufen').attr('checked')?1:0;
		document.location = '/lernstart/'+tp+'/'+cnt+'/'+sofort;
	}
	
}
function qwinClose(){
	$('#ticket').hide();
	return false;
}
var Lernsys = new Lernsys();
