function MsgB (idLight){
    this.lightb = $("light");
    this.fadeb = $("fade");
	if (this.fadeb == null){
		this.fadeb = new Element('div', {'id': 'fade', 'class':'black_overlay'}).injectInside(document.body);
	}
}

var supportsFixed = false;
MsgB.prototype.show = function(){

	if (typeof document.body.style.maxHeight != "undefined")
		supportsFixed = true;

	document.getElementById('light').style.display = 'block';
	document.getElementById('fade').style.display = 'block';
	this.center(document.getElementById('light'), false);
	if (!supportsFixed) {
		document.getElementById('fade').style.position = 'absolute';
		this.center(document.getElementById('fade'), true);
	}	
	
	
    this.lightb.effect('opacity',{duration:500}).start(0,1);
    this.fadeb.effect('opacity',{duration:500}).start(0,0.8);
    

    this.lightb.onclick = function(){
        document.getElementById('light').style.display='none';
        document.getElementById('fade').style.display='none';
    }
    this.fadeb.onclick = this.lightb.onclick;
	//document.body.style.overflow = 'hidden';
	//window.document.style.overflow = 'hidden';
}


MsgB.prototype.center = function(element, stretch){
    var my_width  = 0;
    var my_height = 0;

    if ( typeof( window.innerWidth ) == 'number' ){
        my_width  = window.innerWidth;
        my_height = window.innerHeight;
    }else if ( document.documentElement && 
             ( document.documentElement.clientWidth ||
               document.documentElement.clientHeight ) ){
        my_width  = document.documentElement.clientWidth;
        my_height = document.documentElement.clientHeight;
    }
    else if ( document.body &&
            ( document.body.clientWidth || document.body.clientHeight ) ){
        my_width  = document.body.clientWidth;
        my_height = document.body.clientHeight;
    }

    if (stretch){
        element.style.width = my_width + "px";
        element.style.height = my_height + "px";
    }
    //element.style.position = 'absolute';
    //element.style.zIndex   = 99;

    var scrollY = 0;

    if ( document.documentElement && document.documentElement.scrollTop ){
        scrollY = document.documentElement.scrollTop;
    }else if ( document.body && document.body.scrollTop ){
        scrollY = document.body.scrollTop;
    }else if ( window.pageYOffset ){
        scrollY = window.pageYOffset;
    }else if ( window.scrollY ){
        scrollY = window.scrollY;
    }

	
    var setX = ( my_width  - element.offsetWidth  ) / 2;
    var setY = ( my_height - element.offsetHeight ) / 2 + scrollY;

	if (stretch) {
		setX = 0;
		setY = scrollY;
	}
	
	if (supportsFixed){
		setY -= scrollY;
	}
    setX = ( setX < 0 ) ? 0 : setX;
    setY = ( setY < 0 ) ? 0 : setY;

    element.style.left = setX + "px";
    element.style.top  = setY + "px";
    
    

    element.style.display  = 'block';
}
//change the opacity for different browsers
MsgB.prototype.changeOpac = function(oElm, opacity) {
    var object = oElm.style;
    object.opacity = (opacity / 100);
    object.MozOpacity = (opacity / 100);
    object.KhtmlOpacity = (opacity / 100);
    object.filter = "alpha(opacity=" + opacity + ")";
}

// JScript File
var QuizUtils = new Object();

QuizUtils.hasClassName = function(oElm, strClassName){
	var strCurrentClass = oElm.className;
	return (new RegExp(strClassName, "i").test(strCurrentClass));
}

QuizUtils.addEventSimple = function(obj,evt,fn) {
	if (obj.addEventListener)
		obj.addEventListener(evt,fn,false);
	else if (obj.attachEvent)
		obj.attachEvent('on'+evt,fn);
}

QuizUtils.removeEventSimple  = function(obj,evt,fn) {
	if (obj.removeEventListener)
		obj.removeEventListener(evt,fn,false);
	else if (obj.detachEvent)
		obj.detachEvent('on'+evt,fn);
}


/*
	Copyright Robert Nyman, http://www.robertnyman.com
	Free to use if this text is included
	http://www.robertnyman.com/js/ej.js
	Modified by Nathanael Jones
*/
// ---
/*function $(strId){
	return document.getElementById(strId);
}*/
// ---
QuizUtils.getElementsByClassName = function(oElm, strTagName, strClassName){
	var arrElements = (strTagName == "*" && oElm.all)? oElm.all : oElm.getElementsByTagName(strTagName);
	var arrReturnElements = new Array();
	strClassName = strClassName.replace(/\-/g, "\\-");
	var oRegExp = new RegExp("(^|\\s)" + strClassName + "(\\s|$)");
	var oElement;
	for(var i=0; i<arrElements.length; i++){
		oElement = arrElements[i];		
		if(oRegExp.test(oElement.className)){
			arrReturnElements.push(oElement);
		}	
	}
	return (arrReturnElements)
}

