/*
 * Author: Miguel Torrez ignitecast.com
 * Date: 01-28-2015
 *
 * IgniteCast JavaScript Player Quiz Results View(IC_JSP_Views_Quiz_Results)
 *
 * jQuery Dependent
 *
 * Constructor object that creates, and handles the Ignite Cast JavaScript player.
 */
function IC_JSP_Views_Quiz_Results(obj, $el, prefix) {
	var ui, c, d, f;
	ui = this;
	ui.$cas_body = null;
	ui.$cas_continueBtn = null;
	ui.$cas_footer = null;
	ui.$cas_header = null;
	ui.$cas_innerWrapper = null;
	ui.$cas_percent = null;
	ui.$el = null;
	ui.$player = null;
	ui.appendTo = null;
	ui.config = {
		flags : {
			created : false,
			debug : true,
			init : false,
			setup : false,
			showing : false
		}
	};
	ui.currentExercise = null;
	ui.currentLesson = null;
	ui.currentView = null;
	ui.percent = null;
	ui.prefix = null;
	ui.resultsBody = {
		percent : {
			defaultText : '0'
		}
	};
	ui.create = function() {
		if(d) {
			console.warn('RUNNING create METHOD IN PLAYER Confirm Answer Screen OBJECT!');
		}
		var tpl;
		ui.remove();
		tpl = '<div class="ip-quiz-results-wrapper">';
		tpl += '	<table>';
		tpl += '		<tbody>';
		tpl += '			<tr>';
		tpl += '				<td class="ip-quiz-results-wrapper-cell">';
		tpl += '					<div class="ip-quiz-results-innerWrapper">';
		tpl += '						<div class="ip-quiz-results-header">Quiz Grade<button class="fa fa-remove ip-quiz-results-closeBtn" title="Close"></button></div>';
		tpl += '						<div class="ip-quiz-results-body">';
		tpl += '							<div class="ip-quiz-results-correctAnswer">';
		tpl += '								<p class="ip-quiz-results-correctAnswer-percent"><span>' + ui.resultsBody.percent.defaultText + '</span>%</p>';
		tpl += '							</div>';
		tpl += '						</div>';
		tpl += '						<div class="ip-quiz-results-footer">';
		tpl += '							<button class="ip-quiz-results-continueBtn ip-player-standard-btn invert"><i></i>Continue</button>';
		tpl += '						</div>';
		tpl += '					</div>';
		tpl += '				</td>';
		tpl += '			</tr>';
		tpl += '		</tbody>';
		tpl += '	</table>';
		tpl += '</div>';
		if(d) {
			console.warn('RUNNING create METHOD IN PLAYER Confirm Answer Screen OBJECT!');
		}
		ui.$el = $(tpl);
		ui.appendTo.append(ui.$el);
		ui.$cas_innerWrapper = ui.$el.find('.ip-quiz-results-innerWrapper');
		ui.$cas_header = ui.$el.find('.ip-quiz-results-header');
		ui.$cas_body = ui.$el.find('.ip-quiz-results-body');
		ui.$cas_footer = ui.$el.find('.ip-quiz-results-footer');
		ui.$cas_percent = ui.$el.find('.ip-quiz-results-correctAnswer-percent span');
		ui.$cas_continueBtn = ui.$el.find('.ip-quiz-results-continueBtn');
		f.created = true;
		if(d) {
			console.warn('SUCCESSFULLY RAN create METHOD IN PLAYER stage OBJECT!');
		}
		return;
	};
	ui.hide = function() {
		if(d) {
			console.warn('RUNNING hide METHOD IN PLAYER Confirm Answer Screen OBJECT!');
		}
		ui.$player.removeClass('showingJSPlayerQuizResultsView');
		f.showing = false;
		if(d) {
			console.warn('SUCCESSFULLY RAN hide METHOD IN PLAYER Confirm Answer Screen OBJECT!');
		}
		return;
	};
	ui.init = function(obj) {
		if(d) {
			console.warn('RUNNING init METHOD ON PLAYER Confirm Answer Screen OBJECT!');
		}
		ui.$player = $el;
		ui.prefix = prefix;
		ui.create();
		ui.setEvents();
		f.init = true;
		if(d) {
			console.warn('SUCCESSFULLY RAN init METHOD ON PLAYER Confirm Answer Screen OBJECT!');
		}
		return;
	};
	ui.remove = function(obj) {
		if(d) {
			console.warn('RUNNING remove METHOD IN PLAYER Confirm Answer Screen OBJECT!');
		}
		if(ui.$el === undefined || ui.$el === null) {
			if(d) {
				console.warn('FAILED TO REMOVE Confirm Answer Screen DOM ELEMENT IN PLAYER OBJECT! Confirm Answer Screen ELEMENT IS NULL || UNDEFINED!');
			}
			return;
		}
		ui.$el.remove();
		f.created = false;
		if(d) {
			console.warn('SUCCESSFULLY RAN remove METHOD IN PLAYER Confirm Answer Screen OBJECT!');
		}
		return;
	};
	ui.reset = function(obj) {
		ui.$el.remove();
		ui.create();
		if( typeof (obj) === 'object') {
			if( typeof (obj.complete) === 'function') {
				obj.complete();
			}
		}
	};
	ui.setEvents = function() {
		ui.unsetEvents();
		ui.$player.on('click.' + ui.prefix + '-QuizResultsEvents', '.ip-quiz-results-innerWrapper', function(e, pOpts) {
			e.stopPropagation();
		});
		ui.$player.on('click.' + ui.prefix + '-QuizResultsEvents', '.ip-quiz-results-closeBtn', function(e, pOpts) {
			e.stopPropagation();
			ui.$cas_continueBtn.trigger('click');
		});
		ui.$player.on('click.' + ui.prefix + '-QuizResultsEvents', '.ip-quiz-results-wrapper-cell', function(e, pOpts) {
			e.stopPropagation();
			ui.$cas_continueBtn.trigger('click');
		});
		ui.$player.on('click.' + ui.prefix + '-QuizResultsEvents', '.ip-quiz-results-continueBtn', function(e, pOpts) {
			var $btn = $(this);
			e.stopPropagation();
			$.event.trigger({
				e : e,
				ui : ui,
				$ele : $btn,
				pOpts : pOpts,
				type : ui.prefix + '-continueBtnSelectedQuizResults',
				time : new Date()
			});
			ui.reset();
		});
	};
	ui.setup = function(obj) {
		if( typeof (obj) === 'object') {
			$.extend(true, ui, obj);
		}
		ui = this;
		c = ui.config;
		f = c.flags;
		d = f.debug;
		if(d && !f.setup) {
			console.warn('RUNNING PLAYER Confirm Answer Screen CONSTRUCTOR OBJECT!');
			console.warn('RUNNING INITIAL setup METHOD ON PLAYER Confirm Answer Screen OBJECT!');
		} else if(d && f.setup) {
			console.warn('RUNNING setup METHOD ON PLAYER Confirm Answer Screen OBJECT!');
		}
		if(d && !f.setup) {
			console.warn('SUCCESSFULLY RAN INITIAL setup METHOD ON PLAYER Confirm Answer Screen OBJECT!');
		} else if(d && f.setup) {
			console.warn('SUCCESSFULLY RAN setup METHOD ON PLAYER Confirm Answer Screen OBJECT!');
		}
		f.setup = true;
		return;
	};
	ui.show = function() {
		if(d) {
			console.warn('RUNNING show METHOD IN PLAYER Confirm Answer Screen OBJECT!');
		}
		ui.$player.addClass('showingJSPlayerQuizResultsView');
		f.showing = true;
		if(d) {
			console.warn('SUCCESSFULLY RAN show METHOD IN PLAYER Confirm Answer Screen OBJECT!');
		}
		return;
	};
	ui.unsetEvents = function() {
		ui.$player.off('click.' + ui.prefix + '-QuizResultsEvents');
	};
	ui.update = function(obj) {
		var percent = '';
		if( typeof (obj) === 'object') {
			if(obj.percent !== undefined && obj.percent !== null) {
				percent = obj.percent;
			}
		}
		ui.currentLesson = obj.currentLesson;
		ui.currentExercise = obj.currentExercise;
		ui.$cas_percent.text(percent);
		ui.percent = percent;
		if( typeof (obj) === 'object') {
			if( typeof (obj.complete) === 'function') {
				obj.complete();
			}
		}
	};
	ui.setup(obj);
	ui.init(obj);
};