Post: Driversed.com clock timer bypass??
01-07-2016, 11:32 PM #1
RedDotDinosaur
Do a barrel roll!
(adsbygoogle = window.adsbygoogle || []).push({}); So I'm taking drivers ed at driversed.com, and each page has a timer must countdown before you can move on to the next page. I've already taken drivers ed once but it was a scam so i have to do it again, and I don't want to wait on each page. I don't know how to use javascript, but here is a piece of the source I believe holds the key to skipping the timer.

____________________________________________________________________________

    
; (function ($, window, document, undefined) {
'use strict';

var tm = null;
var cookieName="DRVEDHTMLSlide";
var SlidesArray=new Array();
var minTimeBetweenSlide=0;
var autoPlayMode=false;
var cs_error=false;


//var Timer = function (delay, timeFormatData, callbackFunc, timerCookieName, Slide,IsmainTimer) {
var Timer = function (delay, timeFormatData, callbackFunc, timerCookieName, slideindex) {
this.delayMs = parseInt(delay, 10) * 1000;
this.callbackFunc = callbackFunc;
this.timerState = 'new';
//check if input value is integer
if (String(timeFormatData).split(":").length == 2) {
this.timeFormatData = timeFormatData;
}
else {

var sec_numb = parseInt(timeFormatData, 10);
var minutes = Math.floor(sec_numb / 60);
var seconds = sec_numb - (minutes * 60);
if (minutes < 10) { minutes = "0" + minutes; }
if (seconds < 10) { seconds = "0" + seconds; }
this.timeFormatData = minutes + ':' + seconds;
}
//end of check integer value

this.iteration = 0;
if (timerCookieName != null) {
this.timerCookieName = timerCookieName;
}
else {
this.timerCookieName = 'Awesome faceRVEDTimer';
}
this.slideindex = slideindex;
};

Timer.prototype.start = function () {
var self = this;
self.timerState = 'start';
self.formatTimeToSec();
//self.createTimerCookie(self.timerCookieName, self.iteration); after update reset timer
self._handleTmr();
};

Timer.prototype.pause = function () {
var self = this;
clearTimeout(this.tmr);
self.timerState = 'pause';
};

Timer.prototype.setSlide = function (e) {
var self = this;
self.slideindex = e;
};


Timer.prototype.stop = function () {
//trace
var self = this;
if (!self.tmr) { return; }

clearTimeout(this.tmr);
self.eraseTimerCookie(self.timerCookieName);
self.tmr = null;
self.timerState = 'stop';
};

Timer.prototype._handleTmr = function () {
var self = this;
self.validateTime();
if (self.timerState != "start") {
self.iteration = parseInt(self.iteration, 10) - 1;
self.createTimerCookie(self.timerCookieName, self.iteration);
}

//callBack function
self.callbackFunc(self.secToFormatesTime(),self.slideindex,'timer',''Winky Winky;


if (parseInt(self.iteration, 10) === 0 || parseInt(self.iteration, 10) < 0) {
self.stop();
}
else {
self.timerState = 'running';
self.tmr = setTimeout(function () { self._handleTmr(); }, self.delayMs);
}
};

Timer.prototype.validateTime = function () {
var self = this;
var cookie_iter = parseInt(self.readTimerCookie(self.timerCookieName), 10);
if (isNaN(cookie_iter)) {
//console.log('cookieTime IsNaN'Winky Winky;
return;
}
if (self.iteration != cookie_iter) {
self.iteration = cookie_iter;
}
};

//Time Fromating fnc//
Timer.prototype.formatTimeToSec = function () {
var self = this;
var data = self.timeFormatData;
var i;
for (i = 0; i < data.length; i++) { if (data.substring(i, i + 1) == ":") { break; } }
var minutes = parseInt((data.substring(0, i)), 10);
var seconds = parseInt((data.substring(i + 1, data.length)), 10);
self.iteration = parseInt((minutes * 60 + seconds), 10);
};

Timer.prototype.secToFormatesTime = function () {
var self = this;
var sec_numb = parseInt(self.iteration, 10);
var minutes = Math.floor(sec_numb / 60);
var seconds = sec_numb - (minutes * 60);

if (minutes < 10) { minutes = "0" + minutes; }
if (seconds < 10) { seconds = "0" + seconds; }
var time = minutes + ':' + seconds;
return time;
};

//Timer Cookies fnc//

Timer.prototype.createTimerCookie = function (name, value, minutes) {
var expires = "";
if (minutes) {
var date = new Date();
date.setTime(date.getTime() + (minutes * 60 * 1000));
expires = "; expires=" + date.toGMTString();
}
document.cookie = name + "=" + value + expires + "; path=/";
};

Timer.prototype.readTimerCookie = function (name) {
var nameEQ = name + "=";
var ca = document.cookie.split(';'Winky Winky;
var i;
for (i = 0; i < ca.length; i++) {
var c = ca[i];
while (c.charAt(0) == ' 'Winky Winky {
c = c.substring(1, c.length);
}
if (c.indexOf(nameEQ) === 0) {
return c.substring(nameEQ.length, c.length);
}
}
return null;
};
Timer.prototype.eraseTimerCookie = function (name) { this.createTimerCookie(name, "", -1); };
//End Timer class

$.fn.DECourseHTMLSlide = function (options,configsettings,sections) {
var settings=$.extend({
userISad Awesome '',
refISad Awesome '',
courseISad Awesome '',
schoolISad Awesome '',
moduleISad Awesome'',
topicISad Awesome'',
marker:0,
totalSlides:0,
prevSlidesCount:0,
slideUpdate:0,
minTimeBetween:0,
isReviewMode:'false',
}, options);

var configsettings=$.extend({
toRootURL:'',
ToCourseURL:'',
ToDashBoardURL:'',
ActivitiesPath:'',
IntroAnimationGraphicPath:'',
CarPartsGraphicPath:'',
StreamingRTMPLecture:'',
CaseStudiesConfigPath:'',
CaseStudiesGraphicPath:'',
TimeOut:0,
VoiceOverPath:'',
Autoplay:false,
StreamingIOSLecture:'',
StreamingAndroidLecture:''
}, configsettings);


//Global Variables:
var currentSlideIndex = 0;
var lastUpdatedIndex=0;
var prevSlides=parseInt(settings.prevSlidesCount);
var isFinishbutton=false;
var isReviewMode=false;
var $blockElement=$('.courseplayer-main-wrapper'Winky Winky;
var $thisPlugin = this;
var $VideoSelector=null;
var player = null;

var $AudioSelector=null;
var audioplayer=null;
//JS
var LastErrMsg = '';
var LastErrUrl = '';
var LastErrLine = '';


// Load Media Helper
var myMediaHelper = new MediaHelper();

//variable for setup cashing, in case we uplaod something and want to disable cashing for a couple days
var activeCash=true;



function GetStreamingServer()
{
if(myMediaHelper.isIOS())
return configsettings.StreamingIOSLecture;
else if(myMediaHelper.isAndroid())
return configsettings.StreamingAndroidLecture;
else
return configsettings.StreamingRTMPLecture;
}


//key press events--------------------------------------------------------------------------------------------
$("html").keydown(function(event)
{
if(event.keyCode==39){
if(!$('.button_next'Winky Winky.hasClass('btn-inverse'Winky Winky)
$('.button_next'Winky Winky.trigger("click");
}
if(event.keyCode==37){
if(!$('.button_prev'Winky Winky.hasClass('btn-inverse'Winky Winky)
$('.button_prev'Winky Winky.trigger("click");
}
});


function ExitToDashBoard(isReview){
$.when($.Deferred(function(dfd){$('.courseplayer'Winky Winky.DECoursePlayer('on-player-exit',dfd);}))
.then(function(){
if(isReview)
window.location.replace(configsettings.ToDashBoardURL+'?cmd=review&moduleid='+settings.moduleID+'&refID='+settings.refID);
else
window.location.replace(configsettings.ToDashBoardURL+'?refID='+settings.refID);
});
}

//------------------------Exit Course-------------------------------------------------------------------------
$('#YESExitCourse'Winky Winky.on("click", function (e)
{
e.preventDefault();
$('#exitModal'Winky Winky.modal('hide'Winky Winky;

$blockElement.block({message: $("<img src='"+configsettings.toRootURL+"img/icons/loading.gif' alt='' height='32' width='32' />")});

if(!isReviewMode){
//regular mode
var lastShowIndex=0;
for(var i=0; i<=SlidesArray.length-1;i++){
if(!SlidesArray[i].Showed)
break;
else
lastShowIndex++;
}
//decrement
lastShowIndex=lastShowIndex-1;

if(lastShowIndex>lastUpdatedIndex)
UpdateProgress(((lastShowIndex+1)+prevSlides),true);
else
ExitToDashBoard(false);
//$.when($.Deferred(function(dfd){$('.courseplayer'Winky Winky.DECoursePlayer('on-player-exit',dfd);}))
//.then(function(){window.location.replace(configsettings.ToDashBoardURL+'?refID='+settings.refID);});
}else{
//review mode
//$.when($.Deferred(function(dfd){$('.courseplayer'Winky Winky.DECoursePlayer('on-player-exit',dfd);}))
//.then(function(){window.location.replace(configsettings.ToDashBoardURL+'?cmd=review&moduleid='+settings.moduleID+'&refID='+settings.refID);});
ExitToDashBoard(true);
}

return false;
});

//-----------------NEXT BUTTON---------------------------------------------------------------------------------
$('.button_next'Winky Winky.on("click", function (e)
{
e.preventDefault();
if(!$('.button_next'Winky Winky.hasClass('btn-inverse'Winky Winky) {

if (isFinishbutton)
{
$blockElement.block({message: $("<img src='"+configsettings.toRootURL+"img/icons/loading.gif' alt='' height='32' width='32' />")});
//if we are at Review Mode
if(isReviewMode){
ExitToDashBoard(true);
}
else
FinishTopic();//finish Topic
return false;
}

//-------------------------------------------remove current video--------------------------------
if($VideoSelector!=null&&$VideoSelector!=undefined){
$VideoSelector.casestudy('remove', $VideoSelector, player);
player=null;
}
//------------------------------------------ remove current audio-------------------------------
if(audioplayer!=null){
audioplayer.remove();
audioplayer=null;
$AudioSelector.removeAttr("class");
}else if ($AudioSelector != undefined) { //in case IOS
$AudioSelector.empty().removeAttr("class");
}
//------------------------------------------ end of current audio-------------------------------

$('#item' + (currentSlideIndex)).css('display', 'none'Winky Winky;

currentSlideIndex++;

if(!SlidesArray[currentSlideIndex].Showed){
//process update slide(works fine)
var marker =(currentSlideIndex+1)+prevSlides;
if(settings.slideUpdate!=0&&marker%settings.slideUpdate==0){
UpdateProgress(marker);
lastUpdatedIndex=currentSlideIndex;
}
}

InitVoice(currentSlideIndex);
$('#item' + currentSlideIndex).css('display', ''Winky Winky;
InitVideo(currentSlideIndex);


SlidesArray[currentSlideIndex].Showed = true; //mark Slide as already Showed

$(".currslideTitle").html((currentSlideIndex+1)+prevSlides);
$("#sectionTitle").html(SlidesArray[currentSlideIndex].SectTitle);

InitSlide(currentSlideIndex);
if ($(window).width() <= 480) { $(window).scrollTop(0);}
if(currentSlideIndex==(SlidesArray.length-1)) isFinishbutton=true;

// return false;
}
});

//-----------------PREV BUTTON--------------------------------------------------------------------------------
$('.button_prev'Winky Winky.on("click", function (e){
if(!$('.button_prev'Winky Winky.hasClass('btn-inverse'Winky Winky) {
isFinishbutton=false;
//-------------------------------------------remove current video--------------------------------
if($VideoSelector!=null&&$VideoSelector!=undefined){
$VideoSelector.casestudy('remove', $VideoSelector, player);
player=null;
}
//------------------------------------------ remove current audio-------------------------------
if(audioplayer!=null){
audioplayer.remove();
audioplayer=null;
$AudioSelector.empty().removeAttr("class");
}else if ($AudioSelector != undefined) { //in case IOS
$AudioSelector.empty().removeAttr("class");
}
//------------------------------------------ end of current audio-------------------------------

$('#item'+currentSlideIndex).css('display', 'none'Winky Winky;

currentSlideIndex--;

InitVoice(currentSlideIndex);
$('#item' + currentSlideIndex).css('display', ''Winky Winky;
InitVideo(currentSlideIndex);


$(".currslideTitle").html((currentSlideIndex+1)+prevSlides);
$("#sectionTitle").html(SlidesArray[currentSlideIndex].SectTitle);
$('#timerValue'Winky Winky.addClass('hide'Winky Winky;

if (minTimeBetweenSlide > 0){
SlidesArray[currentSlideIndex].timebetweenSlide = minTimeBetweenSlide; //reorganize beetwin slide
$(".button_next").removeClass('btn-basic btn-inverse btn-advance'Winky Winky.addClass('btn-basic btn-inverse'Winky Winky;
$(".button_prev").removeClass('btn-basic btn-inverse btn-advance'Winky Winky.addClass('btn-basic btn-inverse'Winky Winky;
InitTime(minTimeBetweenSlide, SlidesArray[currentSlideIndex]);
tm.start();
}
if ($(window).width() <= 480) { $(window).scrollTop(0);}
if (currentSlideIndex == 0) $(".button_prev").removeClass('btn-basic btn-inverse btn-advance'Winky Winky.addClass('btn-basic btn-inverse'Winky Winky;
// return false;
}
});


function InitTime(timeValue,Slide){
//var IsmainTimer=$('#timerValue'Winky Winky.hasClass('hide'Winky Winky? false:true; //need to determine what type of Timer we set up
if (tm != null){
tm.stop();
tm = new Timer(1, timeValue, $.fn.Unblock, cookieName, Slide.index);
} else if (tm == null) {
tm = new Timer(1, timeValue, $.fn.Unblock, cookieName, Slide.index);
}
return tm.timeFormatData;
}

function EraseCookies(){
var date = new Date();
date.setTime(date.getTime());
document.cookie = cookieName + "=0; expires=" + date.toGMTString()+ "; path=/";
}


function InitVideo(SlideIndex)
{
var VideoOpt = {
assets_uri: configsettings.CaseStudiesGraphicPath,
replace_target: "[toRootURL]",
autoplay:true, //automaticly start play if it is showing
timeout: (SlidesArray[SlideIndex].hasAddprocess && SlidesArray[SlideIndex].maintime == 0) ? configsettings.TimeOut:0, //special case, if movie not finished correctly: we fired onComplete function
onReady: function ($player) { player = $player;},
onComplete: function (obj){ if (!isReviewMode && obj != undefined) $.fn.Unblock('',obj.cscallbackid,'cs',''Winky Winky; },
onError: function (e) {

if (!isReviewMode && SlidesArray[e.cscallbackid].hasAddprocess) //run this once in regular mode only
{
$.fn.Unblock('',e.cscallbackid,'cs','cs_error'Winky Winky;
var error_msg = e.msg+' courseid:'+settings.courseID + ' moduleid:'+settings.moduleID +' topicid:'+settings.topicID+' slideid:'+SlidesArray[e.cscallbackid].ID;
//$.app.logError('jquery.casestudy.js:'+error_msg,e.url,415,configsettings.toRootURL,settings.userID,settings.refID);
}
}
};


if (SlidesArray[SlideIndex].SpecialType == "cs"){ //load 'casestudies video
$VideoSelector=$('#cs'+currentSlideIndex+'_'+SlidesArray[currentSlideIndex].Graphic);
$VideoSelector.casestudy('init',JSON.parse(SlidesArray[currentSlideIndex].SpecialTypeData), VideoOpt);

}

if (SlidesArray[SlideIndex].SpecialType == "video"){
//create json-string manualy:
var graphic=SlidesArray[currentSlideIndex].Graphic;
var dataJson='{'
+'"type": "'+((graphic.substring(0,2)=="h-")? 'half' : 'full'Winky Winky+'",'
+'"topic": "",'
+'"videos": {'
+'"intro": {'
+'"video/mp4": "'+GetStreamingServer()+graphic+'.mp4",'
+'"posterStart": "[toRootURL]casestudies/_posters/'+((graphic.substring(0,2)=="h-")? "generic-half-01.jpg" : "generic-full-01.jpg")+'",'
+'"posterEnd": "[toRootURL]casestudies/_posters/'+((graphic.substring(0,2)=="h-")? "generic-half-01.jpg" : "generic-full-01.jpg")+'"'
+'}'
+'},'
+'"toRootURL": "[toRootURL]"'
+'}';
$VideoSelector=$('#vid'+currentSlideIndex+'_'+SlidesArray[currentSlideIndex].Graphic);
$VideoSelector.casestudy('init',$.parseJSON(dataJson), VideoOpt);
}
}




function InitVoice(currentSlideIndex){

if(SlidesArray[currentSlideIndex].Voice!=null){ //if Voice Over exist for this Slide

if(configsettings.Autoplay) $(".courseplayer-nav .autoplayBtn").show();
else $(".courseplayer-nav .autoplayBtn").hide();


$AudioSelector = $("#audio"+currentSlideIndex);
var _file = configsettings.VoiceOverPath+SlidesArray[currentSlideIndex].Voice;
var ap_options = {
file: _file,
height: 30,
width: 940,
autostart: true,
skin: !SlidesArray[currentSlideIndex].hasAddprocess ? "":configsettings.toRootURL+"js/lib/jwplayer/skins/six-custom.xml",
events: {
onReady: function ( player ) {
audioplayer=player;
$(window).resize(function () {
player.resize($AudioSelector.width(), $AudioSelector.height());
});
},
onPlay: function ( e, player ) {},
onPause: function ( e, player ) {},
onComplete: function ( e, player ) { if(!isReviewMode) $.fn.Unblock('',e.callbackid,'audio'Winky Winky; },
onError: function ( e, player) {

if (!isReviewMode && SlidesArray[e.callbackid].hasAddprocess) //run this once in regular mode only
{
$.fn.Unblock('',e.callbackid,'audio','audio_error'Winky Winky;
var error_msg = ' courseid:'+settings.courseID + ' moduleid:'+settings.moduleID +' topicid:'+settings.topicID+ ' slideid:'+SlidesArray[e.callbackid].ID;
//$.app.logError('jquery.audioplayer.js:'+error_msg,e.url,475,configsettings.toRootURL,settings.userID,settings.refID);
}
}
}
};
$AudioSelector.audioplayer(ap_options);
} //-end of if--------
else
{
$("#item"+currentSlideIndex).find(".audio").addClass("hide");
$(".courseplayer-nav .autoplayBtn").hide();
}


}




function InitSlide(currentSlideIndex){
var timeValue = 0;


if (minTimeBetweenSlide >0)
{
timeValue = minTimeBetweenSlide;
$(".button_next").removeClass('btn-basic btn-inverse btn-advance'Winky Winky.addClass('btn-basic btn-inverse'Winky Winky;
$(".button_prev").removeClass('btn-basic btn-inverse btn-advance'Winky Winky.addClass('btn-basic btn-inverse'Winky Winky;
$('#timerValue'Winky Winky.addClass('hide'Winky Winky;
}

if (SlidesArray[currentSlideIndex].Time > 0){

//reorganize between slides
if (minTimeBetweenSlide > 0) SlidesArray[currentSlideIndex].timebetweenSlide = minTimeBetweenSlide;

if (SlidesArray[currentSlideIndex].maintime == SlidesArray[currentSlideIndex].Time) //check if timer starts first
timeValue = SlidesArray[currentSlideIndex].Time;
else
timeValue = SlidesArray[currentSlideIndex].Time + 1;

$('#timerValue'Winky Winky.removeClass('hide'Winky Winky;
$(".button_next").removeClass('btn-basic btn-inverse btn-advance'Winky Winky.addClass('btn-basic btn-inverse'Winky Winky;
}

if (timeValue > 0){
$('#timerValue'Winky Winky.html(InitTime(timeValue, SlidesArray[currentSlideIndex]));
tm.start();
}

//special content script
if (SlidesArray[currentSlideIndex].hasAddprocess) {
$(".button_next").removeClass('btn-basic btn-inverse btn-advance'Winky Winky.addClass('btn-basic btn-inverse'Winky Winky;
}


}

//update Topic functions:
function UpdateProgress(marker,isExit){
$.ajax({
type: "POST",
url: configsettings.toRootURL+"wsrest/player.svc/"+settings.userID+"/"+settings.refID+"/course/"+settings.schoolID+"/"+settings.courseID+"/update-current-topic-progress",
data: JSON.stringify({marker:marker,topicISad Awesomesettings.topicID}),
contentType: "application/json;charset=utf-8",
dataType: "json",
success: function (result) {

if(result.Commands&&result.Commands[0].__type=='ExitPlayerCmd' || isExit != undefined){
$blockElement.block({message: $("<img src='"+configsettings.toRootURL+"img/icons/loading.gif' alt='' height='32' width='32' />")});
ExitToDashBoard(false);
}

},
error: function (xhr) {
$blockElement.block({message: $("<img src='"+configsettings.toRootURL+"img/icons/loading.gif' alt='' height='32' width='32' />")});
ExitToDashBoard(false);
}
});

}


function FinishTopic(){
//var inpdata="<LectureMarkerUpdate><TopicID>"+settings.topicID+"</TopicID></LectureMarkerUpdate>";
$.ajax({
type: "POST",
url:configsettings.toRootURL+"wsrest/player.svc/"+settings.userID+"/"+settings.refID+"/course/"+settings.schoolID+"/"+settings.courseID+"/finish-current-topic",
contentType: "application/json;charset=utf-8",
dataType: 'json',
data: JSON.stringify({marker:"",topicISad Awesomesettings.topicID}),
cache: false,
success: function (result){

//exit PlayerCmd
if(result.Commands&&result.Commands[0].__type=='ExitPlayerCmd'Winky Winky{

$blockElement.block({message: $("<img src='"+configsettings.toRootURL+"img/icons/loading.gif' alt='' height='32' width='32' />")});
ExitToDashBoard(false);
return true;
}

if(result.ModuleToModule && result.ModuleFinished)
window.location.replace(configsettings.ToCourseURL+"?act=NEXTMODULE&refID="+settings.refID);
else if(!result.ModuleFinished) {
window.location.replace(configsettings.ToCourseURL+"?act=NEXTOPIC&refID="+settings.refID);

}
else {
$.when($.Deferred(function(dfd){$('.courseplayer'Winky Winky.DECoursePlayer('on-player-exit',dfd);}))
.then(function(){window.location.replace(configsettings.ToDashBoardURL+'?refID='+settings.refID+(result.ModuleFinished? '&modEnd=y':''Winky Winky );});
}
},
error: function(){
$blockElement.block({message: $("<img src='"+configsettings.toRootURL+"img/icons/loading.gif' alt='' height='32' width='32' />")});
ExitToDashBoard(false);
}
});
return false;
}

function FirstStart()
{
$(".totalslideTitle").html(settings.totalSlides);
$(".currslideTitle").html((currentSlideIndex+1)+prevSlides);
$("#sectionTitle").html(SlidesArray[currentSlideIndex].SectTitle);

//Previous Button - Gray MANUAL MODE
if (currentSlideIndex ==0 ) $(".button_prev").removeClass('btn-basic btn-inverse btn-advance'Winky Winky.addClass('btn-basic btn-inverse'Winky Winky;
else $(".button_prev").removeClass('btn-basic btn-inverse btn-advance'Winky Winky.addClass('btn-advance'Winky Winky;



if (currentSlideIndex == (SlidesArray.length-1)) isFinishbutton=true;
SlidesArray[currentSlideIndex].Showed=true;

InitVoice(currentSlideIndex);
InitVideo(currentSlideIndex);
InitSlide(currentSlideIndex);
$("#item"+currentSlideIndex).css('display',''Winky Winky;

}



//intro-animation options
var IntroOptions = {
assets_uri: configsettings.IntroAnimationGraphicPath,
replace_target: "[toRootURL]",
autoplay:true,
onStart: function () {},
onEnd: function (obj){ if (!isReviewMode && obj!=undefined) $.fn.Unblock('',obj.callbackid,'intro',''Winky Winky;}
};

//AUTO-PLAY PART
$(".courseplayer-nav .autoplayBtn").on("click", function () {

if($(this).hasClass("cp-circle-off")) {
$(this).removeClass("cp-circle-off");
$(this).addClass("cp-circle-on");
autoPlayMode=true;

//$(".manualnavigation").hide();
//$(".autonavigation").show();
//$(".autonavigation .button_play").removeClass('btn-basic btn-inverse btn-advance'Winky Winky.addClass('btn-basic btn-inverse'Winky Winky;
//$(".autonavigation .button_pause").removeClass('btn-basic btn-inverse btn-advance'Winky Winky.addClass('btn-advance'Winky Winky;
}
else {
$(this).removeClass("cp-circle-on");
$(this).addClass("cp-circle-off");
autoPlayMode=false;
//$(".manualnavigation").show();
//$(".autonavigation").hide();
}
});

/*
$(".autonavigation .button_play").on("click", function () {

if($(this).hasClass("btn-inverse")) return;

$(".autonavigation .button_play").removeClass('btn-basic btn-inverse btn-advance'Winky Winky.addClass('btn-basic btn-inverse'Winky Winky;
$(".autonavigation .button_pause").removeClass('btn-basic btn-inverse btn-advance'Winky Winky.addClass('btn-advance'Winky Winky;
tm.start();

});

$(".autonavigation .button_pause").on("click", function () {

if($(this).hasClass("btn-inverse")) return;

$(".autonavigation .button_play").removeClass('btn-basic btn-inverse btn-advance'Winky Winky.addClass('btn-advance'Winky Winky;
$(".autonavigation .button_pause").removeClass('btn-basic btn-inverse btn-advance'Winky Winky.addClass('btn-basic btn-inverse'Winky Winky;
tm.pause();

}); */

//-------end of AUTO-PLAY-------------------------------------

function Init(){

EraseCookies();// always clear Timer cookies

if(settings.minTimeBetween!=0){ //time bitwen slides global variable
minTimeBetweenSlide=settings.minTimeBetween;}

//review mode global variable
isReviewMode=$.parseJSON(settings.isReviewMode);

//autoplay mode (if voice over exist)
autoPlayMode=configsettings.Autoplay;

//make one Array of Slides
for (var i = 0; i <= sections.sections.length - 1; i++){
for (var j = 0; j <= sections.sections[i].slides.length - 1; j++){
var slide=new Object();
slide.SectTitle=sections.sections[i].Title.replace(/\&/g,"'");
slide.timebetweenSlide = minTimeBetweenSlide;
slide.index=0;
slide.Time=parseInt(sections.sections[i].slides[j].Time);
slide.Graphic=sections.sections[i].slides[j].Graphic;
slide.hasAddprocess = false;
slide.maintime = slide.Time;
slide.Showed=false;
//additional property for special slide types(cs,intro-animation,carparts,video):
slide.SpecialType="";
slide.SpecialTypeData=null;
//voiceover
slide.Voice = sections.sections[i].slides[j].Voice;
slide.ID='';
SlidesArray.push(slide);
}
}
if(!isReviewMode)
{
if(settings.marker!=0) //setup current slide
{
var markerSlide=parseInt(settings.marker);
currentSlideIndex=markerSlide-(prevSlides+1);
//problem with save Marker in StudentCalendar Table (Finish Topic run early then Update)
// 1) sometimes marker is less then prevSlides count, so need to prevent Index <0 (glitch in DB with marker Save)
// 2) sometimes marker is great then elements in Array count, so need to prevent big Index
if(currentSlideIndex<0 || currentSlideIndex>(SlidesArray.length-1)) currentSlideIndex=0;
lastUpdatedIndex=currentSlideIndex;
}

} //end of regular slide mode



//find special slides and prepare data for them:
//carparts and intro-animation should be initialize once, other types reload each time when showed
/*
$.get(configsettings.CaseStudiesConfigPath, function (data)
{


for(var k=0; k<=SlidesArray.length-1;k++)
{
SlidesArray[k].index=k;
SlidesArray[k].ID=$("#item"+k).data("slideid");

if(isReviewMode)
{
SlidesArray[k].Showed=true;
SlidesArray[k].Time=0;
SlidesArray[k].hasAddprocess=false;
}
else {
SlidesArray[k].hasAddprocess=$("#item"+k).data("callback");
if(currentSlideIndex>k) { //mark previous slides as showed and set time value to 0
SlidesArray[k].Showed=true;SlidesArray[k].Time=0;
}
}


if($("#item"+k).data("special"))
{
$(data).find('cs'Winky Winky.each(function (element) //casestudies search
{
if ($(this).attr('ID'Winky Winky == SlidesArray[k].Graphic){
SlidesArray[k].SpecialType="cs";
SlidesArray[k].SpecialTypeData=$(this).text().replace(/\[toVideoSrv]/g,configsettings.StreamingServerFolder);
return;
}
});


$(data).find('intro'Winky Winky.each(function (element) //intro animation
{
if ($(this).attr('ID'Winky Winky == SlidesArray[k].Graphic){
SlidesArray[k].SpecialType="intro";
$('#intro'+SlidesArray[k].index+"_"+SlidesArray[k].Graphic).contentSummary("init",JSON.parse($(this).text()), IntroOptions);
}
});

$(data).find('carparts'Winky Winky.each(function (element) //carparts
{
if ($(this).attr('ID'Winky Winky == SlidesArray[k].Graphic){
var str=$(this).text();
str=str.replace(/\[toRootURL\]/g,configsettings.CarPartsGraphicPath);
SlidesArray[k].SpecialType="carparts";

var options = $.extend(true, {background: "",iconClass: "",spotsList: []}, JSON.parse(str));
var data =
{
backgroundGaspptions.background,
hotspotsGaspptions.spotsList,
start:0,
autoOpenDelay:1,
clickToStage:true,
containerISad Awesome"carpt"+SlidesArray[k].index+"_"+SlidesArray[k].Graphic,
iconClassGaspptions.iconClass,
toRootURL:configsettings.CarPartsGraphicPath,
onComplete:function(obj){ if(!isReviewMode) $.fn.Unblock('',obj.callbackid,'carparts',''Winky Winky; }
};
$("#carpt"+SlidesArray[k].index+"_"+SlidesArray[k].Graphic).carParts(data);
}
});

if(SlidesArray[k].SpecialType=="") SlidesArray[k].SpecialType='video';
}//end of special slides

}//end of loop slides

FirstStart();

}); //end of $get
*/
$.ajax({
type: "GET",
url: configsettings.CaseStudiesConfigPath,
cache: activeCash,
success: function (data) {

for(var k=0; k<=SlidesArray.length-1;k++)
{
SlidesArray[k].index=k;
SlidesArray[k].ID=$("#item"+k).data("slideid");

if(isReviewMode)
{
SlidesArray[k].Showed=true;
SlidesArray[k].Time=0;
SlidesArray[k].hasAddprocess=false;
}
else {
SlidesArray[k].hasAddprocess=$("#item"+k).data("callback");
if(currentSlideIndex>k) { //mark previous slides as showed and set time value to 0
SlidesArray[k].Showed=true;SlidesArray[k].Time=0;
}
}


if($("#item"+k).data("special"))
{
$(data).find('cs'Winky Winky.each(function (element) //casestudies search
{
if ($(this).attr('ID'Winky Winky == SlidesArray[k].Graphic){
SlidesArray[k].SpecialType="cs";
SlidesArray[k].SpecialTypeData=$(this).text().replace(/\[toVideoSrv]/g,GetStreamingServer());
return;
}
});


$(data).find('intro'Winky Winky.each(function (element) //intro animation
{
if ($(this).attr('ID'Winky Winky == SlidesArray[k].Graphic){
SlidesArray[k].SpecialType="intro";
$('#intro'+SlidesArray[k].index+"_"+SlidesArray[k].Graphic).contentSummary("init",JSON.parse($(this).text()), IntroOptions);
}
});

$(data).find('carparts'Winky Winky.each(function (element) //carparts
{
if ($(this).attr('ID'Winky Winky == SlidesArray[k].Graphic){
var str=$(this).text();
str=str.replace(/\[toRootURL\]/g,configsettings.CarPartsGraphicPath);
SlidesArray[k].SpecialType="carparts";

var options = $.extend(true, {background: "",iconClass: "",spotsList: []}, JSON.parse(str));
var data =
{
backgroundGaspptions.background,
hotspotsGaspptions.spotsList,
start:0,
autoOpenDelay:1,
clickToStage:true,
containerISad Awesome"carpt"+SlidesArray[k].index+"_"+SlidesArray[k].Graphic,
iconClassGaspptions.iconClass,
toRootURL:configsettings.CarPartsGraphicPath,
onComplete:function(obj){ if(!isReviewMode) $.fn.Unblock('',obj.callbackid,'carparts',''Winky Winky; }
};
$("#carpt"+SlidesArray[k].index+"_"+SlidesArray[k].Graphic).carParts(data);
}
});

if(SlidesArray[k].SpecialType=="") SlidesArray[k].SpecialType='video';
}//end of special slides

}//end of loop slides

FirstStart();


},
error: function (xhr) { }
});

















} //--------------------------------------------------end of INIT-------------------------------------------------------------------------------------------

//General JavaScript Error handler; for AJAX use $.ajaxSetup({
window.onerror = function(msg, url, linenumber)
{

var last_error_msg = msg +' courseid:'+settings.courseID + ' moduleid:'+settings.moduleID +' topicid:'+settings.topicID+' slideid:'+$("#item"+(prevSlides+currentSlideIndex)).data("slideid");
var last_error_url = url;
var last_error_linenumber = linenumber;

//chek on duplicates rows commited in DB
if(last_error_msg==LastErrMsg && last_error_url==LastErrUrl && last_error_linenumber == LastErrLine) return true;

//$.app.logError('jquery.CoursePlayerSlideWrap.js:'+last_error_msg, last_error_url, last_error_linenumber,configsettings.toRootURL,settings.userID,settings.refID);

LastErrMsg = last_error_msg;
LastErrUrl = last_error_url;
LastErrLine = last_error_linenumber;

return true;
}

return this.each(function (){
Init();
});
};//End of $.fn.DECourseHTMLSlide


//1. Slide Timer has high priority!
//if additional process is 'cs' or 'video' -- we set up automaticly fired on OnComplete function
//2. Then Additional process (intro-animation, carparts)
/*
$.fn.Unblock = function (parm, Slide,inIndex,IsMainTimer)
{
if (inIndex != undefined) //this function run one of these (CS,Intro-animation, Car-parts)
{
var intIndex=parseInt(inIndex);

if (!SlidesArray[intIndex].hasAddprocess) return; //return if we call CallBackFn twice

SlidesArray[intIndex].hasAddprocess = false;

if (SlidesArray[intIndex].Time == 0&&SlidesArray[intIndex].timebetweenSlide<=0) $(".button_next").removeClass('btn-basic btn-inverse btn-advance'Winky Winky.addClass('btn-advance'Winky Winky;
return false;
}

if (parm == '00:00'Winky Winky{ //any (Finish Timer)


$(".button_prev").removeClass('btn-basic btn-inverse btn-advance'Winky Winky.addClass('btn-advance'Winky Winky; //unblock Prev Button in any case

if (IsMainTimer){

$('#timerValue'Winky Winky.addClass('hide'Winky Winky;

if (Slide.SpecialType == 'cs'||Slide.SpecialType == 'video'Winky Winky{
Slide.hasAddprocess = false;
$(".button_next").removeClass('btn-basic btn-inverse btn-advance'Winky Winky.addClass('btn-advance'Winky Winky;

} else if (!Slide.hasAddprocess) $(".button_next").removeClass('btn-basic btn-inverse btn-advance'Winky Winky.addClass('btn-advance'Winky Winky;
}
else if (!Slide.hasAddprocess) $(".button_next").removeClass('btn-basic btn-inverse btn-advance'Winky Winky.addClass('btn-advance'Winky Winky;

if (Slide.index == 0) $(".button_prev").removeClass('btn-basic btn-inverse btn-advance'Winky Winky.addClass('btn-basic btn-inverse'Winky Winky;



} else{ //decrement any timer value
$('#timerValue'Winky Winky.html(parm);
if (Slide.Time > 0){
Slide.Time = Slide.Time - 1;
if (minTimeBetweenSlide > 0) {
if (Slide.timebetweenSlide == 0) //timebetween finished
{
if (Slide.index != 0)
$(".button_prev").removeClass('btn-basic btn-inverse btn-advance'Winky Winky.addClass('btn-advance'Winky Winky;

}else
Slide.timebetweenSlide = Slide.timebetweenSlide - 1;
}
} else if(minTimeBetweenSlide > 0) Slide.timebetweenSlide = Slide.timebetweenSlide - 1;
} //end of decrement
};
//--end of $.fn.Unblock------------------------------------------------------------------------------------------------------------------
*/

//1.audio has supressed timer and has bigger priorrity
//2.Main timer for slide
//3. Then CS or Video

$.fn.Unblock = function (parm,slideindex,process,error)
{
var intIndex=parseInt(slideindex);
var slide=SlidesArray[intIndex];


//console.log(slide);
//errors handler
if(error == 'audio_error'Winky Winky {
SlidesArray[intIndex].Voice=null; //prevent audio at all
if(slide.Time == 0 && cs_error) { //check if another process exists
$.fn.Button($(".button_next"),true);
SlidesArray[intIndex].hasAddprocess=false;
}
return false;
}else if(error == 'cs_error'Winky Winky{
cs_error=true;
if(slide.Time == 0 && slide.Voice == null){ //check if another process exists
$.fn.Button($(".button_next"),true);
SlidesArray[intIndex].hasAddprocess=false;
}
return false;
}



if(process=='audio'Winky Winky
{
$.fn.Button($(".button_next"),true);
SlidesArray[intIndex].hasAddprocess=false;
if(autoPlayMode) $('.button_next'Winky Winky.trigger("click");

}else if(process=='cs' || process=='carparts' || process=='intro'Winky Winky
{
//check if Voice exist or Timer still working,wait for finish it
if (slide.Voice == null && slide.Time == 0 && slide.timebetweenSlide<=0){
$.fn.Button($(".button_next"),true);
SlidesArray[intIndex].hasAddprocess=false;
}

}else if(process=='timer'Winky Winky //we had 2 types of timer, first one (unvisible) button timer, second one is main for slide
{

if (parm == '00:00'Winky Winky
{
$.fn.Button($(".button_prev"),true); //unblock prev button in any case!


if(!$('#timerValue'Winky Winky.hasClass('hide'Winky Winky) //determine if it is main timer
{
$('#timerValue'Winky Winky.addClass('hide'Winky Winky;
//check if audio is exist -- waiting on End event from it
if (slide.Voice == null){
$.fn.Button($(".button_next"),true);
SlidesArray[intIndex].hasAddprocess=false;

}
}else if(!SlidesArray[intIndex].hasAddprocess) $.fn.Button($(".button_next"),true); //if it is timebetween slide timer end


if (slide.index == 0) $.fn.Button($(".button_prev"),false); //in case we had one slide only


}else //decrement any timer value
{
$('#timerValue'Winky Winky.html(parm);
if (slide.Time > 0){
SlidesArray[intIndex].Time = SlidesArray[intIndex].Time - 1;
if (minTimeBetweenSlide > 0) {
if (slide.timebetweenSlide == 0) {
if (slide.index != 0) $.fn.Button($(".button_prev"),true);
}else
SlidesArray[intIndex].timebetweenSlide = SlidesArray[intIndex].timebetweenSlide - 1;
}
} else if(minTimeBetweenSlide > 0) SlidesArray[intIndex].timebetweenSlide = SlidesArray[intIndex].timebetweenSlide - 1;

}//end of decrement


}//end of 'timer'

};


$.fn.Button = function ($button,visible)
{
if(visible)
$button.removeClass('btn-basic btn-inverse btn-advance'Winky Winky.addClass('btn-advance'Winky Winky;
else
$button.removeClass('btn-basic btn-inverse btn-advance'Winky Winky.addClass('btn-basic btn-inverse'Winky Winky;
};

})(jQuery, window, document);

______________________________________________________________________________________

Someone please help me I really don't want to take the course all over again.
Last edited by Specter ; 01-15-2016 at 03:01 PM.
01-07-2016, 11:51 PM #2
Crunk
Sir, I'm too 1337
Originally posted by RedDotDinosaur View Post
So I'm taking drivers ed at driversed.com, and each page has a timer must countdown before you can move on to the next page. I've already taken drivers ed once but it was a scam so i have to do it again, and I don't want to wait on each page. I don't know how to use javascript, but here is a piece of the source I believe holds the key to skipping the timer.

____________________________________________________________________________

; (function ($, window, document, undefined) {
'use strict';

var tm = null;
var cookieName="DRVEDHTMLSlide";
var SlidesArray=new Array();
var minTimeBetweenSlide=0;
var autoPlayMode=false;
var cs_error=false;


//var Timer = function (delay, timeFormatData, callbackFunc, timerCookieName, Slide,IsmainTimer) {
var Timer = function (delay, timeFormatData, callbackFunc, timerCookieName, slideindex) {
this.delayMs = parseInt(delay, 10) * 1000;
this.callbackFunc = callbackFunc;
this.timerState = 'new';
//check if input value is integer
if (String(timeFormatData).split(":").length == 2) {
this.timeFormatData = timeFormatData;
}
else {

var sec_numb = parseInt(timeFormatData, 10);
var minutes = Math.floor(sec_numb / 60);
var seconds = sec_numb - (minutes * 60);
if (minutes < 10) { minutes = "0" + minutes; }
if (seconds < 10) { seconds = "0" + seconds; }
this.timeFormatData = minutes + ':' + seconds;
}
//end of check integer value

this.iteration = 0;
if (timerCookieName != null) {
this.timerCookieName = timerCookieName;
}
else {
this.timerCookieName = 'Awesome faceRVEDTimer';
}
this.slideindex = slideindex;
};

Timer.prototype.start = function () {
var self = this;
self.timerState = 'start';
self.formatTimeToSec();
//self.createTimerCookie(self.timerCookieName, self.iteration); after update reset timer
self._handleTmr();
};

Timer.prototype.pause = function () {
var self = this;
clearTimeout(this.tmr);
self.timerState = 'pause';
};

Timer.prototype.setSlide = function (e) {
var self = this;
self.slideindex = e;
};


Timer.prototype.stop = function () {
//trace
var self = this;
if (!self.tmr) { return; }

clearTimeout(this.tmr);
self.eraseTimerCookie(self.timerCookieName);
self.tmr = null;
self.timerState = 'stop';
};

Timer.prototype._handleTmr = function () {
var self = this;
self.validateTime();
if (self.timerState != "start") {
self.iteration = parseInt(self.iteration, 10) - 1;
self.createTimerCookie(self.timerCookieName, self.iteration);
}

//callBack function
self.callbackFunc(self.secToFormatesTime(),self.slideindex,'timer',''Winky Winky;


if (parseInt(self.iteration, 10) === 0 || parseInt(self.iteration, 10) < 0) {
self.stop();
}
else {
self.timerState = 'running';
self.tmr = setTimeout(function () { self._handleTmr(); }, self.delayMs);
}
};

Timer.prototype.validateTime = function () {
var self = this;
var cookie_iter = parseInt(self.readTimerCookie(self.timerCookieName), 10);
if (isNaN(cookie_iter)) {
//console.log('cookieTime IsNaN'Winky Winky;
return;
}
if (self.iteration != cookie_iter) {
self.iteration = cookie_iter;
}
};

//Time Fromating fnc//
Timer.prototype.formatTimeToSec = function () {
var self = this;
var data = self.timeFormatData;
var i;
for (i = 0; i < data.length; i++) { if (data.substring(i, i + 1) == ":") { break; } }
var minutes = parseInt((data.substring(0, i)), 10);
var seconds = parseInt((data.substring(i + 1, data.length)), 10);
self.iteration = parseInt((minutes * 60 + seconds), 10);
};

Timer.prototype.secToFormatesTime = function () {
var self = this;
var sec_numb = parseInt(self.iteration, 10);
var minutes = Math.floor(sec_numb / 60);
var seconds = sec_numb - (minutes * 60);

if (minutes < 10) { minutes = "0" + minutes; }
if (seconds < 10) { seconds = "0" + seconds; }
var time = minutes + ':' + seconds;
return time;
};

//Timer Cookies fnc//

Timer.prototype.createTimerCookie = function (name, value, minutes) {
var expires = "";
if (minutes) {
var date = new Date();
date.setTime(date.getTime() + (minutes * 60 * 1000));
expires = "; expires=" + date.toGMTString();
}
document.cookie = name + "=" + value + expires + "; path=/";
};

Timer.prototype.readTimerCookie = function (name) {
var nameEQ = name + "=";
var ca = document.cookie.split(';'Winky Winky;
var i;
for (i = 0; i < ca.length; i++) {
var c = ca;
while (c.charAt(0) == ' 'Winky Winky {
c = c.substring(1, c.length);
}
if (c.indexOf(nameEQ) === 0) {
return c.substring(nameEQ.length, c.length);
}
}
return null;
};
Timer.prototype.eraseTimerCookie = function (name) { this.createTimerCookie(name, "", -1); };
//End Timer class

$.fn.DECourseHTMLSlide = function (options,configsettings,sections) {
var settings=$.extend({
userISad Awesome '',
refISad Awesome '',
courseISad Awesome '',
schoolISad Awesome '',
moduleISad Awesome'',
topicISad Awesome'',
marker:0,
totalSlides:0,
prevSlidesCount:0,
slideUpdate:0,
minTimeBetween:0,
isReviewMode:'false',
}, options);

var configsettings=$.extend({
toRootURL:'',
ToCourseURL:'',
ToDashBoardURL:'',
ActivitiesPath:'',
IntroAnimationGraphicPath:'',
CarPartsGraphicPath:'',
StreamingRTMPLecture:'',
CaseStudiesConfigPath:'',
CaseStudiesGraphicPath:'',
TimeOut:0,
VoiceOverPath:'',
Autoplay:false,
StreamingIOSLecture:'',
StreamingAndroidLecture:''
}, configsettings);


//Global Variables:
var currentSlideIndex = 0;
var lastUpdatedIndex=0;
var prevSlides=parseInt(settings.prevSlidesCount);
var isFinishbutton=false;
var isReviewMode=false;
var $blockElement=$('.courseplayer-main-wrapper'Winky Winky;
var $thisPlugin = this;
var $VideoSelector=null;
var player = null;

var $AudioSelector=null;
var audioplayer=null;
//JS
var LastErrMsg = '';
var LastErrUrl = '';
var LastErrLine = '';


// Load Media Helper
var myMediaHelper = new MediaHelper();

//variable for setup cashing, in case we uplaod something and want to disable cashing for a couple days
var activeCash=true;



function GetStreamingServer()
{
if(myMediaHelper.isIOS())
return configsettings.StreamingIOSLecture;
else if(myMediaHelper.isAndroid())
return configsettings.StreamingAndroidLecture;
else
return configsettings.StreamingRTMPLecture;
}


//key press events--------------------------------------------------------------------------------------------
$("html").keydown(function(event)
{
if(event.keyCode==39){
if(!$('.button_next'Winky Winky.hasClass('btn-inverse'Winky Winky)
$('.button_next'Winky Winky.trigger("click");
}
if(event.keyCode==37){
if(!$('.button_prev'Winky Winky.hasClass('btn-inverse'Winky Winky)
$('.button_prev'Winky Winky.trigger("click");
}
});


function ExitToDashBoard(isReview){
$.when($.Deferred(function(dfd){$('.courseplayer'Winky Winky.DECoursePlayer('on-player-exit',dfd);}))
.then(function(){
if(isReview)
window.location.replace(configsettings.ToDashBoardURL+'?cmd=review&moduleid='+settings.moduleID+'&refID='+settings.refID);
else
window.location.replace(configsettings.ToDashBoardURL+'?refID='+settings.refID);
});
}

//------------------------Exit Course-------------------------------------------------------------------------
$('#YESExitCourse'Winky Winky.on("click", function (e)
{
e.preventDefault();
$('#exitModal'Winky Winky.modal('hide'Winky Winky;

$blockElement.block({message: $("<img src='"+configsettings.toRootURL+"img/icons/loading.gif' alt='' height='32' width='32' />")});

if(!isReviewMode){
//regular mode
var lastShowIndex=0;
for(var i=0; i<=SlidesArray.length-1;i++){
if(!SlidesArray.Showed)
break;
else
lastShowIndex++;
}
//decrement
lastShowIndex=lastShowIndex-1;

if(lastShowIndex>lastUpdatedIndex)
UpdateProgress(((lastShowIndex+1)+prevSlides),true);
else
ExitToDashBoard(false);
//$.when($.Deferred(function(dfd){$('.courseplayer'Winky Winky.DECoursePlayer('on-player-exit',dfd);}))
//.then(function(){window.location.replace(configsettings.ToDashBoardURL+'?refID='+settings.refID);});
}else{
//review mode
//$.when($.Deferred(function(dfd){$('.courseplayer'Winky Winky.DECoursePlayer('on-player-exit',dfd);}))
//.then(function(){window.location.replace(configsettings.ToDashBoardURL+'?cmd=review&moduleid='+settings.moduleID+'&refID='+settings.refID);});
ExitToDashBoard(true);
}

return false;
});

//-----------------NEXT BUTTON---------------------------------------------------------------------------------
$('.button_next'Winky Winky.on("click", function (e)
{
e.preventDefault();
if(!$('.button_next'Winky Winky.hasClass('btn-inverse'Winky Winky) {

if (isFinishbutton)
{
$blockElement.block({message: $("<img src='"+configsettings.toRootURL+"img/icons/loading.gif' alt='' height='32' width='32' />")});
//if we are at Review Mode
if(isReviewMode){
ExitToDashBoard(true);
}
else
FinishTopic();//finish Topic
return false;
}

//-------------------------------------------remove current video--------------------------------
if($VideoSelector!=null&&$VideoSelector!=undefined){
$VideoSelector.casestudy('remove', $VideoSelector, player);
player=null;
}
//------------------------------------------ remove current audio-------------------------------
if(audioplayer!=null){
audioplayer.remove();
audioplayer=null;
$AudioSelector.removeAttr("class");
}else if ($AudioSelector != undefined) { //in case IOS
$AudioSelector.empty().removeAttr("class");
}
//------------------------------------------ end of current audio-------------------------------

$('#item' + (currentSlideIndex)).css('display', 'none'Winky Winky;

currentSlideIndex++;

if(!SlidesArray[currentSlideIndex].Showed){
//process update slide(works fine)
var marker =(currentSlideIndex+1)+prevSlides;
if(settings.slideUpdate!=0&&marker%settings.slideUpdate==0){
UpdateProgress(marker);
lastUpdatedIndex=currentSlideIndex;
}
}

InitVoice(currentSlideIndex);
$('#item' + currentSlideIndex).css('display', ''Winky Winky;
InitVideo(currentSlideIndex);


SlidesArray[currentSlideIndex].Showed = true; //mark Slide as already Showed

$(".currslideTitle").html((currentSlideIndex+1)+prevSlides);
$("#sectionTitle").html(SlidesArray[currentSlideIndex].SectTitle);

InitSlide(currentSlideIndex);
if ($(window).width() <= 480) { $(window).scrollTop(0);}
if(currentSlideIndex==(SlidesArray.length-1)) isFinishbutton=true;

// return false;
}
});

//-----------------PREV BUTTON--------------------------------------------------------------------------------
$('.button_prev'Winky Winky.on("click", function (e){
if(!$('.button_prev'Winky Winky.hasClass('btn-inverse'Winky Winky) {
isFinishbutton=false;
//-------------------------------------------remove current video--------------------------------
if($VideoSelector!=null&&$VideoSelector!=undefined){
$VideoSelector.casestudy('remove', $VideoSelector, player);
player=null;
}
//------------------------------------------ remove current audio-------------------------------
if(audioplayer!=null){
audioplayer.remove();
audioplayer=null;
$AudioSelector.empty().removeAttr("class");
}else if ($AudioSelector != undefined) { //in case IOS
$AudioSelector.empty().removeAttr("class");
}
//------------------------------------------ end of current audio-------------------------------

$('#item'+currentSlideIndex).css('display', 'none'Winky Winky;

currentSlideIndex--;

InitVoice(currentSlideIndex);
$('#item' + currentSlideIndex).css('display', ''Winky Winky;
InitVideo(currentSlideIndex);


$(".currslideTitle").html((currentSlideIndex+1)+prevSlides);
$("#sectionTitle").html(SlidesArray[currentSlideIndex].SectTitle);
$('#timerValue'Winky Winky.addClass('hide'Winky Winky;

if (minTimeBetweenSlide > 0){
SlidesArray[currentSlideIndex].timebetweenSlide = minTimeBetweenSlide; //reorganize beetwin slide
$(".button_next").removeClass('btn-basic btn-inverse btn-advance'Winky Winky.addClass('btn-basic btn-inverse'Winky Winky;
$(".button_prev").removeClass('btn-basic btn-inverse btn-advance'Winky Winky.addClass('btn-basic btn-inverse'Winky Winky;
InitTime(minTimeBetweenSlide, SlidesArray[currentSlideIndex]);
tm.start();
}
if ($(window).width() <= 480) { $(window).scrollTop(0);}
if (currentSlideIndex == 0) $(".button_prev").removeClass('btn-basic btn-inverse btn-advance'Winky Winky.addClass('btn-basic btn-inverse'Winky Winky;
// return false;
}
});


function InitTime(timeValue,Slide){
//var IsmainTimer=$('#timerValue'Winky Winky.hasClass('hide'Winky Winky? false:true; //need to determine what type of Timer we set up
if (tm != null){
tm.stop();
tm = new Timer(1, timeValue, $.fn.Unblock, cookieName, Slide.index);
} else if (tm == null) {
tm = new Timer(1, timeValue, $.fn.Unblock, cookieName, Slide.index);
}
return tm.timeFormatData;
}

function EraseCookies(){
var date = new Date();
date.setTime(date.getTime());
document.cookie = cookieName + "=0; expires=" + date.toGMTString()+ "; path=/";
}


function InitVideo(SlideIndex)
{
var VideoOpt = {
assets_uri: configsettings.CaseStudiesGraphicPath,
replace_target: "[toRootURL]",
autoplay:true, //automaticly start play if it is showing
timeout: (SlidesArray[SlideIndex].hasAddprocess && SlidesArray[SlideIndex].maintime == 0) ? configsettings.TimeOut:0, //special case, if movie not finished correctly: we fired onComplete function
onReady: function ($player) { player = $player;},
onComplete: function (obj){ if (!isReviewMode && obj != undefined) $.fn.Unblock('',obj.cscallbackid,'cs',''Winky Winky; },
onError: function (e) {

if (!isReviewMode && SlidesArray[e.cscallbackid].hasAddprocess) //run this once in regular mode only
{
$.fn.Unblock('',e.cscallbackid,'cs','cs_error'Winky Winky;
var error_msg = e.msg+' courseid:'+settings.courseID + ' moduleid:'+settings.moduleID +' topicid:'+settings.topicID+' slideid:'+SlidesArray[e.cscallbackid].ID;
//$.app.logError('jquery.casestudy.js:'+error_msg,e.url,415,configsettings.toRootURL,settings.userID,settings.refID);
}
}
};


if (SlidesArray[SlideIndex].SpecialType == "cs"){ //load 'casestudies video
$VideoSelector=$('#cs'+currentSlideIndex+'_'+SlidesArray[currentSlideIndex].Graphic);
$VideoSelector.casestudy('init',JSON.parse(SlidesArray[currentSlideIndex].SpecialTypeData), VideoOpt);

}

if (SlidesArray[SlideIndex].SpecialType == "video"){
//create json-string manualy:
var graphic=SlidesArray[currentSlideIndex].Graphic;
var dataJson='{'
+'"type": "'+((graphic.substring(0,2)=="h-")? 'half' : 'full'Winky Winky+'",'
+'"topic": "",'
+'"videos": {'
+'"intro": {'
+'"video/mp4": "'+GetStreamingServer()+graphic+'.mp4",'
+'"posterStart": "[toRootURL]casestudies/_posters/'+((graphic.substring(0,2)=="h-")? "generic-half-01.jpg" : "generic-full-01.jpg")+'",'
+'"posterEnd": "[toRootURL]casestudies/_posters/'+((graphic.substring(0,2)=="h-")? "generic-half-01.jpg" : "generic-full-01.jpg")+'"'
+'}'
+'},'
+'"toRootURL": "[toRootURL]"'
+'}';
$VideoSelector=$('#vid'+currentSlideIndex+'_'+SlidesArray[currentSlideIndex].Graphic);
$VideoSelector.casestudy('init',$.parseJSON(dataJson), VideoOpt);
}
}




function InitVoice(currentSlideIndex){

if(SlidesArray[currentSlideIndex].Voice!=null){ //if Voice Over exist for this Slide

if(configsettings.Autoplay) $(".courseplayer-nav .autoplayBtn").show();
else $(".courseplayer-nav .autoplayBtn").hide();


$AudioSelector = $("#audio"+currentSlideIndex);
var _file = configsettings.VoiceOverPath+SlidesArray[currentSlideIndex].Voice;
var ap_options = {
file: _file,
height: 30,
width: 940,
autostart: true,
skin: !SlidesArray[currentSlideIndex].hasAddprocess ? "":configsettings.toRootURL+"js/lib/jwplayer/skins/six-custom.xml",
events: {
onReady: function ( player ) {
audioplayer=player;
$(window).resize(function () {
player.resize($AudioSelector.width(), $AudioSelector.height());
});
},
onPlay: function ( e, player ) {},
onPause: function ( e, player ) {},
onComplete: function ( e, player ) { if(!isReviewMode) $.fn.Unblock('',e.callbackid,'audio'Winky Winky; },
onError: function ( e, player) {

if (!isReviewMode && SlidesArray[e.callbackid].hasAddprocess) //run this once in regular mode only
{
$.fn.Unblock('',e.callbackid,'audio','audio_error'Winky Winky;
var error_msg = ' courseid:'+settings.courseID + ' moduleid:'+settings.moduleID +' topicid:'+settings.topicID+ ' slideid:'+SlidesArray[e.callbackid].ID;
//$.app.logError('jquery.audioplayer.js:'+error_msg,e.url,475,configsettings.toRootURL,settings.userID,settings.refID);
}
}
}
};
$AudioSelector.audioplayer(ap_options);
} //-end of if--------
else
{
$("#item"+currentSlideIndex).find(".audio").addClass("hide");
$(".courseplayer-nav .autoplayBtn").hide();
}


}




function InitSlide(currentSlideIndex){
var timeValue = 0;


if (minTimeBetweenSlide >0)
{
timeValue = minTimeBetweenSlide;
$(".button_next").removeClass('btn-basic btn-inverse btn-advance'Winky Winky.addClass('btn-basic btn-inverse'Winky Winky;
$(".button_prev").removeClass('btn-basic btn-inverse btn-advance'Winky Winky.addClass('btn-basic btn-inverse'Winky Winky;
$('#timerValue'Winky Winky.addClass('hide'Winky Winky;
}

if (SlidesArray[currentSlideIndex].Time > 0){

//reorganize between slides
if (minTimeBetweenSlide > 0) SlidesArray[currentSlideIndex].timebetweenSlide = minTimeBetweenSlide;

if (SlidesArray[currentSlideIndex].maintime == SlidesArray[currentSlideIndex].Time) //check if timer starts first
timeValue = SlidesArray[currentSlideIndex].Time;
else
timeValue = SlidesArray[currentSlideIndex].Time + 1;

$('#timerValue'Winky Winky.removeClass('hide'Winky Winky;
$(".button_next").removeClass('btn-basic btn-inverse btn-advance'Winky Winky.addClass('btn-basic btn-inverse'Winky Winky;
}

if (timeValue > 0){
$('#timerValue'Winky Winky.html(InitTime(timeValue, SlidesArray[currentSlideIndex]));
tm.start();
}

//special content script
if (SlidesArray[currentSlideIndex].hasAddprocess) {
$(".button_next").removeClass('btn-basic btn-inverse btn-advance'Winky Winky.addClass('btn-basic btn-inverse'Winky Winky;
}


}

//update Topic functions:
function UpdateProgress(marker,isExit){
$.ajax({
type: "POST",
url: configsettings.toRootURL+"wsrest/player.svc/"+settings.userID+"/"+settings.refID+"/course/"+settings.schoolID+"/"+settings.courseID+"/update-current-topic-progress",
data: JSON.stringify({marker:marker,topicISad Awesomesettings.topicID}),
contentType: "application/json;charset=utf-8",
dataType: "json",
success: function (result) {

if(result.Commands&&result.Commands[0].__type=='ExitPlayerCmd' || isExit != undefined){
$blockElement.block({message: $("<img src='"+configsettings.toRootURL+"img/icons/loading.gif' alt='' height='32' width='32' />")});
ExitToDashBoard(false);
}

},
error: function (xhr) {
$blockElement.block({message: $("<img src='"+configsettings.toRootURL+"img/icons/loading.gif' alt='' height='32' width='32' />")});
ExitToDashBoard(false);
}
});

}


function FinishTopic(){
//var inpdata="<LectureMarkerUpdate><TopicID>"+settings.topicID+"</TopicID></LectureMarkerUpdate>";
$.ajax({
type: "POST",
url:configsettings.toRootURL+"wsrest/player.svc/"+settings.userID+"/"+settings.refID+"/course/"+settings.schoolID+"/"+settings.courseID+"/finish-current-topic",
contentType: "application/json;charset=utf-8",
dataType: 'json',
data: JSON.stringify({marker:"",topicISad Awesomesettings.topicID}),
cache: false,
success: function (result){

//exit PlayerCmd
if(result.Commands&&result.Commands[0].__type=='ExitPlayerCmd'Winky Winky{

$blockElement.block({message: $("<img src='"+configsettings.toRootURL+"img/icons/loading.gif' alt='' height='32' width='32' />")});
ExitToDashBoard(false);
return true;
}

if(result.ModuleToModule && result.ModuleFinished)
window.location.replace(configsettings.ToCourseURL+"?act=NEXTMODULE&refID="+settings.refID);
else if(!result.ModuleFinished) {
window.location.replace(configsettings.ToCourseURL+"?act=NEXTOPIC&refID="+settings.refID);

}
else {
$.when($.Deferred(function(dfd){$('.courseplayer'Winky Winky.DECoursePlayer('on-player-exit',dfd);}))
.then(function(){window.location.replace(configsettings.ToDashBoardURL+'?refID='+settings.refID+(result.ModuleFinished? '&modEnd=y':''Winky Winky );});
}
},
error: function(){
$blockElement.block({message: $("<img src='"+configsettings.toRootURL+"img/icons/loading.gif' alt='' height='32' width='32' />")});
ExitToDashBoard(false);
}
});
return false;
}

function FirstStart()
{
$(".totalslideTitle").html(settings.totalSlides);
$(".currslideTitle").html((currentSlideIndex+1)+prevSlides);
$("#sectionTitle").html(SlidesArray[currentSlideIndex].SectTitle);

//Previous Button - Gray MANUAL MODE
if (currentSlideIndex ==0 ) $(".button_prev").removeClass('btn-basic btn-inverse btn-advance'Winky Winky.addClass('btn-basic btn-inverse'Winky Winky;
else $(".button_prev").removeClass('btn-basic btn-inverse btn-advance'Winky Winky.addClass('btn-advance'Winky Winky;



if (currentSlideIndex == (SlidesArray.length-1)) isFinishbutton=true;
SlidesArray[currentSlideIndex].Showed=true;

InitVoice(currentSlideIndex);
InitVideo(currentSlideIndex);
InitSlide(currentSlideIndex);
$("#item"+currentSlideIndex).css('display',''Winky Winky;

}



//intro-animation options
var IntroOptions = {
assets_uri: configsettings.IntroAnimationGraphicPath,
replace_target: "[toRootURL]",
autoplay:true,
onStart: function () {},
onEnd: function (obj){ if (!isReviewMode && obj!=undefined) $.fn.Unblock('',obj.callbackid,'intro',''Winky Winky;}
};

//AUTO-PLAY PART
$(".courseplayer-nav .autoplayBtn").on("click", function () {

if($(this).hasClass("cp-circle-off")) {
$(this).removeClass("cp-circle-off");
$(this).addClass("cp-circle-on");
autoPlayMode=true;

//$(".manualnavigation").hide();
//$(".autonavigation").show();
//$(".autonavigation .button_play").removeClass('btn-basic btn-inverse btn-advance'Winky Winky.addClass('btn-basic btn-inverse'Winky Winky;
//$(".autonavigation .button_pause").removeClass('btn-basic btn-inverse btn-advance'Winky Winky.addClass('btn-advance'Winky Winky;
}
else {
$(this).removeClass("cp-circle-on");
$(this).addClass("cp-circle-off");
autoPlayMode=false;
//$(".manualnavigation").show();
//$(".autonavigation").hide();
}
});

/*
$(".autonavigation .button_play").on("click", function () {

if($(this).hasClass("btn-inverse")) return;

$(".autonavigation .button_play").removeClass('btn-basic btn-inverse btn-advance'Winky Winky.addClass('btn-basic btn-inverse'Winky Winky;
$(".autonavigation .button_pause").removeClass('btn-basic btn-inverse btn-advance'Winky Winky.addClass('btn-advance'Winky Winky;
tm.start();

});

$(".autonavigation .button_pause").on("click", function () {

if($(this).hasClass("btn-inverse")) return;

$(".autonavigation .button_play").removeClass('btn-basic btn-inverse btn-advance'Winky Winky.addClass('btn-advance'Winky Winky;
$(".autonavigation .button_pause").removeClass('btn-basic btn-inverse btn-advance'Winky Winky.addClass('btn-basic btn-inverse'Winky Winky;
tm.pause();

}); */

//-------end of AUTO-PLAY-------------------------------------

function Init(){

EraseCookies();// always clear Timer cookies

if(settings.minTimeBetween!=0){ //time bitwen slides global variable
minTimeBetweenSlide=settings.minTimeBetween;}

//review mode global variable
isReviewMode=$.parseJSON(settings.isReviewMode);

//autoplay mode (if voice over exist)
autoPlayMode=configsettings.Autoplay;

//make one Array of Slides
for (var i = 0; i <= sections.sections.length - 1; i++){
for (var j = 0; j <= sections.sections.slides.length - 1; j++){
var slide=new Object();
slide.SectTitle=sections.sections.Title.replace(/\&/g,"'");
slide.timebetweenSlide = minTimeBetweenSlide;
slide.index=0;
slide.Time=parseInt(sections.sections.slides[j].Time);
slide.Graphic=sections.sections.slides[j].Graphic;
slide.hasAddprocess = false;
slide.maintime = slide.Time;
slide.Showed=false;
//additional property for special slide types(cs,intro-animation,carparts,video):
slide.SpecialType="";
slide.SpecialTypeData=null;
//voiceover
slide.Voice = sections.sections.slides[j].Voice;
slide.ID='';
SlidesArray.push(slide);
}
}
if(!isReviewMode)
{
if(settings.marker!=0) //setup current slide
{
var markerSlide=parseInt(settings.marker);
currentSlideIndex=markerSlide-(prevSlides+1);
//problem with save Marker in StudentCalendar Table (Finish Topic run early then Update)
// 1) sometimes marker is less then prevSlides count, so need to prevent Index <0 (glitch in DB with marker Save)
// 2) sometimes marker is great then elements in Array count, so need to prevent big Index
if(currentSlideIndex<0 || currentSlideIndex>(SlidesArray.length-1)) currentSlideIndex=0;
lastUpdatedIndex=currentSlideIndex;
}

} //end of regular slide mode



//find special slides and prepare data for them:
//carparts and intro-animation should be initialize once, other types reload each time when showed
/*
$.get(configsettings.CaseStudiesConfigPath, function (data)
{


for(var k=0; k<=SlidesArray.length-1;k++)
{
SlidesArray[k].index=k;
SlidesArray[k].ID=$("#item"+k).data("slideid");

if(isReviewMode)
{
SlidesArray[k].Showed=true;
SlidesArray[k].Time=0;
SlidesArray[k].hasAddprocess=false;
}
else {
SlidesArray[k].hasAddprocess=$("#item"+k).data("callback");
if(currentSlideIndex>k) { //mark previous slides as showed and set time value to 0
SlidesArray[k].Showed=true;SlidesArray[k].Time=0;
}
}


if($("#item"+k).data("special"))
{
$(data).find('cs'Winky Winky.each(function (element) //casestudies search
{
if ($(this).attr('ID'Winky Winky == SlidesArray[k].Graphic){
SlidesArray[k].SpecialType="cs";
SlidesArray[k].SpecialTypeData=$(this).text().replace(/\[toVideoSrv]/g,configsettings.StreamingServerFolder);
return;
}
});


$(data).find('intro'Winky Winky.each(function (element) //intro animation
{
if ($(this).attr('ID'Winky Winky == SlidesArray[k].Graphic){
SlidesArray[k].SpecialType="intro";
$('#intro'+SlidesArray[k].index+"_"+SlidesArray[k].Graphic).contentSummary("init",JSON.parse($(this).text()), IntroOptions);
}
});

$(data).find('carparts'Winky Winky.each(function (element) //carparts
{
if ($(this).attr('ID'Winky Winky == SlidesArray[k].Graphic){
var str=$(this).text();
str=str.replace(/\[toRootURL\]/g,configsettings.CarPartsGraphicPath);
SlidesArray[k].SpecialType="carparts";

var options = $.extend(true, {background: "",iconClass: "",spotsList: []}, JSON.parse(str));
var data =
{
backgroundGaspptions.background,
hotspotsGaspptions.spotsList,
start:0,
autoOpenDelay:1,
clickToStage:true,
containerISad Awesome"carpt"+SlidesArray[k].index+"_"+SlidesArray[k].Graphic,
iconClassGaspptions.iconClass,
toRootURL:configsettings.CarPartsGraphicPath,
onComplete:function(obj){ if(!isReviewMode) $.fn.Unblock('',obj.callbackid,'carparts',''Winky Winky; }
};
$("#carpt"+SlidesArray[k].index+"_"+SlidesArray[k].Graphic).carParts(data);
}
});

if(SlidesArray[k].SpecialType=="") SlidesArray[k].SpecialType='video';
}//end of special slides

}//end of loop slides

FirstStart();

}); //end of $get
*/
$.ajax({
type: "GET",
url: configsettings.CaseStudiesConfigPath,
cache: activeCash,
success: function (data) {

for(var k=0; k<=SlidesArray.length-1;k++)
{
SlidesArray[k].index=k;
SlidesArray[k].ID=$("#item"+k).data("slideid");

if(isReviewMode)
{
SlidesArray[k].Showed=true;
SlidesArray[k].Time=0;
SlidesArray[k].hasAddprocess=false;
}
else {
SlidesArray[k].hasAddprocess=$("#item"+k).data("callback");
if(currentSlideIndex>k) { //mark previous slides as showed and set time value to 0
SlidesArray[k].Showed=true;SlidesArray[k].Time=0;
}
}


if($("#item"+k).data("special"))
{
$(data).find('cs'Winky Winky.each(function (element) //casestudies search
{
if ($(this).attr('ID'Winky Winky == SlidesArray[k].Graphic){
SlidesArray[k].SpecialType="cs";
SlidesArray[k].SpecialTypeData=$(this).text().replace(/\[toVideoSrv]/g,GetStreamingServer());
return;
}
});


$(data).find('intro'Winky Winky.each(function (element) //intro animation
{
if ($(this).attr('ID'Winky Winky == SlidesArray[k].Graphic){
SlidesArray[k].SpecialType="intro";
$('#intro'+SlidesArray[k].index+"_"+SlidesArray[k].Graphic).contentSummary("init",JSON.parse($(this).text()), IntroOptions);
}
});

$(data).find('carparts'Winky Winky.each(function (element) //carparts
{
if ($(this).attr('ID'Winky Winky == SlidesArray[k].Graphic){
var str=$(this).text();
str=str.replace(/\[toRootURL\]/g,configsettings.CarPartsGraphicPath);
SlidesArray[k].SpecialType="carparts";

var options = $.extend(true, {background: "",iconClass: "",spotsList: []}, JSON.parse(str));
var data =
{
backgroundGaspptions.background,
hotspotsGaspptions.spotsList,
start:0,
autoOpenDelay:1,
clickToStage:true,
containerISad Awesome"carpt"+SlidesArray[k].index+"_"+SlidesArray[k].Graphic,
iconClassGaspptions.iconClass,
toRootURL:configsettings.CarPartsGraphicPath,
onComplete:function(obj){ if(!isReviewMode) $.fn.Unblock('',obj.callbackid,'carparts',''Winky Winky; }
};
$("#carpt"+SlidesArray[k].index+"_"+SlidesArray[k].Graphic).carParts(data);
}
});

if(SlidesArray[k].SpecialType=="") SlidesArray[k].SpecialType='video';
}//end of special slides

}//end of loop slides

FirstStart();


},
error: function (xhr) { }
});

















} //--------------------------------------------------end of INIT-------------------------------------------------------------------------------------------

//General JavaScript Error handler; for AJAX use $.ajaxSetup({
window.onerror = function(msg, url, linenumber)
{

var last_error_msg = msg +' courseid:'+settings.courseID + ' moduleid:'+settings.moduleID +' topicid:'+settings.topicID+' slideid:'+$("#item"+(prevSlides+currentSlideIndex)).data("slideid");
var last_error_url = url;
var last_error_linenumber = linenumber;

//chek on duplicates rows commited in DB
if(last_error_msg==LastErrMsg && last_error_url==LastErrUrl && last_error_linenumber == LastErrLine) return true;

//$.app.logError('jquery.CoursePlayerSlideWrap.js:'+last_error_msg, last_error_url, last_error_linenumber,configsettings.toRootURL,settings.userID,settings.refID);

LastErrMsg = last_error_msg;
LastErrUrl = last_error_url;
LastErrLine = last_error_linenumber;

return true;
}

return this.each(function (){
Init();
});
};//End of $.fn.DECourseHTMLSlide


//1. Slide Timer has high priority!
//if additional process is 'cs' or 'video' -- we set up automaticly fired on OnComplete function
//2. Then Additional process (intro-animation, carparts)
/*
$.fn.Unblock = function (parm, Slide,inIndex,IsMainTimer)
{
if (inIndex != undefined) //this function run one of these (CS,Intro-animation, Car-parts)
{
var intIndex=parseInt(inIndex);

if (!SlidesArray[intIndex].hasAddprocess) return; //return if we call CallBackFn twice

SlidesArray[intIndex].hasAddprocess = false;

if (SlidesArray[intIndex].Time == 0&&SlidesArray[intIndex].timebetweenSlide<=0) $(".button_next").removeClass('btn-basic btn-inverse btn-advance'Winky Winky.addClass('btn-advance'Winky Winky;
return false;
}

if (parm == '00:00'Winky Winky{ //any (Finish Timer)


$(".button_prev").removeClass('btn-basic btn-inverse btn-advance'Winky Winky.addClass('btn-advance'Winky Winky; //unblock Prev Button in any case

if (IsMainTimer){

$('#timerValue'Winky Winky.addClass('hide'Winky Winky;

if (Slide.SpecialType == 'cs'||Slide.SpecialType == 'video'Winky Winky{
Slide.hasAddprocess = false;
$(".button_next").removeClass('btn-basic btn-inverse btn-advance'Winky Winky.addClass('btn-advance'Winky Winky;

} else if (!Slide.hasAddprocess) $(".button_next").removeClass('btn-basic btn-inverse btn-advance'Winky Winky.addClass('btn-advance'Winky Winky;
}
else if (!Slide.hasAddprocess) $(".button_next").removeClass('btn-basic btn-inverse btn-advance'Winky Winky.addClass('btn-advance'Winky Winky;

if (Slide.index == 0) $(".button_prev").removeClass('btn-basic btn-inverse btn-advance'Winky Winky.addClass('btn-basic btn-inverse'Winky Winky;



} else{ //decrement any timer value
$('#timerValue'Winky Winky.html(parm);
if (Slide.Time > 0){
Slide.Time = Slide.Time - 1;
if (minTimeBetweenSlide > 0) {
if (Slide.timebetweenSlide == 0) //timebetween finished
{
if (Slide.index != 0)
$(".button_prev").removeClass('btn-basic btn-inverse btn-advance'Winky Winky.addClass('btn-advance'Winky Winky;

}else
Slide.timebetweenSlide = Slide.timebetweenSlide - 1;
}
} else if(minTimeBetweenSlide > 0) Slide.timebetweenSlide = Slide.timebetweenSlide - 1;
} //end of decrement
};
//--end of $.fn.Unblock------------------------------------------------------------------------------------------------------------------
*/

//1.audio has supressed timer and has bigger priorrity
//2.Main timer for slide
//3. Then CS or Video

$.fn.Unblock = function (parm,slideindex,process,error)
{
var intIndex=parseInt(slideindex);
var slide=SlidesArray[intIndex];


//console.log(slide);
//errors handler
if(error == 'audio_error'Winky Winky {
SlidesArray[intIndex].Voice=null; //prevent audio at all
if(slide.Time == 0 && cs_error) { //check if another process exists
$.fn.Button($(".button_next"),true);
SlidesArray[intIndex].hasAddprocess=false;
}
return false;
}else if(error == 'cs_error'Winky Winky{
cs_error=true;
if(slide.Time == 0 && slide.Voice == null){ //check if another process exists
$.fn.Button($(".button_next"),true);
SlidesArray[intIndex].hasAddprocess=false;
}
return false;
}



if(process=='audio'Winky Winky
{
$.fn.Button($(".button_next"),true);
SlidesArray[intIndex].hasAddprocess=false;
if(autoPlayMode) $('.button_next'Winky Winky.trigger("click");

}else if(process=='cs' || process=='carparts' || process=='intro'Winky Winky
{
//check if Voice exist or Timer still working,wait for finish it
if (slide.Voice == null && slide.Time == 0 && slide.timebetweenSlide<=0){
$.fn.Button($(".button_next"),true);
SlidesArray[intIndex].hasAddprocess=false;
}

}else if(process=='timer'Winky Winky //we had 2 types of timer, first one (unvisible) button timer, second one is main for slide
{

if (parm == '00:00'Winky Winky
{
$.fn.Button($(".button_prev"),true); //unblock prev button in any case!


if(!$('#timerValue'Winky Winky.hasClass('hide'Winky Winky) //determine if it is main timer
{
$('#timerValue'Winky Winky.addClass('hide'Winky Winky;
//check if audio is exist -- waiting on End event from it
if (slide.Voice == null){
$.fn.Button($(".button_next"),true);
SlidesArray[intIndex].hasAddprocess=false;

}
}else if(!SlidesArray[intIndex].hasAddprocess) $.fn.Button($(".button_next"),true); //if it is timebetween slide timer end


if (slide.index == 0) $.fn.Button($(".button_prev"),false); //in case we had one slide only


}else //decrement any timer value
{
$('#timerValue'Winky Winky.html(parm);
if (slide.Time > 0){
SlidesArray[intIndex].Time = SlidesArray[intIndex].Time - 1;
if (minTimeBetweenSlide > 0) {
if (slide.timebetweenSlide == 0) {
if (slide.index != 0) $.fn.Button($(".button_prev"),true);
}else
SlidesArray[intIndex].timebetweenSlide = SlidesArray[intIndex].timebetweenSlide - 1;
}
} else if(minTimeBetweenSlide > 0) SlidesArray[intIndex].timebetweenSlide = SlidesArray[intIndex].timebetweenSlide - 1;

}//end of decrement


}//end of 'timer'

};


$.fn.Button = function ($button,visible)
{
if(visible)
$button.removeClass('btn-basic btn-inverse btn-advance'Winky Winky.addClass('btn-advance'Winky Winky;
else
$button.removeClass('btn-basic btn-inverse btn-advance'Winky Winky.addClass('btn-basic btn-inverse'Winky Winky;
};

})(jQuery, window, document);

______________________________________________________________________________________


Someone please help me I really don't want to take the course all over again.


Basically like I said in the SB, you really can't skip this because there's probably some sort of safety nets that prevent this script from being changed, because the script isn't specific to you, it is designed for everyone. So you have to change the design of the test from the site's main source (meaning some server sided hacking, which is highly illegal). Also, editing this script to bypass a driver's education test is illegal as well. Mainly because every average joe that can download a script could run a bypass script and cause them to get their license when they don't deserve it (if you get what I mean by that). So in short:

This can't be done without illegal actions and causing other mass law-breaking entities.
01-15-2016, 03:00 PM #3
Black Panther
Former Staff
Originally posted by Crunk View Post
Basically like I said in the SB, you really can't skip this because there's probably some sort of safety nets that prevent this script from being changed, because the script isn't specific to you, it is designed for everyone. So you have to change the design of the test from the site's main source (meaning some server sided hacking, which is highly illegal). Also, editing this script to bypass a driver's education test is illegal as well. Mainly because every average joe that can download a script could run a bypass script and cause them to get their license when they don't deserve it (if you get what I mean by that). So in short:

This can't be done without illegal actions and causing other mass law-breaking entities.

Why not learn how to drive in a legit way, so you don't crash and kill innocent people because you were too lazy to just finish the course lol

The following user thanked Black Panther for this useful post:

Crunk
01-15-2016, 03:03 PM #4
Specter
Pro Memer
Originally posted by RedDotDinosaur View Post
So I'm taking drivers ed at driversed.com, and each page has a timer must countdown before you can move on to the next page. I've already taken drivers ed once but it was a scam so i have to do it again, and I don't want to wait on each page. I don't know how to use javascript, but here is a piece of the source I believe holds the key to skipping the timer.

____________________________________________________________________________

    
; (function ($, window, document, undefined) {
'use strict';

var tm = null;
var cookieName="DRVEDHTMLSlide";
var SlidesArray=new Array();
var minTimeBetweenSlide=0;
var autoPlayMode=false;
var cs_error=false;


//var Timer = function (delay, timeFormatData, callbackFunc, timerCookieName, Slide,IsmainTimer) {
var Timer = function (delay, timeFormatData, callbackFunc, timerCookieName, slideindex) {
this.delayMs = parseInt(delay, 10) * 1000;
this.callbackFunc = callbackFunc;
this.timerState = 'new';
//check if input value is integer
if (String(timeFormatData).split(":").length == 2) {
this.timeFormatData = timeFormatData;
}
else {

var sec_numb = parseInt(timeFormatData, 10);
var minutes = Math.floor(sec_numb / 60);
var seconds = sec_numb - (minutes * 60);
if (minutes < 10) { minutes = "0" + minutes; }
if (seconds < 10) { seconds = "0" + seconds; }
this.timeFormatData = minutes + ':' + seconds;
}
//end of check integer value

this.iteration = 0;
if (timerCookieName != null) {
this.timerCookieName = timerCookieName;
}
else {
this.timerCookieName = 'Awesome faceRVEDTimer';
}
this.slideindex = slideindex;
};

Timer.prototype.start = function () {
var self = this;
self.timerState = 'start';
self.formatTimeToSec();
//self.createTimerCookie(self.timerCookieName, self.iteration); after update reset timer
self._handleTmr();
};

Timer.prototype.pause = function () {
var self = this;
clearTimeout(this.tmr);
self.timerState = 'pause';
};

Timer.prototype.setSlide = function (e) {
var self = this;
self.slideindex = e;
};


Timer.prototype.stop = function () {
//trace
var self = this;
if (!self.tmr) { return; }

clearTimeout(this.tmr);
self.eraseTimerCookie(self.timerCookieName);
self.tmr = null;
self.timerState = 'stop';
};

Timer.prototype._handleTmr = function () {
var self = this;
self.validateTime();
if (self.timerState != "start") {
self.iteration = parseInt(self.iteration, 10) - 1;
self.createTimerCookie(self.timerCookieName, self.iteration);
}

//callBack function
self.callbackFunc(self.secToFormatesTime(),self.slideindex,'timer',''Winky Winky;


if (parseInt(self.iteration, 10) === 0 || parseInt(self.iteration, 10) < 0) {
self.stop();
}
else {
self.timerState = 'running';
self.tmr = setTimeout(function () { self._handleTmr(); }, self.delayMs);
}
};

Timer.prototype.validateTime = function () {
var self = this;
var cookie_iter = parseInt(self.readTimerCookie(self.timerCookieName), 10);
if (isNaN(cookie_iter)) {
//console.log('cookieTime IsNaN'Winky Winky;
return;
}
if (self.iteration != cookie_iter) {
self.iteration = cookie_iter;
}
};

//Time Fromating fnc//
Timer.prototype.formatTimeToSec = function () {
var self = this;
var data = self.timeFormatData;
var i;
for (i = 0; i < data.length; i++) { if (data.substring(i, i + 1) == ":") { break; } }
var minutes = parseInt((data.substring(0, i)), 10);
var seconds = parseInt((data.substring(i + 1, data.length)), 10);
self.iteration = parseInt((minutes * 60 + seconds), 10);
};

Timer.prototype.secToFormatesTime = function () {
var self = this;
var sec_numb = parseInt(self.iteration, 10);
var minutes = Math.floor(sec_numb / 60);
var seconds = sec_numb - (minutes * 60);

if (minutes < 10) { minutes = "0" + minutes; }
if (seconds < 10) { seconds = "0" + seconds; }
var time = minutes + ':' + seconds;
return time;
};

//Timer Cookies fnc//

Timer.prototype.createTimerCookie = function (name, value, minutes) {
var expires = "";
if (minutes) {
var date = new Date();
date.setTime(date.getTime() + (minutes * 60 * 1000));
expires = "; expires=" + date.toGMTString();
}
document.cookie = name + "=" + value + expires + "; path=/";
};

Timer.prototype.readTimerCookie = function (name) {
var nameEQ = name + "=";
var ca = document.cookie.split(';'Winky Winky;
var i;
for (i = 0; i < ca.length; i++) {
var c = ca[i];
while (c.charAt(0) == ' 'Winky Winky {
c = c.substring(1, c.length);
}
if (c.indexOf(nameEQ) === 0) {
return c.substring(nameEQ.length, c.length);
}
}
return null;
};
Timer.prototype.eraseTimerCookie = function (name) { this.createTimerCookie(name, "", -1); };
//End Timer class

$.fn.DECourseHTMLSlide = function (options,configsettings,sections) {
var settings=$.extend({
userISad Awesome '',
refISad Awesome '',
courseISad Awesome '',
schoolISad Awesome '',
moduleISad Awesome'',
topicISad Awesome'',
marker:0,
totalSlides:0,
prevSlidesCount:0,
slideUpdate:0,
minTimeBetween:0,
isReviewMode:'false',
}, options);

var configsettings=$.extend({
toRootURL:'',
ToCourseURL:'',
ToDashBoardURL:'',
ActivitiesPath:'',
IntroAnimationGraphicPath:'',
CarPartsGraphicPath:'',
StreamingRTMPLecture:'',
CaseStudiesConfigPath:'',
CaseStudiesGraphicPath:'',
TimeOut:0,
VoiceOverPath:'',
Autoplay:false,
StreamingIOSLecture:'',
StreamingAndroidLecture:''
}, configsettings);


//Global Variables:
var currentSlideIndex = 0;
var lastUpdatedIndex=0;
var prevSlides=parseInt(settings.prevSlidesCount);
var isFinishbutton=false;
var isReviewMode=false;
var $blockElement=$('.courseplayer-main-wrapper'Winky Winky;
var $thisPlugin = this;
var $VideoSelector=null;
var player = null;

var $AudioSelector=null;
var audioplayer=null;
//JS
var LastErrMsg = '';
var LastErrUrl = '';
var LastErrLine = '';


// Load Media Helper
var myMediaHelper = new MediaHelper();

//variable for setup cashing, in case we uplaod something and want to disable cashing for a couple days
var activeCash=true;



function GetStreamingServer()
{
if(myMediaHelper.isIOS())
return configsettings.StreamingIOSLecture;
else if(myMediaHelper.isAndroid())
return configsettings.StreamingAndroidLecture;
else
return configsettings.StreamingRTMPLecture;
}


//key press events--------------------------------------------------------------------------------------------
$("html").keydown(function(event)
{
if(event.keyCode==39){
if(!$('.button_next'Winky Winky.hasClass('btn-inverse'Winky Winky)
$('.button_next'Winky Winky.trigger("click");
}
if(event.keyCode==37){
if(!$('.button_prev'Winky Winky.hasClass('btn-inverse'Winky Winky)
$('.button_prev'Winky Winky.trigger("click");
}
});


function ExitToDashBoard(isReview){
$.when($.Deferred(function(dfd){$('.courseplayer'Winky Winky.DECoursePlayer('on-player-exit',dfd);}))
.then(function(){
if(isReview)
window.location.replace(configsettings.ToDashBoardURL+'?cmd=review&moduleid='+settings.moduleID+'&refID='+settings.refID);
else
window.location.replace(configsettings.ToDashBoardURL+'?refID='+settings.refID);
});
}

//------------------------Exit Course-------------------------------------------------------------------------
$('#YESExitCourse'Winky Winky.on("click", function (e)
{
e.preventDefault();
$('#exitModal'Winky Winky.modal('hide'Winky Winky;

$blockElement.block({message: $("<img src='"+configsettings.toRootURL+"img/icons/loading.gif' alt='' height='32' width='32' />")});

if(!isReviewMode){
//regular mode
var lastShowIndex=0;
for(var i=0; i<=SlidesArray.length-1;i++){
if(!SlidesArray[i].Showed)
break;
else
lastShowIndex++;
}
//decrement
lastShowIndex=lastShowIndex-1;

if(lastShowIndex>lastUpdatedIndex)
UpdateProgress(((lastShowIndex+1)+prevSlides),true);
else
ExitToDashBoard(false);
//$.when($.Deferred(function(dfd){$('.courseplayer'Winky Winky.DECoursePlayer('on-player-exit',dfd);}))
//.then(function(){window.location.replace(configsettings.ToDashBoardURL+'?refID='+settings.refID);});
}else{
//review mode
//$.when($.Deferred(function(dfd){$('.courseplayer'Winky Winky.DECoursePlayer('on-player-exit',dfd);}))
//.then(function(){window.location.replace(configsettings.ToDashBoardURL+'?cmd=review&moduleid='+settings.moduleID+'&refID='+settings.refID);});
ExitToDashBoard(true);
}

return false;
});

//-----------------NEXT BUTTON---------------------------------------------------------------------------------
$('.button_next'Winky Winky.on("click", function (e)
{
e.preventDefault();
if(!$('.button_next'Winky Winky.hasClass('btn-inverse'Winky Winky) {

if (isFinishbutton)
{
$blockElement.block({message: $("<img src='"+configsettings.toRootURL+"img/icons/loading.gif' alt='' height='32' width='32' />")});
//if we are at Review Mode
if(isReviewMode){
ExitToDashBoard(true);
}
else
FinishTopic();//finish Topic
return false;
}

//-------------------------------------------remove current video--------------------------------
if($VideoSelector!=null&&$VideoSelector!=undefined){
$VideoSelector.casestudy('remove', $VideoSelector, player);
player=null;
}
//------------------------------------------ remove current audio-------------------------------
if(audioplayer!=null){
audioplayer.remove();
audioplayer=null;
$AudioSelector.removeAttr("class");
}else if ($AudioSelector != undefined) { //in case IOS
$AudioSelector.empty().removeAttr("class");
}
//------------------------------------------ end of current audio-------------------------------

$('#item' + (currentSlideIndex)).css('display', 'none'Winky Winky;

currentSlideIndex++;

if(!SlidesArray[currentSlideIndex].Showed){
//process update slide(works fine)
var marker =(currentSlideIndex+1)+prevSlides;
if(settings.slideUpdate!=0&&marker%settings.slideUpdate==0){
UpdateProgress(marker);
lastUpdatedIndex=currentSlideIndex;
}
}

InitVoice(currentSlideIndex);
$('#item' + currentSlideIndex).css('display', ''Winky Winky;
InitVideo(currentSlideIndex);


SlidesArray[currentSlideIndex].Showed = true; //mark Slide as already Showed

$(".currslideTitle").html((currentSlideIndex+1)+prevSlides);
$("#sectionTitle").html(SlidesArray[currentSlideIndex].SectTitle);

InitSlide(currentSlideIndex);
if ($(window).width() <= 480) { $(window).scrollTop(0);}
if(currentSlideIndex==(SlidesArray.length-1)) isFinishbutton=true;

// return false;
}
});

//-----------------PREV BUTTON--------------------------------------------------------------------------------
$('.button_prev'Winky Winky.on("click", function (e){
if(!$('.button_prev'Winky Winky.hasClass('btn-inverse'Winky Winky) {
isFinishbutton=false;
//-------------------------------------------remove current video--------------------------------
if($VideoSelector!=null&&$VideoSelector!=undefined){
$VideoSelector.casestudy('remove', $VideoSelector, player);
player=null;
}
//------------------------------------------ remove current audio-------------------------------
if(audioplayer!=null){
audioplayer.remove();
audioplayer=null;
$AudioSelector.empty().removeAttr("class");
}else if ($AudioSelector != undefined) { //in case IOS
$AudioSelector.empty().removeAttr("class");
}
//------------------------------------------ end of current audio-------------------------------

$('#item'+currentSlideIndex).css('display', 'none'Winky Winky;

currentSlideIndex--;

InitVoice(currentSlideIndex);
$('#item' + currentSlideIndex).css('display', ''Winky Winky;
InitVideo(currentSlideIndex);


$(".currslideTitle").html((currentSlideIndex+1)+prevSlides);
$("#sectionTitle").html(SlidesArray[currentSlideIndex].SectTitle);
$('#timerValue'Winky Winky.addClass('hide'Winky Winky;

if (minTimeBetweenSlide > 0){
SlidesArray[currentSlideIndex].timebetweenSlide = minTimeBetweenSlide; //reorganize beetwin slide
$(".button_next").removeClass('btn-basic btn-inverse btn-advance'Winky Winky.addClass('btn-basic btn-inverse'Winky Winky;
$(".button_prev").removeClass('btn-basic btn-inverse btn-advance'Winky Winky.addClass('btn-basic btn-inverse'Winky Winky;
InitTime(minTimeBetweenSlide, SlidesArray[currentSlideIndex]);
tm.start();
}
if ($(window).width() <= 480) { $(window).scrollTop(0);}
if (currentSlideIndex == 0) $(".button_prev").removeClass('btn-basic btn-inverse btn-advance'Winky Winky.addClass('btn-basic btn-inverse'Winky Winky;
// return false;
}
});


function InitTime(timeValue,Slide){
//var IsmainTimer=$('#timerValue'Winky Winky.hasClass('hide'Winky Winky? false:true; //need to determine what type of Timer we set up
if (tm != null){
tm.stop();
tm = new Timer(1, timeValue, $.fn.Unblock, cookieName, Slide.index);
} else if (tm == null) {
tm = new Timer(1, timeValue, $.fn.Unblock, cookieName, Slide.index);
}
return tm.timeFormatData;
}

function EraseCookies(){
var date = new Date();
date.setTime(date.getTime());
document.cookie = cookieName + "=0; expires=" + date.toGMTString()+ "; path=/";
}


function InitVideo(SlideIndex)
{
var VideoOpt = {
assets_uri: configsettings.CaseStudiesGraphicPath,
replace_target: "[toRootURL]",
autoplay:true, //automaticly start play if it is showing
timeout: (SlidesArray[SlideIndex].hasAddprocess && SlidesArray[SlideIndex].maintime == 0) ? configsettings.TimeOut:0, //special case, if movie not finished correctly: we fired onComplete function
onReady: function ($player) { player = $player;},
onComplete: function (obj){ if (!isReviewMode && obj != undefined) $.fn.Unblock('',obj.cscallbackid,'cs',''Winky Winky; },
onError: function (e) {

if (!isReviewMode && SlidesArray[e.cscallbackid].hasAddprocess) //run this once in regular mode only
{
$.fn.Unblock('',e.cscallbackid,'cs','cs_error'Winky Winky;
var error_msg = e.msg+' courseid:'+settings.courseID + ' moduleid:'+settings.moduleID +' topicid:'+settings.topicID+' slideid:'+SlidesArray[e.cscallbackid].ID;
//$.app.logError('jquery.casestudy.js:'+error_msg,e.url,415,configsettings.toRootURL,settings.userID,settings.refID);
}
}
};


if (SlidesArray[SlideIndex].SpecialType == "cs"){ //load 'casestudies video
$VideoSelector=$('#cs'+currentSlideIndex+'_'+SlidesArray[currentSlideIndex].Graphic);
$VideoSelector.casestudy('init',JSON.parse(SlidesArray[currentSlideIndex].SpecialTypeData), VideoOpt);

}

if (SlidesArray[SlideIndex].SpecialType == "video"){
//create json-string manualy:
var graphic=SlidesArray[currentSlideIndex].Graphic;
var dataJson='{'
+'"type": "'+((graphic.substring(0,2)=="h-")? 'half' : 'full'Winky Winky+'",'
+'"topic": "",'
+'"videos": {'
+'"intro": {'
+'"video/mp4": "'+GetStreamingServer()+graphic+'.mp4",'
+'"posterStart": "[toRootURL]casestudies/_posters/'+((graphic.substring(0,2)=="h-")? "generic-half-01.jpg" : "generic-full-01.jpg")+'",'
+'"posterEnd": "[toRootURL]casestudies/_posters/'+((graphic.substring(0,2)=="h-")? "generic-half-01.jpg" : "generic-full-01.jpg")+'"'
+'}'
+'},'
+'"toRootURL": "[toRootURL]"'
+'}';
$VideoSelector=$('#vid'+currentSlideIndex+'_'+SlidesArray[currentSlideIndex].Graphic);
$VideoSelector.casestudy('init',$.parseJSON(dataJson), VideoOpt);
}
}




function InitVoice(currentSlideIndex){

if(SlidesArray[currentSlideIndex].Voice!=null){ //if Voice Over exist for this Slide

if(configsettings.Autoplay) $(".courseplayer-nav .autoplayBtn").show();
else $(".courseplayer-nav .autoplayBtn").hide();


$AudioSelector = $("#audio"+currentSlideIndex);
var _file = configsettings.VoiceOverPath+SlidesArray[currentSlideIndex].Voice;
var ap_options = {
file: _file,
height: 30,
width: 940,
autostart: true,
skin: !SlidesArray[currentSlideIndex].hasAddprocess ? "":configsettings.toRootURL+"js/lib/jwplayer/skins/six-custom.xml",
events: {
onReady: function ( player ) {
audioplayer=player;
$(window).resize(function () {
player.resize($AudioSelector.width(), $AudioSelector.height());
});
},
onPlay: function ( e, player ) {},
onPause: function ( e, player ) {},
onComplete: function ( e, player ) { if(!isReviewMode) $.fn.Unblock('',e.callbackid,'audio'Winky Winky; },
onError: function ( e, player) {

if (!isReviewMode && SlidesArray[e.callbackid].hasAddprocess) //run this once in regular mode only
{
$.fn.Unblock('',e.callbackid,'audio','audio_error'Winky Winky;
var error_msg = ' courseid:'+settings.courseID + ' moduleid:'+settings.moduleID +' topicid:'+settings.topicID+ ' slideid:'+SlidesArray[e.callbackid].ID;
//$.app.logError('jquery.audioplayer.js:'+error_msg,e.url,475,configsettings.toRootURL,settings.userID,settings.refID);
}
}
}
};
$AudioSelector.audioplayer(ap_options);
} //-end of if--------
else
{
$("#item"+currentSlideIndex).find(".audio").addClass("hide");
$(".courseplayer-nav .autoplayBtn").hide();
}


}




function InitSlide(currentSlideIndex){
var timeValue = 0;


if (minTimeBetweenSlide >0)
{
timeValue = minTimeBetweenSlide;
$(".button_next").removeClass('btn-basic btn-inverse btn-advance'Winky Winky.addClass('btn-basic btn-inverse'Winky Winky;
$(".button_prev").removeClass('btn-basic btn-inverse btn-advance'Winky Winky.addClass('btn-basic btn-inverse'Winky Winky;
$('#timerValue'Winky Winky.addClass('hide'Winky Winky;
}

if (SlidesArray[currentSlideIndex].Time > 0){

//reorganize between slides
if (minTimeBetweenSlide > 0) SlidesArray[currentSlideIndex].timebetweenSlide = minTimeBetweenSlide;

if (SlidesArray[currentSlideIndex].maintime == SlidesArray[currentSlideIndex].Time) //check if timer starts first
timeValue = SlidesArray[currentSlideIndex].Time;
else
timeValue = SlidesArray[currentSlideIndex].Time + 1;

$('#timerValue'Winky Winky.removeClass('hide'Winky Winky;
$(".button_next").removeClass('btn-basic btn-inverse btn-advance'Winky Winky.addClass('btn-basic btn-inverse'Winky Winky;
}

if (timeValue > 0){
$('#timerValue'Winky Winky.html(InitTime(timeValue, SlidesArray[currentSlideIndex]));
tm.start();
}

//special content script
if (SlidesArray[currentSlideIndex].hasAddprocess) {
$(".button_next").removeClass('btn-basic btn-inverse btn-advance'Winky Winky.addClass('btn-basic btn-inverse'Winky Winky;
}


}

//update Topic functions:
function UpdateProgress(marker,isExit){
$.ajax({
type: "POST",
url: configsettings.toRootURL+"wsrest/player.svc/"+settings.userID+"/"+settings.refID+"/course/"+settings.schoolID+"/"+settings.courseID+"/update-current-topic-progress",
data: JSON.stringify({marker:marker,topicISad Awesomesettings.topicID}),
contentType: "application/json;charset=utf-8",
dataType: "json",
success: function (result) {

if(result.Commands&&result.Commands[0].__type=='ExitPlayerCmd' || isExit != undefined){
$blockElement.block({message: $("<img src='"+configsettings.toRootURL+"img/icons/loading.gif' alt='' height='32' width='32' />")});
ExitToDashBoard(false);
}

},
error: function (xhr) {
$blockElement.block({message: $("<img src='"+configsettings.toRootURL+"img/icons/loading.gif' alt='' height='32' width='32' />")});
ExitToDashBoard(false);
}
});

}


function FinishTopic(){
//var inpdata="<LectureMarkerUpdate><TopicID>"+settings.topicID+"</TopicID></LectureMarkerUpdate>";
$.ajax({
type: "POST",
url:configsettings.toRootURL+"wsrest/player.svc/"+settings.userID+"/"+settings.refID+"/course/"+settings.schoolID+"/"+settings.courseID+"/finish-current-topic",
contentType: "application/json;charset=utf-8",
dataType: 'json',
data: JSON.stringify({marker:"",topicISad Awesomesettings.topicID}),
cache: false,
success: function (result){

//exit PlayerCmd
if(result.Commands&&result.Commands[0].__type=='ExitPlayerCmd'Winky Winky{

$blockElement.block({message: $("<img src='"+configsettings.toRootURL+"img/icons/loading.gif' alt='' height='32' width='32' />")});
ExitToDashBoard(false);
return true;
}

if(result.ModuleToModule && result.ModuleFinished)
window.location.replace(configsettings.ToCourseURL+"?act=NEXTMODULE&refID="+settings.refID);
else if(!result.ModuleFinished) {
window.location.replace(configsettings.ToCourseURL+"?act=NEXTOPIC&refID="+settings.refID);

}
else {
$.when($.Deferred(function(dfd){$('.courseplayer'Winky Winky.DECoursePlayer('on-player-exit',dfd);}))
.then(function(){window.location.replace(configsettings.ToDashBoardURL+'?refID='+settings.refID+(result.ModuleFinished? '&modEnd=y':''Winky Winky );});
}
},
error: function(){
$blockElement.block({message: $("<img src='"+configsettings.toRootURL+"img/icons/loading.gif' alt='' height='32' width='32' />")});
ExitToDashBoard(false);
}
});
return false;
}

function FirstStart()
{
$(".totalslideTitle").html(settings.totalSlides);
$(".currslideTitle").html((currentSlideIndex+1)+prevSlides);
$("#sectionTitle").html(SlidesArray[currentSlideIndex].SectTitle);

//Previous Button - Gray MANUAL MODE
if (currentSlideIndex ==0 ) $(".button_prev").removeClass('btn-basic btn-inverse btn-advance'Winky Winky.addClass('btn-basic btn-inverse'Winky Winky;
else $(".button_prev").removeClass('btn-basic btn-inverse btn-advance'Winky Winky.addClass('btn-advance'Winky Winky;



if (currentSlideIndex == (SlidesArray.length-1)) isFinishbutton=true;
SlidesArray[currentSlideIndex].Showed=true;

InitVoice(currentSlideIndex);
InitVideo(currentSlideIndex);
InitSlide(currentSlideIndex);
$("#item"+currentSlideIndex).css('display',''Winky Winky;

}



//intro-animation options
var IntroOptions = {
assets_uri: configsettings.IntroAnimationGraphicPath,
replace_target: "[toRootURL]",
autoplay:true,
onStart: function () {},
onEnd: function (obj){ if (!isReviewMode && obj!=undefined) $.fn.Unblock('',obj.callbackid,'intro',''Winky Winky;}
};

//AUTO-PLAY PART
$(".courseplayer-nav .autoplayBtn").on("click", function () {

if($(this).hasClass("cp-circle-off")) {
$(this).removeClass("cp-circle-off");
$(this).addClass("cp-circle-on");
autoPlayMode=true;

//$(".manualnavigation").hide();
//$(".autonavigation").show();
//$(".autonavigation .button_play").removeClass('btn-basic btn-inverse btn-advance'Winky Winky.addClass('btn-basic btn-inverse'Winky Winky;
//$(".autonavigation .button_pause").removeClass('btn-basic btn-inverse btn-advance'Winky Winky.addClass('btn-advance'Winky Winky;
}
else {
$(this).removeClass("cp-circle-on");
$(this).addClass("cp-circle-off");
autoPlayMode=false;
//$(".manualnavigation").show();
//$(".autonavigation").hide();
}
});

/*
$(".autonavigation .button_play").on("click", function () {

if($(this).hasClass("btn-inverse")) return;

$(".autonavigation .button_play").removeClass('btn-basic btn-inverse btn-advance'Winky Winky.addClass('btn-basic btn-inverse'Winky Winky;
$(".autonavigation .button_pause").removeClass('btn-basic btn-inverse btn-advance'Winky Winky.addClass('btn-advance'Winky Winky;
tm.start();

});

$(".autonavigation .button_pause").on("click", function () {

if($(this).hasClass("btn-inverse")) return;

$(".autonavigation .button_play").removeClass('btn-basic btn-inverse btn-advance'Winky Winky.addClass('btn-advance'Winky Winky;
$(".autonavigation .button_pause").removeClass('btn-basic btn-inverse btn-advance'Winky Winky.addClass('btn-basic btn-inverse'Winky Winky;
tm.pause();

}); */

//-------end of AUTO-PLAY-------------------------------------

function Init(){

EraseCookies();// always clear Timer cookies

if(settings.minTimeBetween!=0){ //time bitwen slides global variable
minTimeBetweenSlide=settings.minTimeBetween;}

//review mode global variable
isReviewMode=$.parseJSON(settings.isReviewMode);

//autoplay mode (if voice over exist)
autoPlayMode=configsettings.Autoplay;

//make one Array of Slides
for (var i = 0; i <= sections.sections.length - 1; i++){
for (var j = 0; j <= sections.sections[i].slides.length - 1; j++){
var slide=new Object();
slide.SectTitle=sections.sections[i].Title.replace(/\&/g,"'");
slide.timebetweenSlide = minTimeBetweenSlide;
slide.index=0;
slide.Time=parseInt(sections.sections[i].slides[j].Time);
slide.Graphic=sections.sections[i].slides[j].Graphic;
slide.hasAddprocess = false;
slide.maintime = slide.Time;
slide.Showed=false;
//additional property for special slide types(cs,intro-animation,carparts,video):
slide.SpecialType="";
slide.SpecialTypeData=null;
//voiceover
slide.Voice = sections.sections[i].slides[j].Voice;
slide.ID='';
SlidesArray.push(slide);
}
}
if(!isReviewMode)
{
if(settings.marker!=0) //setup current slide
{
var markerSlide=parseInt(settings.marker);
currentSlideIndex=markerSlide-(prevSlides+1);
//problem with save Marker in StudentCalendar Table (Finish Topic run early then Update)
// 1) sometimes marker is less then prevSlides count, so need to prevent Index <0 (glitch in DB with marker Save)
// 2) sometimes marker is great then elements in Array count, so need to prevent big Index
if(currentSlideIndex<0 || currentSlideIndex>(SlidesArray.length-1)) currentSlideIndex=0;
lastUpdatedIndex=currentSlideIndex;
}

} //end of regular slide mode



//find special slides and prepare data for them:
//carparts and intro-animation should be initialize once, other types reload each time when showed
/*
$.get(configsettings.CaseStudiesConfigPath, function (data)
{


for(var k=0; k<=SlidesArray.length-1;k++)
{
SlidesArray[k].index=k;
SlidesArray[k].ID=$("#item"+k).data("slideid");

if(isReviewMode)
{
SlidesArray[k].Showed=true;
SlidesArray[k].Time=0;
SlidesArray[k].hasAddprocess=false;
}
else {
SlidesArray[k].hasAddprocess=$("#item"+k).data("callback");
if(currentSlideIndex>k) { //mark previous slides as showed and set time value to 0
SlidesArray[k].Showed=true;SlidesArray[k].Time=0;
}
}


if($("#item"+k).data("special"))
{
$(data).find('cs'Winky Winky.each(function (element) //casestudies search
{
if ($(this).attr('ID'Winky Winky == SlidesArray[k].Graphic){
SlidesArray[k].SpecialType="cs";
SlidesArray[k].SpecialTypeData=$(this).text().replace(/\[toVideoSrv]/g,configsettings.StreamingServerFolder);
return;
}
});


$(data).find('intro'Winky Winky.each(function (element) //intro animation
{
if ($(this).attr('ID'Winky Winky == SlidesArray[k].Graphic){
SlidesArray[k].SpecialType="intro";
$('#intro'+SlidesArray[k].index+"_"+SlidesArray[k].Graphic).contentSummary("init",JSON.parse($(this).text()), IntroOptions);
}
});

$(data).find('carparts'Winky Winky.each(function (element) //carparts
{
if ($(this).attr('ID'Winky Winky == SlidesArray[k].Graphic){
var str=$(this).text();
str=str.replace(/\[toRootURL\]/g,configsettings.CarPartsGraphicPath);
SlidesArray[k].SpecialType="carparts";

var options = $.extend(true, {background: "",iconClass: "",spotsList: []}, JSON.parse(str));
var data =
{
backgroundGaspptions.background,
hotspotsGaspptions.spotsList,
start:0,
autoOpenDelay:1,
clickToStage:true,
containerISad Awesome"carpt"+SlidesArray[k].index+"_"+SlidesArray[k].Graphic,
iconClassGaspptions.iconClass,
toRootURL:configsettings.CarPartsGraphicPath,
onComplete:function(obj){ if(!isReviewMode) $.fn.Unblock('',obj.callbackid,'carparts',''Winky Winky; }
};
$("#carpt"+SlidesArray[k].index+"_"+SlidesArray[k].Graphic).carParts(data);
}
});

if(SlidesArray[k].SpecialType=="") SlidesArray[k].SpecialType='video';
}//end of special slides

}//end of loop slides

FirstStart();

}); //end of $get
*/
$.ajax({
type: "GET",
url: configsettings.CaseStudiesConfigPath,
cache: activeCash,
success: function (data) {

for(var k=0; k<=SlidesArray.length-1;k++)
{
SlidesArray[k].index=k;
SlidesArray[k].ID=$("#item"+k).data("slideid");

if(isReviewMode)
{
SlidesArray[k].Showed=true;
SlidesArray[k].Time=0;
SlidesArray[k].hasAddprocess=false;
}
else {
SlidesArray[k].hasAddprocess=$("#item"+k).data("callback");
if(currentSlideIndex>k) { //mark previous slides as showed and set time value to 0
SlidesArray[k].Showed=true;SlidesArray[k].Time=0;
}
}


if($("#item"+k).data("special"))
{
$(data).find('cs'Winky Winky.each(function (element) //casestudies search
{
if ($(this).attr('ID'Winky Winky == SlidesArray[k].Graphic){
SlidesArray[k].SpecialType="cs";
SlidesArray[k].SpecialTypeData=$(this).text().replace(/\[toVideoSrv]/g,GetStreamingServer());
return;
}
});


$(data).find('intro'Winky Winky.each(function (element) //intro animation
{
if ($(this).attr('ID'Winky Winky == SlidesArray[k].Graphic){
SlidesArray[k].SpecialType="intro";
$('#intro'+SlidesArray[k].index+"_"+SlidesArray[k].Graphic).contentSummary("init",JSON.parse($(this).text()), IntroOptions);
}
});

$(data).find('carparts'Winky Winky.each(function (element) //carparts
{
if ($(this).attr('ID'Winky Winky == SlidesArray[k].Graphic){
var str=$(this).text();
str=str.replace(/\[toRootURL\]/g,configsettings.CarPartsGraphicPath);
SlidesArray[k].SpecialType="carparts";

var options = $.extend(true, {background: "",iconClass: "",spotsList: []}, JSON.parse(str));
var data =
{
backgroundGaspptions.background,
hotspotsGaspptions.spotsList,
start:0,
autoOpenDelay:1,
clickToStage:true,
containerISad Awesome"carpt"+SlidesArray[k].index+"_"+SlidesArray[k].Graphic,
iconClassGaspptions.iconClass,
toRootURL:configsettings.CarPartsGraphicPath,
onComplete:function(obj){ if(!isReviewMode) $.fn.Unblock('',obj.callbackid,'carparts',''Winky Winky; }
};
$("#carpt"+SlidesArray[k].index+"_"+SlidesArray[k].Graphic).carParts(data);
}
});

if(SlidesArray[k].SpecialType=="") SlidesArray[k].SpecialType='video';
}//end of special slides

}//end of loop slides

FirstStart();


},
error: function (xhr) { }
});

















} //--------------------------------------------------end of INIT-------------------------------------------------------------------------------------------

//General JavaScript Error handler; for AJAX use $.ajaxSetup({
window.onerror = function(msg, url, linenumber)
{

var last_error_msg = msg +' courseid:'+settings.courseID + ' moduleid:'+settings.moduleID +' topicid:'+settings.topicID+' slideid:'+$("#item"+(prevSlides+currentSlideIndex)).data("slideid");
var last_error_url = url;
var last_error_linenumber = linenumber;

//chek on duplicates rows commited in DB
if(last_error_msg==LastErrMsg && last_error_url==LastErrUrl && last_error_linenumber == LastErrLine) return true;

//$.app.logError('jquery.CoursePlayerSlideWrap.js:'+last_error_msg, last_error_url, last_error_linenumber,configsettings.toRootURL,settings.userID,settings.refID);

LastErrMsg = last_error_msg;
LastErrUrl = last_error_url;
LastErrLine = last_error_linenumber;

return true;
}

return this.each(function (){
Init();
});
};//End of $.fn.DECourseHTMLSlide


//1. Slide Timer has high priority!
//if additional process is 'cs' or 'video' -- we set up automaticly fired on OnComplete function
//2. Then Additional process (intro-animation, carparts)
/*
$.fn.Unblock = function (parm, Slide,inIndex,IsMainTimer)
{
if (inIndex != undefined) //this function run one of these (CS,Intro-animation, Car-parts)
{
var intIndex=parseInt(inIndex);

if (!SlidesArray[intIndex].hasAddprocess) return; //return if we call CallBackFn twice

SlidesArray[intIndex].hasAddprocess = false;

if (SlidesArray[intIndex].Time == 0&&SlidesArray[intIndex].timebetweenSlide<=0) $(".button_next").removeClass('btn-basic btn-inverse btn-advance'Winky Winky.addClass('btn-advance'Winky Winky;
return false;
}

if (parm == '00:00'Winky Winky{ //any (Finish Timer)


$(".button_prev").removeClass('btn-basic btn-inverse btn-advance'Winky Winky.addClass('btn-advance'Winky Winky; //unblock Prev Button in any case

if (IsMainTimer){

$('#timerValue'Winky Winky.addClass('hide'Winky Winky;

if (Slide.SpecialType == 'cs'||Slide.SpecialType == 'video'Winky Winky{
Slide.hasAddprocess = false;
$(".button_next").removeClass('btn-basic btn-inverse btn-advance'Winky Winky.addClass('btn-advance'Winky Winky;

} else if (!Slide.hasAddprocess) $(".button_next").removeClass('btn-basic btn-inverse btn-advance'Winky Winky.addClass('btn-advance'Winky Winky;
}
else if (!Slide.hasAddprocess) $(".button_next").removeClass('btn-basic btn-inverse btn-advance'Winky Winky.addClass('btn-advance'Winky Winky;

if (Slide.index == 0) $(".button_prev").removeClass('btn-basic btn-inverse btn-advance'Winky Winky.addClass('btn-basic btn-inverse'Winky Winky;



} else{ //decrement any timer value
$('#timerValue'Winky Winky.html(parm);
if (Slide.Time > 0){
Slide.Time = Slide.Time - 1;
if (minTimeBetweenSlide > 0) {
if (Slide.timebetweenSlide == 0) //timebetween finished
{
if (Slide.index != 0)
$(".button_prev").removeClass('btn-basic btn-inverse btn-advance'Winky Winky.addClass('btn-advance'Winky Winky;

}else
Slide.timebetweenSlide = Slide.timebetweenSlide - 1;
}
} else if(minTimeBetweenSlide > 0) Slide.timebetweenSlide = Slide.timebetweenSlide - 1;
} //end of decrement
};
//--end of $.fn.Unblock------------------------------------------------------------------------------------------------------------------
*/

//1.audio has supressed timer and has bigger priorrity
//2.Main timer for slide
//3. Then CS or Video

$.fn.Unblock = function (parm,slideindex,process,error)
{
var intIndex=parseInt(slideindex);
var slide=SlidesArray[intIndex];


//console.log(slide);
//errors handler
if(error == 'audio_error'Winky Winky {
SlidesArray[intIndex].Voice=null; //prevent audio at all
if(slide.Time == 0 && cs_error) { //check if another process exists
$.fn.Button($(".button_next"),true);
SlidesArray[intIndex].hasAddprocess=false;
}
return false;
}else if(error == 'cs_error'Winky Winky{
cs_error=true;
if(slide.Time == 0 && slide.Voice == null){ //check if another process exists
$.fn.Button($(".button_next"),true);
SlidesArray[intIndex].hasAddprocess=false;
}
return false;
}



if(process=='audio'Winky Winky
{
$.fn.Button($(".button_next"),true);
SlidesArray[intIndex].hasAddprocess=false;
if(autoPlayMode) $('.button_next'Winky Winky.trigger("click");

}else if(process=='cs' || process=='carparts' || process=='intro'Winky Winky
{
//check if Voice exist or Timer still working,wait for finish it
if (slide.Voice == null && slide.Time == 0 && slide.timebetweenSlide<=0){
$.fn.Button($(".button_next"),true);
SlidesArray[intIndex].hasAddprocess=false;
}

}else if(process=='timer'Winky Winky //we had 2 types of timer, first one (unvisible) button timer, second one is main for slide
{

if (parm == '00:00'Winky Winky
{
$.fn.Button($(".button_prev"),true); //unblock prev button in any case!


if(!$('#timerValue'Winky Winky.hasClass('hide'Winky Winky) //determine if it is main timer
{
$('#timerValue'Winky Winky.addClass('hide'Winky Winky;
//check if audio is exist -- waiting on End event from it
if (slide.Voice == null){
$.fn.Button($(".button_next"),true);
SlidesArray[intIndex].hasAddprocess=false;

}
}else if(!SlidesArray[intIndex].hasAddprocess) $.fn.Button($(".button_next"),true); //if it is timebetween slide timer end


if (slide.index == 0) $.fn.Button($(".button_prev"),false); //in case we had one slide only


}else //decrement any timer value
{
$('#timerValue'Winky Winky.html(parm);
if (slide.Time > 0){
SlidesArray[intIndex].Time = SlidesArray[intIndex].Time - 1;
if (minTimeBetweenSlide > 0) {
if (slide.timebetweenSlide == 0) {
if (slide.index != 0) $.fn.Button($(".button_prev"),true);
}else
SlidesArray[intIndex].timebetweenSlide = SlidesArray[intIndex].timebetweenSlide - 1;
}
} else if(minTimeBetweenSlide > 0) SlidesArray[intIndex].timebetweenSlide = SlidesArray[intIndex].timebetweenSlide - 1;

}//end of decrement


}//end of 'timer'

};


$.fn.Button = function ($button,visible)
{
if(visible)
$button.removeClass('btn-basic btn-inverse btn-advance'Winky Winky.addClass('btn-advance'Winky Winky;
else
$button.removeClass('btn-basic btn-inverse btn-advance'Winky Winky.addClass('btn-basic btn-inverse'Winky Winky;
};

})(jQuery, window, document);

______________________________________________________________________________________

Someone please help me I really don't want to take the course all over again.


I've put your code in bbcode tags for readability and to reduce the thread length, also the timer is most likely server-sided so you most likely won't be able to bypass it, but I'm not 100% sure because I don't have the website to look.
01-15-2016, 05:44 PM #5
Crunk
Sir, I'm too 1337
Originally posted by Black
Why not learn how to drive in a legit way, so you don't crash and kill innocent people because you were too lazy to just finish the course lol


I was kinda saying the same thing to him.

Copyright © 2024, NextGenUpdate.
All Rights Reserved.

Gray NextGenUpdate Logo