//MAKE SURE NO CSS CLASSES ARE SUBSTRINGS OF ONE ANOTHER!!!!!

// ---
QuizUtils.addClassName = function (oElm, strClassName){
	var strCurrentClass = oElm.className;
	if(!new RegExp(strClassName, "i").test(strCurrentClass)){
	    
		oElm.className = strCurrentClass + ((strCurrentClass.length > 0)? " " : "") + strClassName;
	}
}
// ---
QuizUtils.removeClassName = function(oElm, strClassName){
	var oClassToRemove = new RegExp((strClassName + "\s?"), "i");
	if(oClassToRemove.test(oElm.className)){   
	    oElm.className = oElm.className.replace(oClassToRemove, "").replace(/^\s?|\s?$/g, "");
	}
}
// ---

QuizUtils.getFirstAncestorByTagName = function(oElm, tagName){
	if (oElm.parentNode == null) return null;
	if (new RegExp("^" + tagName + "$", "i").test(oElm.parentNode.nodeName)) return oElm.parentNode;
	else return QuizUtils.getFirstAncestorByTagName(oElm.parentNode,tagName);
}


QuizUtils.registerHandlers = function(){
	AnswerFx = [];
	$$('.freeformWrapper textarea').each(function(ta, ix){
	    ta.afx= new Fx.Styles(ta, {wait: false, duration: 300});
		ta.addEvent('mouseenter',function(){
			if (!ta.hasClass('selected')){
				ta.afx.setOptions(FreeformTranstions.onHover);
				ta.afx.start(FreeformColors.hover);
			}
		});
		ta.addEvent('mouseleave',function(){
			if (!ta.hasClass('selected')) {
				ta.afx.setOptions(FreeformTranstions.onHoverEnd);
				ta.afx.start(FreeformColors.normal);
			}
		});
		ta.addEvent('focus',function(){
			if (!ta.hasClass('selected')) {
			    ta.addClass('selected');
				ta.afx.setOptions(FreeformTranstions.onSelected);
				ta.afx.start(FreeformColors.selected);
			}
		});
		ta.addEvent('blur',function(){
			if (ta.hasClass('selected')) {
			    ta.removeClass('selected');
				ta.afx.setOptions(FreeformTranstions.onSelectedEnd);
				ta.afx.start(FreeformColors.normal);
			}
		});
	});
	$$('li.answer a').each(function(anch, ix){
		
		anch.afx= new Fx.Styles(anch, {wait: false, duration: 300});
		anch.addEvent('mouseenter',function(){
			if (!anch.hasClass('selected')){
				anch.afx.setOptions(AnswerTranstions.onHover);
				anch.afx.start(AnswerColors.hover);
			}
		});
		anch.addEvent('mouseleave',function(){
			if (!anch.hasClass('selected')) {
				anch.afx.setOptions(AnswerTranstions.onHoverEnd);
				anch.afx.start(AnswerColors.normal);
			}
		});
		

		
		anch.addEvent('click', function(){
			//find child option button.
		    var inputArr = anch.getElementsByTagName("input");
			
			//select (others automatically deselect)
			inputArr[0].checked = true;
			inputArr[0].focus();
			
			var questionLi = QuizUtils.getFirstAncestorByTagName(anch,"li"); //get answer li;
			questionLi = QuizUtils.getFirstAncestorByTagName(questionLi,"li"); //get question li;
			
			if (questionLi == null) alert("error");
			//get parent li of parent li. Remove "selected" class from all child anchor elements
			$(questionLi).getElements('a.selected').each(function(elm,ix){
				QuizUtils.removeClassName(elm,"selected");
				elm.afx.setOptions(AnswerTranstions.onSelectedEnd);
				elm.afx.start(AnswerColors.normal);
			});
			
		    //add selected class to this anchor element.
			anch.afx.setOptions(AnswerTranstions.onSelected);
			anch.afx.start(AnswerColors.selected);
			QuizUtils.addClassName(anch,"selected");
			return true;
		});
		
		
	});
}

window.addEvent('domready', function() {
	if ($$('ol.questionsChecked').length == 0) {
		QuizUtils.registerHandlers();
	}
});

