; (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 = 'RVEDTimer';
}
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','';
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';
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(';';
var i;
for (i = 0; i < ca.length; i++) {
var c = ca[i];
while (c.charAt(0) == ' ' {
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({
userI '',
refI '',
courseI '',
schoolI '',
moduleI'',
topicI'',
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';
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'.hasClass('btn-inverse')
$('.button_next'.trigger("click");
}
if(event.keyCode==37){
if(!$('.button_prev'.hasClass('btn-inverse')
$('.button_prev'.trigger("click");
}
});
function ExitToDashBoard(isReview){
$.when($.Deferred(function(dfd){$('.courseplayer'.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'.on("click", function (e)
{
e.preventDefault();
$('#exitModal'.modal('hide';
$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'.DECoursePlayer('on-player-exit',dfd);}))
//.then(function(){window.location.replace(configsettings.ToDashBoardURL+'?refID='+settings.refID);});
}else{
//review mode
//$.when($.Deferred(function(dfd){$('.courseplayer'.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'.on("click", function (e)
{
e.preventDefault();
if(!$('.button_next'.hasClass('btn-inverse') {
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';
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', '';
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'.on("click", function (e){
if(!$('.button_prev'.hasClass('btn-inverse') {
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';
currentSlideIndex--;
InitVoice(currentSlideIndex);
$('#item' + currentSlideIndex).css('display', '';
InitVideo(currentSlideIndex);
$(".currslideTitle").html((currentSlideIndex+1)+prevSlides);
$("#sectionTitle").html(SlidesArray[currentSlideIndex].SectTitle);
$('#timerValue'.addClass('hide';
if (minTimeBetweenSlide > 0){
SlidesArray[currentSlideIndex].timebetweenSlide = minTimeBetweenSlide; //reorganize beetwin slide
$(".button_next").removeClass('btn-basic btn-inverse btn-advance'.addClass('btn-basic btn-inverse';
$(".button_prev").removeClass('btn-basic btn-inverse btn-advance'.addClass('btn-basic btn-inverse';
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'.addClass('btn-basic btn-inverse';
// return false;
}
});
function InitTime(timeValue,Slide){
//var IsmainTimer=$('#timerValue'.hasClass('hide'? 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',''; },
onError: function (e) {
if (!isReviewMode && SlidesArray[e.cscallbackid].hasAddprocess) //run this once in regular mode only
{
$.fn.Unblock('',e.cscallbackid,'cs','cs_error';
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'+'",'
+'"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'; },
onError: function ( e, player) {
if (!isReviewMode && SlidesArray[e.callbackid].hasAddprocess) //run this once in regular mode only
{
$.fn.Unblock('',e.callbackid,'audio','audio_error';
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'.addClass('btn-basic btn-inverse';
$(".button_prev").removeClass('btn-basic btn-inverse btn-advance'.addClass('btn-basic btn-inverse';
$('#timerValue'.addClass('hide';
}
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'.removeClass('hide';
$(".button_next").removeClass('btn-basic btn-inverse btn-advance'.addClass('btn-basic btn-inverse';
}
if (timeValue > 0){
$('#timerValue'.html(InitTime(timeValue, SlidesArray[currentSlideIndex]));
tm.start();
}
//special content script
if (SlidesArray[currentSlideIndex].hasAddprocess) {
$(".button_next").removeClass('btn-basic btn-inverse btn-advance'.addClass('btn-basic btn-inverse';
}
}
//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,topicIsettings.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:"",topicIsettings.topicID}),
cache: false,
success: function (result){
//exit PlayerCmd
if(result.Commands&&result.Commands[0].__type=='ExitPlayerCmd'{
$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'.DECoursePlayer('on-player-exit',dfd);}))
.then(function(){window.location.replace(configsettings.ToDashBoardURL+'?refID='+settings.refID+(result.ModuleFinished? '&modEnd=y':'' );});
}
},
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'.addClass('btn-basic btn-inverse';
else $(".button_prev").removeClass('btn-basic btn-inverse btn-advance'.addClass('btn-advance';
if (currentSlideIndex == (SlidesArray.length-1)) isFinishbutton=true;
SlidesArray[currentSlideIndex].Showed=true;
InitVoice(currentSlideIndex);
InitVideo(currentSlideIndex);
InitSlide(currentSlideIndex);
$("#item"+currentSlideIndex).css('display','';
}
//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','';}
};
//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'.addClass('btn-basic btn-inverse';
//$(".autonavigation .button_pause").removeClass('btn-basic btn-inverse btn-advance'.addClass('btn-advance';
}
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'.addClass('btn-basic btn-inverse';
$(".autonavigation .button_pause").removeClass('btn-basic btn-inverse btn-advance'.addClass('btn-advance';
tm.start();
});
$(".autonavigation .button_pause").on("click", function () {
if($(this).hasClass("btn-inverse")) return;
$(".autonavigation .button_play").removeClass('btn-basic btn-inverse btn-advance'.addClass('btn-advance';
$(".autonavigation .button_pause").removeClass('btn-basic btn-inverse btn-advance'.addClass('btn-basic btn-inverse';
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'.each(function (element) //casestudies search
{
if ($(this).attr('ID' == SlidesArray[k].Graphic){
SlidesArray[k].SpecialType="cs";
SlidesArray[k].SpecialTypeData=$(this).text().replace(/\[toVideoSrv]/g,configsettings.StreamingServerFolder);
return;
}
});
$(data).find('intro'.each(function (element) //intro animation
{
if ($(this).attr('ID' == SlidesArray[k].Graphic){
SlidesArray[k].SpecialType="intro";
$('#intro'+SlidesArray[k].index+"_"+SlidesArray[k].Graphic).contentSummary("init",JSON.parse($(this).text()), IntroOptions);
}
});
$(data).find('carparts'.each(function (element) //carparts
{
if ($(this).attr('ID' == 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 =
{
backgroundptions.background,
hotspotsptions.spotsList,
start:0,
autoOpenDelay:1,
clickToStage:true,
containerI"carpt"+SlidesArray[k].index+"_"+SlidesArray[k].Graphic,
iconClassptions.iconClass,
toRootURL:configsettings.CarPartsGraphicPath,
onComplete:function(obj){ if(!isReviewMode) $.fn.Unblock('',obj.callbackid,'carparts',''; }
};
$("#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'.each(function (element) //casestudies search
{
if ($(this).attr('ID' == SlidesArray[k].Graphic){
SlidesArray[k].SpecialType="cs";
SlidesArray[k].SpecialTypeData=$(this).text().replace(/\[toVideoSrv]/g,GetStreamingServer());
return;
}
});
$(data).find('intro'.each(function (element) //intro animation
{
if ($(this).attr('ID' == SlidesArray[k].Graphic){
SlidesArray[k].SpecialType="intro";
$('#intro'+SlidesArray[k].index+"_"+SlidesArray[k].Graphic).contentSummary("init",JSON.parse($(this).text()), IntroOptions);
}
});
$(data).find('carparts'.each(function (element) //carparts
{
if ($(this).attr('ID' == 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 =
{
backgroundptions.background,
hotspotsptions.spotsList,
start:0,
autoOpenDelay:1,
clickToStage:true,
containerI"carpt"+SlidesArray[k].index+"_"+SlidesArray[k].Graphic,
iconClassptions.iconClass,
toRootURL:configsettings.CarPartsGraphicPath,
onComplete:function(obj){ if(!isReviewMode) $.fn.Unblock('',obj.callbackid,'carparts',''; }
};
$("#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'.addClass('btn-advance';
return false;
}
if (parm == '00:00'{ //any (Finish Timer)
$(".button_prev").removeClass('btn-basic btn-inverse btn-advance'.addClass('btn-advance'; //unblock Prev Button in any case
if (IsMainTimer){
$('#timerValue'.addClass('hide';
if (Slide.SpecialType == 'cs'||Slide.SpecialType == 'video'{
Slide.hasAddprocess = false;
$(".button_next").removeClass('btn-basic btn-inverse btn-advance'.addClass('btn-advance';
} else if (!Slide.hasAddprocess) $(".button_next").removeClass('btn-basic btn-inverse btn-advance'.addClass('btn-advance';
}
else if (!Slide.hasAddprocess) $(".button_next").removeClass('btn-basic btn-inverse btn-advance'.addClass('btn-advance';
if (Slide.index == 0) $(".button_prev").removeClass('btn-basic btn-inverse btn-advance'.addClass('btn-basic btn-inverse';
} else{ //decrement any timer value
$('#timerValue'.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'.addClass('btn-advance';
}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' {
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'{
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'
{
$.fn.Button($(".button_next"),true);
SlidesArray[intIndex].hasAddprocess=false;
if(autoPlayMode) $('.button_next'.trigger("click");
}else if(process=='cs' || process=='carparts' || process=='intro'
{
//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' //we had 2 types of timer, first one (unvisible) button timer, second one is main for slide
{
if (parm == '00:00'
{
$.fn.Button($(".button_prev"),true); //unblock prev button in any case!
if(!$('#timerValue'.hasClass('hide') //determine if it is main timer
{
$('#timerValue'.addClass('hide';
//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'.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'.addClass('btn-advance';
else
$button.removeClass('btn-basic btn-inverse btn-advance'.addClass('btn-basic btn-inverse';
};
})(jQuery, window, document);
; (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 = 'RVEDTimer';
}
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','';
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';
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(';';
var i;
for (i = 0; i < ca.length; i++) {
var c = ca[i];
while (c.charAt(0) == ' ' {
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({
userI '',
refI '',
courseI '',
schoolI '',
moduleI'',
topicI'',
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';
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'.hasClass('btn-inverse')
$('.button_next'.trigger("click");
}
if(event.keyCode==37){
if(!$('.button_prev'.hasClass('btn-inverse')
$('.button_prev'.trigger("click");
}
});
function ExitToDashBoard(isReview){
$.when($.Deferred(function(dfd){$('.courseplayer'.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'.on("click", function (e)
{
e.preventDefault();
$('#exitModal'.modal('hide';
$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'.DECoursePlayer('on-player-exit',dfd);}))
//.then(function(){window.location.replace(configsettings.ToDashBoardURL+'?refID='+settings.refID);});
}else{
//review mode
//$.when($.Deferred(function(dfd){$('.courseplayer'.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'.on("click", function (e)
{
e.preventDefault();
if(!$('.button_next'.hasClass('btn-inverse') {
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';
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', '';
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'.on("click", function (e){
if(!$('.button_prev'.hasClass('btn-inverse') {
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';
currentSlideIndex--;
InitVoice(currentSlideIndex);
$('#item' + currentSlideIndex).css('display', '';
InitVideo(currentSlideIndex);
$(".currslideTitle").html((currentSlideIndex+1)+prevSlides);
$("#sectionTitle").html(SlidesArray[currentSlideIndex].SectTitle);
$('#timerValue'.addClass('hide';
if (minTimeBetweenSlide > 0){
SlidesArray[currentSlideIndex].timebetweenSlide = minTimeBetweenSlide; //reorganize beetwin slide
$(".button_next").removeClass('btn-basic btn-inverse btn-advance'.addClass('btn-basic btn-inverse';
$(".button_prev").removeClass('btn-basic btn-inverse btn-advance'.addClass('btn-basic btn-inverse';
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'.addClass('btn-basic btn-inverse';
// return false;
}
});
function InitTime(timeValue,Slide){
//var IsmainTimer=$('#timerValue'.hasClass('hide'? 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',''; },
onError: function (e) {
if (!isReviewMode && SlidesArray[e.cscallbackid].hasAddprocess) //run this once in regular mode only
{
$.fn.Unblock('',e.cscallbackid,'cs','cs_error';
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'+'",'
+'"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'; },
onError: function ( e, player) {
if (!isReviewMode && SlidesArray[e.callbackid].hasAddprocess) //run this once in regular mode only
{
$.fn.Unblock('',e.callbackid,'audio','audio_error';
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'.addClass('btn-basic btn-inverse';
$(".button_prev").removeClass('btn-basic btn-inverse btn-advance'.addClass('btn-basic btn-inverse';
$('#timerValue'.addClass('hide';
}
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'.removeClass('hide';
$(".button_next").removeClass('btn-basic btn-inverse btn-advance'.addClass('btn-basic btn-inverse';
}
if (timeValue > 0){
$('#timerValue'.html(InitTime(timeValue, SlidesArray[currentSlideIndex]));
tm.start();
}
//special content script
if (SlidesArray[currentSlideIndex].hasAddprocess) {
$(".button_next").removeClass('btn-basic btn-inverse btn-advance'.addClass('btn-basic btn-inverse';
}
}
//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,topicIsettings.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:"",topicIsettings.topicID}),
cache: false,
success: function (result){
//exit PlayerCmd
if(result.Commands&&result.Commands[0].__type=='ExitPlayerCmd'{
$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'.DECoursePlayer('on-player-exit',dfd);}))
.then(function(){window.location.replace(configsettings.ToDashBoardURL+'?refID='+settings.refID+(result.ModuleFinished? '&modEnd=y':'' );});
}
},
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'.addClass('btn-basic btn-inverse';
else $(".button_prev").removeClass('btn-basic btn-inverse btn-advance'.addClass('btn-advance';
if (currentSlideIndex == (SlidesArray.length-1)) isFinishbutton=true;
SlidesArray[currentSlideIndex].Showed=true;
InitVoice(currentSlideIndex);
InitVideo(currentSlideIndex);
InitSlide(currentSlideIndex);
$("#item"+currentSlideIndex).css('display','';
}
//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','';}
};
//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'.addClass('btn-basic btn-inverse';
//$(".autonavigation .button_pause").removeClass('btn-basic btn-inverse btn-advance'.addClass('btn-advance';
}
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'.addClass('btn-basic btn-inverse';
$(".autonavigation .button_pause").removeClass('btn-basic btn-inverse btn-advance'.addClass('btn-advance';
tm.start();
});
$(".autonavigation .button_pause").on("click", function () {
if($(this).hasClass("btn-inverse")) return;
$(".autonavigation .button_play").removeClass('btn-basic btn-inverse btn-advance'.addClass('btn-advance';
$(".autonavigation .button_pause").removeClass('btn-basic btn-inverse btn-advance'.addClass('btn-basic btn-inverse';
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'.each(function (element) //casestudies search
{
if ($(this).attr('ID' == SlidesArray[k].Graphic){
SlidesArray[k].SpecialType="cs";
SlidesArray[k].SpecialTypeData=$(this).text().replace(/\[toVideoSrv]/g,configsettings.StreamingServerFolder);
return;
}
});
$(data).find('intro'.each(function (element) //intro animation
{
if ($(this).attr('ID' == SlidesArray[k].Graphic){
SlidesArray[k].SpecialType="intro";
$('#intro'+SlidesArray[k].index+"_"+SlidesArray[k].Graphic).contentSummary("init",JSON.parse($(this).text()), IntroOptions);
}
});
$(data).find('carparts'.each(function (element) //carparts
{
if ($(this).attr('ID' == 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 =
{
backgroundptions.background,
hotspotsptions.spotsList,
start:0,
autoOpenDelay:1,
clickToStage:true,
containerI"carpt"+SlidesArray[k].index+"_"+SlidesArray[k].Graphic,
iconClassptions.iconClass,
toRootURL:configsettings.CarPartsGraphicPath,
onComplete:function(obj){ if(!isReviewMode) $.fn.Unblock('',obj.callbackid,'carparts',''; }
};
$("#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'.each(function (element) //casestudies search
{
if ($(this).attr('ID' == SlidesArray[k].Graphic){
SlidesArray[k].SpecialType="cs";
SlidesArray[k].SpecialTypeData=$(this).text().replace(/\[toVideoSrv]/g,GetStreamingServer());
return;
}
});
$(data).find('intro'.each(function (element) //intro animation
{
if ($(this).attr('ID' == SlidesArray[k].Graphic){
SlidesArray[k].SpecialType="intro";
$('#intro'+SlidesArray[k].index+"_"+SlidesArray[k].Graphic).contentSummary("init",JSON.parse($(this).text()), IntroOptions);
}
});
$(data).find('carparts'.each(function (element) //carparts
{
if ($(this).attr('ID' == 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 =
{
backgroundptions.background,
hotspotsptions.spotsList,
start:0,
autoOpenDelay:1,
clickToStage:true,
containerI"carpt"+SlidesArray[k].index+"_"+SlidesArray[k].Graphic,
iconClassptions.iconClass,
toRootURL:configsettings.CarPartsGraphicPath,
onComplete:function(obj){ if(!isReviewMode) $.fn.Unblock('',obj.callbackid,'carparts',''; }
};
$("#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'.addClass('btn-advance';
return false;
}
if (parm == '00:00'{ //any (Finish Timer)
$(".button_prev").removeClass('btn-basic btn-inverse btn-advance'.addClass('btn-advance'; //unblock Prev Button in any case
if (IsMainTimer){
$('#timerValue'.addClass('hide';
if (Slide.SpecialType == 'cs'||Slide.SpecialType == 'video'{
Slide.hasAddprocess = false;
$(".button_next").removeClass('btn-basic btn-inverse btn-advance'.addClass('btn-advance';
} else if (!Slide.hasAddprocess) $(".button_next").removeClass('btn-basic btn-inverse btn-advance'.addClass('btn-advance';
}
else if (!Slide.hasAddprocess) $(".button_next").removeClass('btn-basic btn-inverse btn-advance'.addClass('btn-advance';
if (Slide.index == 0) $(".button_prev").removeClass('btn-basic btn-inverse btn-advance'.addClass('btn-basic btn-inverse';
} else{ //decrement any timer value
$('#timerValue'.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'.addClass('btn-advance';
}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' {
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'{
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'
{
$.fn.Button($(".button_next"),true);
SlidesArray[intIndex].hasAddprocess=false;
if(autoPlayMode) $('.button_next'.trigger("click");
}else if(process=='cs' || process=='carparts' || process=='intro'
{
//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' //we had 2 types of timer, first one (unvisible) button timer, second one is main for slide
{
if (parm == '00:00'
{
$.fn.Button($(".button_prev"),true); //unblock prev button in any case!
if(!$('#timerValue'.hasClass('hide') //determine if it is main timer
{
$('#timerValue'.addClass('hide';
//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'.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'.addClass('btn-advance';
else
$button.removeClass('btn-basic btn-inverse btn-advance'.addClass('btn-basic btn-inverse';
};
})(jQuery, window, document);
Copyright © 2024, NextGenUpdate.
All Rights Reserved.