var testParams;
var currentTest;
var currentQuestion = 'loading...';
var currentAnswers = ['loading...','loading...','loading...','loading...'];
var ft = 0;
var loadimg = document.createElement("img");
loadimg.src="/images/loader.gif";
loadimg.width="25";

function parseTime(runtime){
		var minutes = Math.floor(runtime / 60000);
   		var seconds = Math.floor(runtime % 60000 / 1000);
   		var decimals = Math.floor(runtime % 1000 / 100);
   		var displayText = minutes + ":" + (seconds < 10 ? "0" : "") + seconds;
		jQuery("#lblExamTime B").html(displayText);
}

if(stopwatch == null){
var stopwatch = new Stopwatch(function(runtime) {
   		// format time as m:ss.d
   		var minutes = Math.floor(runtime / 60000);
   		var seconds = Math.floor(runtime % 60000 / 1000);
   		var decimals = Math.floor(runtime % 1000 / 100);
   		var displayText = minutes + ":" + (seconds < 10 ? "0" : "") + seconds;
           
  		 // writing output to screen
   		jQuery("#lblExamTime B").html(displayText);
});
}

function rebind(){

var executeData = function(){};

var dataHolder = {
					testParams: null,
					currentTest: null,
					currentAttempt: null,
					reTitle: null,
					currentQuestionId: null,
					review: false,
					scrollPosition: 0,
					params: null,
					listArray: [],
					reviewArray: []
				 };

var Exam = {
    _isAdmin: true, // 
    _initialized: false,
    _timestamp: null,
    _begun: false,
    _stage: 'start',
    _selectedAnswer: [],
    _currentProgress: 0,
    _isComplete: 0,
    holdLoad: null,
    _data: {
	q: "loading...", 
	a: ['loading...','loading...','loading...','loading...']
    },
    _curQ: 1,
    _countQs: 20,
    _qStates: ['', 'marked', 'review', 'correct', 'wrong'],
    _pctDone: 0,

    $btnQ: null, // $ element for Current Question (highlighting changes, etc.)
    $cnvQ: null, // $ element for Question Canvas.
    $cnvA: [],	 // Array of $ elements for Question Answer Canvases.

    initTitle: 'HRCP - Testing Center',

    stopBubble: function(e) {
	e.stopPropagation();
	e.preventDefault();
    },

    btnReviewClick: function(e, params) {
	e.stopPropagation();
	e.preventDefault();
	
    	var startParams = params.split("^^");
   		dataHolder.currentAttempt = startParams[0];
    	dataHolder.currentTest = startParams[1];
   		dataHolder.reTitle = startParams[2];
   		dataHolder.review = true;
   		
   		var theTest = dataHolder.currentTest;
    	var userAttempt = dataHolder.currentAttempt;
  		var loadURL = "/testcenter/loadattempt?test="+theTest+"&attempt="+userAttempt+"&rd=1";
		jQuery.ajax({
		type: "POST",
  		url: loadURL,
  		success: function(dataui){
  		jQuery('#scriptContent').append(dataui);
  		
  		dataHolder.listArray = listArray;
  		dataHolder.reviewArray = reviewArray;
		Exam._selectedAnswer = answerArray;
		Exam.reinit(dataHolder.currentTest);
		Exam.reviewExam(e);
  		}
  		});
    },

    togQuestionForReview: function() {      
      (this.checked) 
        ? Exam.$btnQ.addClass('review')
	: Exam.$btnQ.removeClass('review');
    },
    
    
    

    btnBeginClick: function(e) {
    reParams = dataHolder.currentAttempt+'^^'+dataHolder.currentTest+'^^'+dataHolder.reTitle;

    Exam.reQueryAnswers(reParams);
    
    	// A Stopwatch instance that displays its time nicely formatted.
		// starting
		stopwatch.stopTimer();
		if (dataHolder.review == false){
			if (!stopwatch.timer){
		//stopwatch.setTime();
				stopwatch.startStop();
		//m:ss.d
			}
		}
		// stopping
		//stopwatch.startStop();
       	
       	dataHolder.review = false;

    //jQuery('#pnlExamUI').unbind();
    //jQuery('#pnlExamUI').html('');
    var newTitle = jQuery('#lstChooseExam').find(':selected').text();
    
    if(dataHolder.reTitle != null){
    	newTitle = dataHolder.reTitle;
    } 
	jQuery('#pnlExamQuestion').html('<div id="loadingicon"></div><h1>LOADING...</h1>');
	    jQuery(loadimg).appendTo('#loadingicon');

	jQuery('#lstQuestionAnswers').html('<li></li>');
	jQuery('#pnlExamButtons').html('');
	jQuery('#lblQuestionNumber').html('');
	jQuery('#removeme').remove();

	
	jQuery('#scriptContent').remove();
  	jQuery('<span id="scriptContent"></span>').insertAfter('#pnlContent');

    dataURL = '/testcenter/testdata?question='+Exam._curQ+'&test='+dataHolder.currentTest;
    jQuery.ajax({
			type: "POST",
  			url: dataURL,
  			success: function(data){
  			
  			jQuery('#scriptContent').appendTo();
  			jQuery('#scriptContent').html(data);
  			Exam._countQs = totalQuestions;
  			//testRedata();
            jQuery('#examDialog').dialog('option', 'title', newTitle);
            jQuery('#frmExamInstructions').hide();
            jQuery.ajax({
			type: "POST",
  			url: "/testcenter/ui",
  			success: function(dataui){
  			    Exam.qnum = Exam._curQ;
  			    jQuery('#theQuestion').remove();
				jQuery('#pnlExamUI').remove();
  			jQuery('#pnlExamQuestion').html('');
  			jQuery('#frmExamUI').remove();
  			jQuery('<div id="pnlExamUI"></div>').insertAfter('#frmExamInstructions');
  			jQuery('#pnlExamUI').html(dataui);
  			
                    jQuery('#chkQuestionForReview').click(Exam.togQuestionForReview);
				   
     				jQuery('#pnlExamUI')
                    .find('#btnExamPrev').button({icons:{primary:'ui-icon-triangle-1-w'}}).unbind().click(Exam.btnPrevClick).end()
                    .find('#btnExamNext').button({icons:{secondary:'ui-icon-triangle-1-e'}}).unbind().click(Exam.btnNextClick).end()
                    .find('#btnExamEnd').button({icons:{secondary:'ui-icon-check'}}).end()
                    .find('#btnMarkForReview').button({icons:{secondary:'ui-icon-circle-check'}}).unbind().click(Exam.btnMarkForReview).end()
                    .find('#lstExamQuestions LI').empty().die().live('click', Exam.lstQuestionClick).end()
                    .submit(Exam.btnEndExamClick);
     				
			Exam.displayQuestion();
				
			SAVE_HEIGHT = 0;
			
		  	jQuery('#lstQuestionAnswers').find('LI').die().live('click', Exam.btnAnswerClick).find('LABEL B').each(function(i) {
		  		
		  		
		  		if(jQuery.browser.msie){
		  		jQuery('CANVAS').die('click').unbind('click');
		  		jQuery('CANVAS').click(function() { return false; });
   				} else {
   				jQuery('#lstQuestionAnswers LI').removeClass('addPointer');
   				jQuery('#lstQuestionAnswers LI').addClass('addPointer').end().blur();
   				
   				jQuery('#lstQuestionAnswers LI B').removeClass('addPointer');
   				jQuery('#lstQuestionAnswers LI B').addClass('addPointer').end().blur();;

   				}

		  		
		  		Exam.displayAnswers(this, i);			
		 	 });
   			
		  	
		  	Exam.updateProgress();
		                
            Exam._begun = true;
  			
  			}
  			});
  		}
	});
    },
    
    reviewExam: function(e){
    	e.stopPropagation();
     	e.preventDefault();
     	
		stopwatch.stopTimer();
   		var newTitle = "(REVIEW) - "+dataHolder.reTitle;

       	jQuery('#progressbox').hide();
       	jQuery('#lblExamProgress').hide();
       	
   		jQuery('#pnlExamQuestion').html('<div id="loadingicon"></div><h1>LOADING...</h1>');
	    jQuery(loadimg).appendTo('#loadingicon');
		jQuery('#lstQuestionAnswers').html('<li></li>');
		jQuery('#pnlExamButtons').html('');
		jQuery('#lblQuestionNumber').html('');
		jQuery('#removeme').remove();
		jQuery('#feedback').remove();
	
		jQuery('#scriptContent').remove();
  		jQuery('<span id="scriptContent"></span>').insertAfter('#pnlContent');

    	dataURL = '/testcenter/testdata?question='+Exam._curQ+'&test='+dataHolder.currentTest+'&rd=1&attempt='+dataHolder.currentAttempt;
    	jQuery.ajax({
			type: "POST",
  			url: dataURL,
  			success: function(data){
  			
  			jQuery('#scriptContent').appendTo();
  			jQuery('#scriptContent').html(data);
  			Exam._countQs = totalQuestions;
  			//testRedata();
            jQuery('#examDialog').dialog('option', 'title', newTitle);
            jQuery('#frmExamInstructions').hide();
            jQuery.ajax({
			type: "POST",
  			url: "/testcenter/ui",
  			success: function(dataui){
  			    Exam.qnum = Exam._curQ;
  			    
  			    jQuery('#theQuestion').remove();
				jQuery('#pnlExamUI').remove();
  				jQuery('#pnlExamQuestion').html('');
  				jQuery('#frmExamUI').remove();
  				jQuery('<div id="pnlExamUI"></div>').insertAfter('#frmExamInstructions');
  				jQuery('#pnlExamUI').html(dataui);
  				jQuery('<div style="float:right; margin:0 0 0 50px;"><button id="btnViewScore">View Score</button></div>').appendTo('#pnlExamButtons');
  				jQuery('#btnMarkForReview').remove();
     				jQuery('#pnlExamUI')
     				.find('#btnViewScore').button({icons:{primary:'ui-icon-check'}}).unbind().click(Exam.btnViewScore).end()
                    .find('#btnExamPrev').button({icons:{primary:'ui-icon-triangle-1-w'}}).unbind().click(Exam.btnPrevReviewClick).end()
                    .find('#btnExamNext').button({icons:{secondary:'ui-icon-triangle-1-e'}}).unbind().click(Exam.btnNextReviewClick).end()
                    .find('#btnExamEnd').remove().end()
                    .find('#lstExamQuestions LI').empty().die().live('click', Exam.lstQuestionClick).end()
                    .submit(Exam.btnEndExamClick);
     				
     				jQuery('#pnlExamUI').find('INPUT').remove();
     				
			Exam.displayQuestion();
			parseTime(currentTime);
			if(currentFeedback){
			jQuery('#feedback').remove();
			jQuery('<div id="feedback" class="ui-corner-all"><p>Feedback</p><span></span></div>').insertAfter('#lstQuestionAnswers');
			jQuery('#feedback SPAN').html(currentFeedback);
			}
			
			SAVE_HEIGHT = 0;
		  	jQuery('#lstQuestionAnswers').find('LABEL B').each(function(i) {
		  		Exam.displayAnswers(this, i);		
		  		
		  		if(jQuery.browser.msie){
		  		jQuery('CANVAS').die('click').unbind('click');
		  		jQuery('CANVAS').click(function() { return false; });
   				}
   						
		 	 }).die(); 
   			
		  	
		  	Exam.updateProgress();
		                
            Exam._begun = true;
  			
  			}
  			});
  		}
	});
    },
    
    displayQuestion: function(){
    var CANVAS_WIDTH = 555;
				var CANVAS_HEIGHT = 200;				 
		 	  	var canvasElem = document.createElement('canvas');
				if (window.G_vmlCanvasManager != undefined) {
					G_vmlCanvasManager.initElement(canvasElem);
				}
    			canvasElem.setAttribute("width", CANVAS_WIDTH);
    			canvasElem.setAttribute("id", "theQuestion");
    			ctx = canvasElem.getContext('2d');
    			document.getElementById('pnlExamQuestion').appendChild(canvasElem);

				var alltext = getLines(ctx, currentQuestion, CANVAS_WIDTH,"bold 14px 'Arial'");
				
				var NEW_HEIGHT = 25;
				NEW_HEIGHT += alltext.length*NEW_HEIGHT;
    			document.getElementById('pnlExamQuestion').removeChild(canvasElem);
				
				document.getElementById('pnlExamQuestion').appendChild(canvasElem);
    			canvasElem.setAttribute("width", CANVAS_WIDTH);
    			canvasElem.setAttribute("height", NEW_HEIGHT);
    			canvasElem.setAttribute("id", "theQuestion");
    			canvasElem.setAttribute("rel",currentQuestionId);
    			dataHolder.currentQuestionId = currentQuestionId;
    			
				ctx = canvasElem.getContext('2d');
			  	ctx.fillStyle = '#369';
			  	ctx.font = "bold 14px 'Arial'";
			  	ctx.height = NEW_HEIGHT;
				var alltext = getLines(ctx, currentQuestion, CANVAS_WIDTH,"bold 14px 'Arial'");
				
				var linebreak = 0;
				for ( var i=0, len=alltext.length; i<len; ++i ){
					linebreak += 25;
					ctx.fillText(alltext[i], 0, linebreak);
				}
    },
    
    displayAnswers: function(obj, i){
		  	jQuery(obj).empty();
		  		var CANVAS_WIDTH = 500;
				var CANVAS_HEIGHT = 20;				 
		 	  	var answerElem = document.createElement('canvas');
				if (window.G_vmlCanvasManager != undefined) {
					G_vmlCanvasManager.initElement(answerElem);
				}
    			answerElem.setAttribute("width", CANVAS_WIDTH);
    			answerElem.setAttribute("id", "theAnswer"+i);
    			atx = answerElem.getContext('2d');
    			obj.appendChild(answerElem);

				var allAnswers = getLines(atx, currentAnswers[i], CANVAS_WIDTH,"normal 13px 'Arial'");
				var NEW_HEIGHT = 25;
				
				NEW_HEIGHT = allAnswers.length*NEW_HEIGHT;
				
				if(SAVE_HEIGHT != undefined){
				 if(SAVE_HEIGHT > NEW_HEIGHT){
				 	NEW_HEIGHT = SAVE_HEIGHT;
				 }
				}
				
				SAVE_HEIGHT = NEW_HEIGHT;
				
    			obj.appendChild(answerElem);
				
    			answerElem.setAttribute("width", CANVAS_WIDTH);
    			answerElem.setAttribute("height", NEW_HEIGHT);
    			answerElem.setAttribute("id", "theAnswer"+i);
    			
    			jQuery('#lstQuestionAnswers LI').height(SAVE_HEIGHT);
    			
				atx = answerElem.getContext('2d');
				atx.fillStyle = '#444',
			  	atx.height = NEW_HEIGHT;
			  	atx.font = "normal 13px 'Arial'";
				var allAnswers = getLines(atx, currentAnswers[i], CANVAS_WIDTH,"normal 13px 'Arial'");
				
				var linebreak = 0;
				for ( var i=0, len=allAnswers.length; i<len; ++i ){
					linebreak += 20;
					var answerSplit = allAnswers[i].split("^^");
					atx.fillText(answerSplit[0], 0, linebreak);
					answerElem.setAttribute("rel",answerSplit[1]);

					if (Exam._selectedAnswer[Exam._curQ] != null){
						if (Exam._selectedAnswer[Exam._curQ] == answerSplit[1]){
							if(dataHolder.review != true){
							jQuery(obj).parent().parent().addClass('selected').end().blur();
							jQuery(obj).parent().parent().find('INPUT').attr('checked',true);
							//jQuery(obj).parent('LI').find('INPUT').addClass('selected').end().blur();
							} else {
							 
							jQuery(obj).parent().parent().addClass('answerIncorrect').end().blur();
							jQuery(obj).parent().parent().find('INPUT').attr('checked',true);
							}
							
							
						}
					}
					if(dataHolder.review == true){
						findAnswer = dataHolder.listArray[Exam._curQ].split('^^');
						if (findAnswer[0] == answerSplit[1]){
							jQuery(obj).parent().parent().addClass('correctAnswer').end().blur();
						} else {
							//jQuery(obj).parent().parent().addClass('incorrect').end().blur();
						}
					}
				}
		  },
    
    updateProgress: function() {
    if (dataHolder.reviewArray[Exam._curQ] == 1){
  		jQuery('#btnMarkForReview B').html('Unmark for Review');
  	} else {
  		jQuery('#btnMarkForReview B').html('Mark For Review');
  	}
	if (dataHolder.review == true){
    jQuery('#progressbox').hide();
    jQuery('#lblExamProgress').hide();
    }
    jQuery('#lstExamQuestions').html('');
    var qState = 0,
		      countQStates = jQuery(Exam._qStates).size();
			Exam._currentProgress = 0;
			if(currentUnit != 0){
				jQuery('#fromUnit').remove();
				jQuery('<div id="fromUnit">Unit <span></span></div>').appendTo('#lblQuestionNumber');
				jQuery('#fromUnit SPAN').html(currentUnit);
			}
			
    for (i = 1; i <= Exam._countQs; i++) {
		  		jQuery('#removeme').remove();
				
			//console.log(qState, Exam._qStates[qState]);
			var $lbl = jQuery('<li>#<b>'+ i +'</b><i class="icon"></i></li>')
			  .addClass('ui-corner-all')
			  .appendTo('#lstExamQuestions');
			
			qState++;
			$lbl.removeClass('answered');
			$lbl.removeClass('correct');
			$lbl.removeClass('incorrect');
			if (qState >= countQStates) { qState = 0; }
			
			if (Exam._selectedAnswer[i] == 0){
				Exam._selectedAnswer[i] = null;
			}
			
			if (Exam._selectedAnswer[i] != null){
				$lbl.addClass('answered');
			}
			
			if (dataHolder.review == true){
				compareAnswer = dataHolder.listArray[i].split('^^');
				if (compareAnswer[0] == compareAnswer[1]){
					$lbl.addClass('correct');
				} else {
					$lbl.addClass('incorrect');
				}
			}
			 $lbl.removeClass('markedReview');
			 if (dataHolder.reviewArray[i] == 1 && dataHolder.review != true){
				//$lbl.removeClass('answered');
			 	$lbl.addClass('markedReview');
			 }
			
			(i == Exam._curQ) ? $lbl.addClass('active') : $lbl.removeClass('active');
			var num = Exam._curQ;
			jQuery('#lblQuestionNumber').find('B').text(num);
			Exam._pctDone = Exam._curQ;
			if (Exam._pctDone > 100) Exam._pctDone = 0;
			//jQuery('#pnlExamProgressBar').progressbar('value', (Exam._curQ/Exam._countQs)*100);
				if (Exam._selectedAnswer[i] != undefined ){
					Exam._currentProgress += 1;
				}
				if (Exam._currentProgress == Exam._countQs){
				    lastParams = dataHolder.currentAttempt+'^^'+dataHolder.currentTest+'^^'+dataHolder.reTitle;
					Exam.reQueryLast(lastParams);
				} else {
					Exam._isComplete = 0;
					jQuery('#btnExamEnd').addClass('ui-state-disabled').attr('disabled','disabled');
				}
			if (dataHolder.review != true){
			jQuery('#testPercent').html(Math.round((Exam._currentProgress/Exam._countQs)*100)+'%');
			jQuery('#pnlExamProgressBar').progressbar({ value: (Exam._currentProgress/Exam._countQs)*100 });
			}
			
			(Exam._curQ == 1) 
			? jQuery('#btnExamPrev').addClass('ui-state-disabled').attr('disabled','disabled') 
	 		: jQuery('#btnExamPrev').removeClass('ui-state-disabled').attr('disabled', '');
	
			(Exam._curQ == Exam._countQs) 
			? jQuery('#btnExamNext').addClass('ui-state-disabled').attr('disabled','disabled')
	  		: jQuery('#btnExamNext').removeClass('ui-state-disabled').attr('disabled', '');

		  }
		  
		  jQuery.getElemHeight = function(D){
    		return Math.max(
       		 D.height(),
       		 D.attr('scrollHeight'),
       		 D.attr('clientHeight'),
       		 D.attr('offsetHeight')
    		);

			};


		  	//getHeight = Math.max(jQuery('#lstExamQuestions').attr('scrollHeight'), jQuery('#lstExamQuestions').attr('clientHeight'));
			getHeight = jQuery.getElemHeight(jQuery('#lstExamQuestions'));

		  	currentPercent = (Exam._curQ / Exam._countQs);
		  	currentAverage =  getHeight / Exam._countQs;
		  	getScollPercent = currentPercent * getHeight;
		  	dataHolder.scrollPosition = (getHeight * currentPercent) - currentAverage;
			jQuery('#lstExamQuestions').scrollTop(dataHolder.scrollPosition);

    },
    
    btnViewScore: function(e) {
    e.stopPropagation();
	e.preventDefault();

    },

    btnAnswerClick: function() {
    //alert('hrmmm');
	jQuery('#lstQuestionAnswers').find('LI').removeClass('selected');
	jQuery('#lstQuestionAnswers').find('INPUT').attr('checked','');
	jQuery(this).addClass('selected').end().blur();
	jQuery(this).find('INPUT').attr('checked','checked');
	//jQuery(this).parent('LI').addClass('selected').end().blur();
	//Exam._selectedAnswer[Exam._curQ] = jQuery(this).parent('LI').find('CANVAS').attr('rel');
	if(jQuery(this).find('CANVAS').attr('rel') == "undefined" || dataHolder.review){
	
	} else {
	Exam._selectedAnswer[Exam._curQ] = jQuery(this).find('CANVAS').attr('rel');
	
		var theTest = dataHolder.currentTest;
    	var theQuestion = dataHolder.currentQuestionId;
    	var userAttempt = dataHolder.currentAttempt;
    	var userAnswer = jQuery(this).find('CANVAS').attr('rel');
							
							
		var saveURL = "/testcenter/saveanswer?test="+theTest+"&question="+theQuestion+"&attempt="+userAttempt+"&answer="+userAnswer+"&timer="+stopwatch.runtime;
							jQuery.ajax({
							type: "POST",
  							url: saveURL,
  								success: function(dataui){
  								Exam.updateProgress();
  								}
  							});
  	}

    },

    lstQuestionClick: function(e) {
   	e.stopPropagation();
	e.preventDefault();
	var num = parseInt(jQuery(this).find('B').text());
	var qnum = Exam._curQ - 1;

	num = (num > Exam._countQs) ? Exam._countQs : (num < 0) ? 0 : num;
	
	if (Exam.$btnQ) {
	  Exam.$btnQ.removeClass('active');
	}

	Exam.$btnQ = jQuery(this).addClass('marked active');

	(num == 1) 
	  ? jQuery('#btnExamPrev').addClass('ui-state-disabled').attr('disabled','disabled') 
	  : jQuery('#btnExamPrev').removeClass('ui-state-disabled').attr('disabled', '');
	
	(num == Exam._countQs) 
	  ? jQuery('#btnExamNext').addClass('ui-state-disabled').attr('disabled','disabled') 
	  : jQuery('#btnExamNext').removeClass('ui-state-disabled').attr('disabled', '');
	
	Exam._curQ = num;
	if (dataHolder.review){
		Exam.reviewExam(e);
	} else {
		Exam.btnBeginClick();
	}
	jQuery('#lblQuestionNumber').find('B').text(num);
	// Sperimental.
	
    },
    
        
    btnPrevReviewClick: function(e) {
      Exam.stopBubble(e);
      Exam._curQ -= 1;
      Exam.reviewExam(e, dataHolder.params);
      
    },

    btnNextReviewClick: function(e) {
      Exam.stopBubble(e);
      Exam._curQ += 1;
      Exam.reviewExam(e, dataHolder.params);
    },
    

    btnPrevClick: function(e) {
      Exam.stopBubble(e);
      Exam._curQ -= 1;
      Exam.btnBeginClick();
      
    },

    btnNextClick: function(e) {
      Exam.stopBubble(e);
      Exam._curQ += 1;
      Exam.btnBeginClick();
    },
    
    btnMarkForReview: function(e) {
      Exam.stopBubble(e);
      
      var theTest = dataHolder.currentTest;
      var theQuestion = dataHolder.currentQuestionId;
      var userAttempt = dataHolder.currentAttempt;
							
	  var markURL = "/testcenter/markforreview?test="+theTest+"&question="+theQuestion+"&attempt="+userAttempt+"&timer="+stopwatch.runtime;
      
		jQuery.ajax({
		type: "POST",
  		url: markURL,
  		success: function(dataui){
  			if (dataHolder.reviewArray[Exam._curQ] == 1){
  				dataHolder.reviewArray[Exam._curQ] = 0;
  			} else {
  				dataHolder.reviewArray[Exam._curQ] = 1;
  			}
  			Exam.updateProgress();
  		}
  		});
    },
    
    btnResumeClick: function(params) {
    //alert(params);
    var startParams = params.split("^^");
   	dataHolder.currentAttempt = startParams[0];
    dataHolder.currentTest = startParams[1];
    dataHolder.reTitle = startParams[2];
    
    	var theTest = dataHolder.currentTest;
    	var userAttempt = dataHolder.currentAttempt;
  		var loadURL = "/testcenter/loadattempt?test="+theTest+"&attempt="+userAttempt;
		jQuery.ajax({
		type: "POST",
  		url: loadURL,
  		success: function(dataui){
  		jQuery('#scriptContent').append(dataui);
  		stopwatch.setTime(currentTime);
		Exam._selectedAnswer = answerArray;
		dataHolder.reviewArray = reviewArray;
		Exam.reinit(dataHolder.currentTest);
		Exam.btnBeginClick();
  		}
  		});
    },
    
    reQueryAnswers: function(params) {
    //alert(params);
    var startParams = params.split("^^");
   	dataHolder.currentAttempt = startParams[0];
    dataHolder.currentTest = startParams[1];
    //dataHolder.reTitle = startParams[2];
    
    	var theTest = dataHolder.currentTest;
    	var userAttempt = dataHolder.currentAttempt;
  		var loadURL = "/testcenter/requeryanswers?test="+theTest+"&attempt="+userAttempt;
		jQuery.ajax({
		type: "POST",
  		url: loadURL,
  		success: function(dataui){
  		jQuery('#scriptContent').append(dataui);
		Exam._selectedAnswer = answerArray;
		dataHolder.reviewArray = reviewArray;
  		}
  		});
    },
    
    reQueryLast: function(params) {
      //alert(params);
    var startParams = params.split("^^");
   	dataHolder.currentAttempt = startParams[0];
    dataHolder.currentTest = startParams[1];
    dataHolder.reTitle = startParams[2];
    
    	var theTest = dataHolder.currentTest;
    	var userAttempt = dataHolder.currentAttempt;
  		var loadURL = "/testcenter/requeryanswers?test="+theTest+"&attempt="+userAttempt;
		jQuery.ajax({
		type: "POST",
  		url: loadURL,
  		success: function(dataui){
  		
  		Exam._currentProgress = 0;
		for (i = 1; i <= Exam._countQs; i++) {
			if (Exam._selectedAnswer[i] != undefined ){
				Exam._currentProgress += 1;
			}
		}
		
  		jQuery('#scriptContent').append(dataui);
		Exam._selectedAnswer = answerArray;
		dataHolder.reviewArray = reviewArray;
				if (Exam._currentProgress == Exam._countQs){
					Exam._isComplete = 1;
					jQuery('#btnExamEnd').removeClass('ui-state-disabled').attr('disabled', false);
					jQuery('#btnExamEnd').die().live('click', Exam.btnEndExamClick);
				} else {
					Exam._isComplete = 0;
					jQuery('#btnExamEnd').addClass('ui-state-disabled').attr('disabled','disabled');
					Exam.btnBeginClick();
				}
  		}
  		});
    },
    
    btnFirstStart: function(e) {
    // Create new test attempt for this test
    Exam.stopBubble(e);

   			 if(ft!=1){
  			 custom_confirm('<br /><h2>This will use one of your attempts, do you wish to proceed?</h2>NOTE: If you have a test already in progress that you wish to resume, close all pop-up boxes and click on the "Resume" button next to your test within the list of "Tests in Progress" on the main "My HRCP" page.', 
  			 				function(e){
  			 				var theTest = dataHolder.currentTest;
  			 				var createURL = "/testcenter/createattempt?test="+theTest;
							jQuery.ajax({
							type: "POST",
  							url: createURL,
  								success: function(dataui){
  									jQuery('#scriptContent').append(dataui);
  									dataHolder.currentAttempt = newAttempt;
  									//alert(newAttempt);
  									Exam.btnBeginClick();

  								}
  							});
					}, 'Are you sure?');
			} else {
					var theTest = dataHolder.currentTest;
  			 				var createURL = "/testcenter/createattempt?test="+theTest;
							jQuery.ajax({
							type: "POST",
  							url: createURL,
  								success: function(dataui){
  									jQuery('#scriptContent').append(dataui);
  									dataHolder.currentAttempt = newAttempt;
  									//alert(newAttempt);
  									Exam.btnBeginClick();

  								}
  							});
			}
  			
    },

    btnEndExamClick: function(e) {
      e.stopPropagation();
      e.preventDefault();
      var totalInReview = 0;
      var reviewResponse = "<br /><h2>This will end the test and calculate your final score</h2> You will no longer be able to change answers if you proceed.";
      for (var i=0;i<dataHolder.reviewArray.length;i++) {
      	if(dataHolder.reviewArray[i] == 1){
      		totalInReview += 1;
      	}
      }
      
      if (totalInReview > 0){
      	reviewResponse += "<br /><br /><p><strong>Notice:</strong><br />You currently have <span class='largeNumber'>"+totalInReview+"</span> questions marked for review, do you wish to proceed?</p>";
      }
      
      custom_confirm(reviewResponse, 
  			 				function(e){
  			 				var theTest = dataHolder.currentTest;
  			 				var theAttempt = dataHolder.currentAttempt;
  			 				var createURL = "/testcenter/scoreattempt?test="+theTest+"&attempt="+theAttempt;
							jQuery.ajax({
							type: "POST",
  							url: createURL,
  								success: function(scoredata){
  									//jQuery('#scriptContent').append(dataui);
  									//dataHolder.currentAttempt = newAttempt;
  									//alert(newAttempt);
  									//Exam.btnBeginClick();
  									jQuery('#pnlExamUI').html(scoredata);
  								}
  							});
					}, 'Score Exam, Are you sure?');
    },
    
    btnViewScore: function(e) {
      e.stopPropagation();
      e.preventDefault();
      var totalInReview = 0;
      for (var i=0;i<dataHolder.reviewArray.length;i++) {
      	if(dataHolder.reviewArray[i] == 1){
      		totalInReview += 1;
      	}
      }
      
      if (totalInReview > 0){
      }
  			 				var theTest = dataHolder.currentTest;
  			 				var theAttempt = dataHolder.currentAttempt;
  			 				var createURL = "/testcenter/scoreattempt?test="+theTest+"&attempt="+theAttempt;
  			 				jQuery('#pnlExamUI').html();
  			 				jQuery('#pnlExamUI').html('<div id="preload"></div><h1>RETRIEVING SCORE...</h1>');
	    					jQuery(loadimg).appendTo('#preload'); 
							jQuery.ajax({
							type: "POST",
  							url: createURL,
  								success: function(scoredata){
  									jQuery('#pnlExamUI').html(scoredata);
  								}
  							});
    },

    lstExamsChange: function(obj) {
        dataHolder.currentTest = jQuery(obj).val();
    },

    init: function(e, params) {
    	stopwatch.resetTimer();
        jQuery('#examDialog').html(Exam.holdLoad);

     	dataHolder.currentTest = params;
     	for (var j=0;j<farr.length;j++) {
      	if(farr[j] == dataHolder.currentTest){
      		ft = 1;
      	}
      }
     	
		Exam._timestamp = new Date().valueOf();
        jQuery('#frmExamUI').remove();
        jQuery('#examDialog').dialog('option', 'title',  Exam.initTitle);
        
        Exam._begun = false;
 		jQuery('#frmExamInstructions').show();
		jQuery("#lstChooseExam option[value='"+params+"']").attr("selected", true);
        jQuery('#examDialog').dialog('open');
       
        jQuery('#frmExamUI').hide(0, function() {
            jQuery('#frmExamInstructions').show(0);
        });
                
        jQuery('#frmExamInstructions').unbind().submit(Exam.stopBubble);

		jQuery('#btnExamReview').unbind().button({icons:{primary:'ui-icon-comment'}})
		.click(Exam.reviewExam);

		jQuery('#btnExamResume').unbind().button({icons:{primary:'ui-icon-refresh'}})
		.click();

		jQuery('#btnExamBegin').unbind().button({icons:{primary:'ui-icon-arrowthick-1-e'}})
		.click(Exam.btnFirstStart);
		
        jQuery('#lstChooseExam').die().live('change',function(){Exam.lstExamsChange(this)});
	                 
         Exam._initialized = true;
    },
    
    reinit: function(params) {
    	stopwatch.stopTimer();
     	dataHolder.currentTest = params;
		Exam._timestamp = new Date().valueOf();
        jQuery('#frmExamUI').remove();

        jQuery('#examDialog').dialog('option', 'title',  Exam.initTitle);
        
        Exam._begun = true;
 		jQuery('#frmExamInstructions').show();
        jQuery('#examDialog').dialog('open');
       	jQuery('#pnlExamUI').html('');
        jQuery('#frmExamInstructions').html('<div id="preload"></div><h1>LOADING...</h1>');
	    jQuery(loadimg).appendTo('#preload'); 
        
        }

};
jQuery(document).ready(function() {
	
jQuery('#examDialog').live('dialogclose', function(event) {

					function unloadAll(){
  			 		jQuery(loadimg).appendTo('#loadicon');
  						//location.reload();
  						
  					currentURL = window.location.pathname;
  					if(currentURL.indexOf('?') == -1){
 						currentURL += '?random='+randomString();
 					} else {
 						currentURL += '&random='+randomString();
 					}
  					var reloadURL = currentURL;
					jQuery.ajax({
					type: "POST",
  					url: reloadURL,
  					success: function(dataload){
  							 jQuery('#pnlContent').html('');
  							 jQuery('#pnlContent').html(dataload);
  							 jQuery('#reloader').dialog('close').remove();
  							 var testParams;
					
					currentTest = null;
					currentQuestion = 'loading...';
					currentAnswers = ['loading...','loading...','loading...','loading...'];


					dataHolder.testParams = null;
					dataHolder.currentTest = null;

					dataHolder.currentAttempt = null;

					dataHolder.reTitle = null;

					dataHolder.currentQuestionId = null;

					dataHolder.review = false;
					dataHolder.params = null;
					dataHolder.listArray = [];
					dataHolder.reviewArray = [];
					
					Exam._initialized =  false;
    				Exam._timestamp =  null;
   					Exam._begun =  false;
    				Exam._stage =  'start';
    				Exam._selectedAnswer =  [];
    				Exam._currentProgress =  0;
   					Exam._isComplete =  0;
   				 	holdLoad =  null;

    				Exam._curQ =  1;
    				Exam._countQs =  0;
    				Exam._pctDone =  0;
    				
    				answerArray = [];
					listArray = [];
					reviewArray = [];
					ft=0;
					currentTest = null;
 					currentUnit = null;
 					totalQuestions = null;
 					currentQuestion = null;
 					currentQuestionId = null;
 					currentAnswers = null;
 					correctAnswer = null;
 					currentFeedback = null;
 					userIsCorrect = null;
					newAttempt = null;
					}
  					
  					});
  					}

	 				custom_notice('<br /><h2 style="margin-bottom:0">Reloading data, please wait.</h2>', 
  			 		function(){

  			 				var theTest = dataHolder.currentTest;
  			 				var theAttempt = dataHolder.currentAttempt;
  			 				var createURL = "/testcenter/savetime?attempt="+theAttempt+"&timer="+stopwatch.runtime;
							if(dataHolder.review == false){
							jQuery.ajax({
							type: "POST",
  							url: createURL,
  								success: function(saveAttempt){
  								}
  							});
  							}
  							unloadAll();
					}, 'Reloading');
	});
	

  jQuery('<span id="scriptContent"></span>').insertAfter('#pnlContent');
        
  jQuery('#lstNavi DIV.note').hide();

  jQuery('#lstNavi A').hover(
    function() { jQuery(this).css('color','#FFC').next().show('fast'); },
    function() { jQuery(this).css('color','#DC9').next().hide('fast'); }
  );

  var startURL = "/testcenter/instructions";
					jQuery.ajax({
					type: "POST",
  					url: startURL,
  					success: function(dataload){
  							 	Exam.holdLoad = dataload;
  								jQuery('<div id="examDialog">Loading...</div>').insertAfter('#pnlContent').dialog({
       							title: Exam.initTitle,
        						height: 500, 
        						width: 800,
        						cache: false,
        						modal: true, 
        						draggable: false,
        						autoOpen: false,
        						resizable: false,
        						scrollable: false,
        						closeOnEscape: false
        						}).html(dataload);
  						     }
  					});
  

  jQuery('.btnExamOpen').die().live('click', function(e){
 		Exam.init(e, jQuery(this).attr('rel'));
  });
  
  jQuery('.btnResumeExam').die().live('click',function(e){
  		Exam.btnResumeClick(jQuery(this).attr('rel'));
  });
  
  jQuery('.reviewExam').die().live('click',function(e){
  		dataHolder.params = jQuery(this).attr('rel');
  		Exam.btnReviewClick(e, jQuery(this).attr('rel'));
  });
  
});

};
function getLines(ctx,phrase,maxPxLength,textStyle) {
	if(phrase == undefined){
		phrase = "undefined";
	}
    var wa = phrase.split(" ");
    var phraseArray = new Array();
    var lastPhrase = '';
    ctx.font = textStyle;
    var l=maxPxLength;
    var measure=0;
    for (var i=0;i<wa.length;i++) {
        var w=wa[i];
        measure=ctx.measureText(lastPhrase+w).width;
        if (measure<l) {
        	if (i == 0 ){
            lastPhrase+=(w);
        	} else {
            lastPhrase+=(" "+w);
            }
        }else {
            phraseArray.push(lastPhrase);
            lastPhrase=w;
        }
        if (i==wa.length-1) {
            phraseArray.push(lastPhrase);
            break;
        }
    }
    return phraseArray;
}

function custom_confirm(prompt, action, title){
    if (title === undefined) title = "Are you sure?";
    jQuery('#confirm').die().unbind().remove();
    jQuery("body").append('<div id="confirm" title="' + title + '">' + prompt + '</div>');
    jQuery("#confirm").dialog({position: 'center', width: 700, modal: true, resizable: false, buttons: {'Cancel': function(){ jQuery(this).dialog('close').remove(); }, Proceed: function(){ jQuery(this).dialog('close').remove(); action(); }}, close: function(ev, ui) { jQuery(this).remove();}});
}

function custom_notice(prompt, action, title){
    if (title === undefined) title = "Reloading";
    jQuery('#reloader').die().unbind().remove();
    jQuery("body").append('<div id="reloader" title="' + title + '"><div id="loadicon"></div>' + prompt + '</div>');
    jQuery("#reloader").dialog({position: 'center', width: 400, height: 100, modal: true, resizable: false, open:action()});
}


rebind();
