function contestClass(id, arrowId){

	var c1=jml.obj;
	var c2=jml.xml.node;
	var c3=jml.events;
	
	var id=id||null;
	var arrowId = arrowId||null;
	if(!isset(id)||!isset(arrowId)) return;
	
	var container = {contest:null,questions:null,total:null,conclusions:null,arrow:null};
	var questions = {total:null,repondu:0,score:[]};
	var underFrame;	
	
	function init(){
		
		if(!isset(container.contest)) container.contest = getObj(id);
		if(!isset(container.contest)) return;
		
		var x1=c2.byPosition(1,container.contest);
		if(isset(x1)&&!isset(container.questions)) container.questions = x1;
		if(!isset(container.questions)) return;
		
		var x1=c2.byPosition(2,container.contest);
		if(isset(x1)){
			var x2=c2.byPosition(1,x1);
			if(isset(x2)&&!isset(container.total)) container.total = x2;
		}
		if(!isset(container.total)) return;

		var x1=c2.byPosition(3,container.contest);
		if(isset(x1)&&!isset(container.conclusions)) container.conclusions = x1;
		if(!isset(container.conclusions)) return;
		
		if(!isset(container.arrow)) container.arrow = getObj(arrowId);
		if(!isset(container.arrow)) return;
		
		var n1 = c2.length(container.questions);
		if(isset(n1)&&!isset(questions.total)) questions.total = n1;
		for(var i=0;i<n1;i++){
			var x1=c2.byPosition(i,container.questions);
			if(isset(x1)){
				if(i==0) placeArraow(true, x1);
				var x2=c2.byPath('0.1.0.1.0',x1);
				if(isset(x2)){
					var n2=c2.length(x2);
					for(var j=0;j<n2;j++){
						var x3=c2.byPosition(j,x2);
						if(isset(x3)){
							var x4=c2.byPath('0.0',x3); 
							if(isset(x4)) c3.add(x4,'click',delegate(null,activateNextQuestion,x1,i,j+1));
						}
					}
				}
			}
		}
	}
	function placeArraow(visible, node){
		if(!visible) c1.set(container.arrow,'visibility','hidden');
		if(!isset(node)||!visible) return;
		var n1 = c1.get(node, 'offsetLeft');
		var n2 = c1.get(node, 'offsetTop');
		var n3 = c1.get(node, 'offsetHeight');
		var n4 = c1.get(container.arrow, 'offsetHeight');
		var n5 = c1.get(container.arrow, 'offsetWidth');
		var n6 = c1.get(container.arrow, 'offsetHeight');
		
		var n7 = n1-Math.floor(n5/2)-2;
		var n8 = n2+Math.floor(n3/2)-Math.floor(n4/2);
		var n9=10;
		var n10 =Math.floor(n9/2);
		
		c1.set(container.arrow,'left',n7+'px');
		c1.set(container.arrow,'top',n8+'px');
		c1.set(container.arrow,'visibility','visible');
		
		if(!isset(underFrame)&&lower(navigator.userAgent).match('msie 6')!=null){
			underFrame=c2.create('DIV',document.body);
			c1.set(underFrame,'innerHTML','<iframe></iframe>');
			c1.set(underFrame,'className','ie6UnderFloatBugForm');
		}		
		if(underFrame!=null){
			c1.set(underFrame,'width',(n5+n9)+'px');
			c1.set(underFrame,'height',(n6+n9)+'px');
			c1.set(underFrame,'left',(n7-n10)+'px');
			c1.set(underFrame,'top',(n8-n10)+'px');
			c1.set(underFrame,'visibility','visible');
		}		
	}
	
	function activateNextQuestion(e, node, questionIndex, scoreValue){
		if(!isset(node)) return;
		var x2=c2.byProximity(node,1);
		if(isset(x2)){
			c1.set(x2,'className','');
			placeArraow(true, x2);
		}else{
			placeArraow(false);
		}
		if(!isset(questions.score[questionIndex])) questions.repondu++;	
		questions.score[questionIndex] = scoreValue;
		displayTotal();
	}
	function displayTotal(){
		var a = questions.score;
		var n=0;
		for(var i = 0; i < a.length; i++) n+=a[i];
		var n1 = Math.round(n/questions.repondu);
		var x1 = c2.byPosition(1, container.total);
		if(isset(x1)) c1.set(x1,'innerHTML',n1);
		if(questions.total == questions.repondu){
			var x2 = c2.byPath('0.1',container.conclusions);
			if(isset(x2)){
				var n2 = c2.length(x2);
				for(var i=0;i<n2;i++){
					var x3 = c2.byPosition(i,x2);
					c1.set(x3,'className',i==n1-1?'selected':'');
					if(i==n1-1) placeArraow(true,x3);
				}
			}
		}
	}
	return {
		$:function(){
			c3.add(window,'load',init);
			return this;
		}
	}.$();
}
