﻿var pageCnt =0
var gCurrSectionNum = 0
var gCurrSectionPageNum = 0
var playPauseFlag = "play"
var isMenuOpen = false
var assetCnt = 0
var fontDownloaderObj
var gTotalPages = 0
var xaml_downloader
var precacheSectionCnt =0
var preCachePageCnt = 0
var demandFlag = false
var xamlDownloadingOn = false
var callOnce = false
var S1_xaml_downloader
var S1_xaml_loaded = false
var S2_xaml_downloader
var S2_xaml_loaded = false

var S3_xaml_downloader
var S3_xaml_loaded = false

var S4_xaml_downloader
var S4_xaml_loaded = false

var gPageAudioLoaded = false

function xamlEntry(xamlUrl) {    
    this.xamlUrl = xamlUrl;    
}

//Loop to calculate total number of pages in the entire course
for(i=0; i<Course.Section.length;i++){
	for(j=0; j<Course.Section[i].Pages.length;j++){
		gTotalPages++		
	}	
}

//Loop to create an array of total pages in each section
var sectioPagesArr = new Array()
for(i=0; i<Course.Section.length;i++){
	var tmpCnt = 0
	for(j=0; j<Course.Section[i].Pages.length;j++){
		tmpCnt++
	}
	sectioPagesArr.push(tmpCnt)
}


//var assetArrName = eval("S"+gCurrSectionNum+"_assetsArray")


        	 
function ButtonMouseClick(sender, eventArgs){		
}
function textMouseLeftButtonDown(){
	
}
//function to launch page from the menu
function fShowPageFromMenu(sender){
	var tmpName = sender.name
	var tmpNameArr = tmpName.split("_")
	gCurrSectionNum = Number(tmpNameArr[1]) - 1
	fIncrementDecrementcnt(sender,"updateFromMenu") 	
	fUpdateNavigationButtons(sender)
}
//functions to load open menu and close menu animation xaml files
function fOpenMenu(sender, lXamlName){
	var slPlugin = sender.getHost();	
	var Menudownloader = slPlugin.createObject("downloader");
	Menudownloader.addEventListener("completed", onOpenMenuLoaded);	
	Menudownloader.open("GET", lXamlName);	
	Menudownloader.send();
}

function fCloseMenu(sender, lXamlName){
	var slPlugin = sender.getHost();	
	var Menudownloader = slPlugin.createObject("downloader");
	Menudownloader.addEventListener("completed", onCloseMenuLoaded);	
	Menudownloader.open("GET", lXamlName);	
	Menudownloader.send();
}

function onCloseMenuLoaded(sender){
	var menuHostCanvas = gControl.content.findName("MenuHostCanvas");
	var lMenu = gControl.content.createFromXaml(sender.responseText); 
	if(menuHostCanvas.children.count > 0) {
		menuHostCanvas.children.removeAt(0);
	} 
	menuHostCanvas.children.add(lMenu);	
	isMenuOpen = false
	fPlayPauseScreen(sender, "0")
}

function MenuStoryboardFinished(sender){
	var menuHostCanvas = gControl.content.findName("MenuHostCanvas");
	menuHostCanvas.children.clear();
}
function onOpenMenuLoaded(sender){
	var menuHostCanvas = gControl.content.findName("MenuHostCanvas");
	var lMenu = gControl.content.createFromXaml(sender.responseText);  
	if(menuHostCanvas.children.count > 0) {
		menuHostCanvas.children.removeAt(0);
	} 
	menuHostCanvas.children.add(lMenu);
	isMenuOpen = true
	fPlayPauseScreen(sender, "1")
}

//function to minimize the menu when user clicks outside the menu
function fCanvasClick(sender){

	if(isMenuOpen){
		//isMenuOpen = false
		fCloseMenu(sender, "XAML/MainMenu_Close.xaml")
		var sceneHostCanvas = gControl.content.findName("sceneHostCanvas");
		if(sceneHostCanvas.children.findName("SectionAnimation")!= null){
			sceneHostCanvas.children.findName("SectionAnimation").Resume();
		}
		
		if(sceneHostCanvas.children.findName("SectionAnimation_audio")!= null){
			sceneHostCanvas.children.findName("SectionAnimation_audio").Play()
		}
		
		var menuCloseNormal = sender.findName("MenuClose")
		var menuCloseenter = sender.findName("MenuClose_enter")
		
		var menuNormal = sender.findName("Menu_normal")
		var menuMain = sender.findName("Menu")
		
		
		menuMain.visibility = "visible"
		menuMain.Opacity = 1;
		
		menuNormal.visibility = "visible"
		menuNormal.Opacity = 1;
		
		menuCloseNormal.visibility = "collapsed"
		menuCloseNormal.Opacity = 0;
		
		menuCloseenter.visibility = "collapsed"
		menuCloseenter.Opacity = 0;
		
		fShowHidePauseButton (sender, "1")
		fShowHidePlayButton (sender, "0")
	}
}

function fResetMenu(sender){	
}

//function is  called when the mouse is outside the canvas area. 
//It stops the dragging of slider bar if it is on
function fMouseOutOfCanvas(sender){
	if(isMouseDown){		
		fStopDragSlider(sender);
	}
}
//function for back next navigation
//it loads the pages xaml files
function fNavigate(sender){
	gPageAudioLoaded = false
	var sceneHostCanvas = gControl.content.findName("sceneHostCanvas");		
	var slPlugin = sender.getHost();
	
	var tmp_xaml_downloader = eval("S"+(gCurrSectionNum+1)+"_xaml_downloader")
	var xamlFragment = slPlugin.content.createFromXamlDownloader(tmp_xaml_downloader, Course.Section[gCurrSectionNum].Pages[gCurrSectionPageNum].xamlUrl);	
	lscene =xamlFragment
	// Add the XAML object as a child of the root Canvas object.
	 for(i=0;i<lscene.children.count;i++){
		if((lscene.children.getItem(i)).toString() == "TextBlock" ){
			//alert(lscene.children.getItem(i).Text + " Text")
			lscene.children.getItem(i).setFontSource(fontDownloaderObj);
			 lscene.children.getItem(i).fontFamily = "Segoe Condensed"; 	
		}		
	}
	
	if(sceneHostCanvas.children.count > 0) {			
		sceneHostCanvas.children.removeAt(0);			
	} 
	sceneHostCanvas.children.add(xamlFragment);
	if(sceneHostCanvas.children.findName("SectionAnimation_audio") != null){					
		sceneHostCanvas.visibility = "Collapsed"
		sceneHostCanvas.Opacity = 0;
	}else{
		var loader =   sender.findName("Loading")		
		loader.visibility = "Collapsed"	
		fUpdateSliderBar(sender)	
		fUpdateNavigationButtons(sender)
	}
	

	
	
}

function PauseMenu(sender){
//	var lName = sender.name
	//lName

	/*var lTimeLine = sender.findName("MenuOption_Open")
	
	sender.findName("MenuOption_Open").Pause()
	sender.findName("MenuOption_Open").Stop()*/
	
}
function onDownloadProgressChanged(){	
}

function onCompleted(sender, args){	
	var sceneHostCanvas = gControl.content.findName("sceneHostCanvas");
	var lscene = gControl.content.createFromXaml(sender.responseText); 
	
	for(i=0;i<lscene.children.count;i++){
		if((lscene.children.getItem(i)).toString() == "TextBlock" ){
			//alert(lscene.children.getItem(i).Text + " Text")
			lscene.children.getItem(i).setFontSource(fontDownloaderObj);
			 lscene.children.getItem(i).fontFamily = "Segoe Condensed"; 	
		}		
	}
	
	if(sceneHostCanvas.children.count > 0) {
		sceneHostCanvas.children.removeAt(0);
	} 
	
	    
	    
	sceneHostCanvas.children.add(lscene);
	var loader =   sender.findName("Loading")
 	loader.visibility = "Collapsed"
 	fUpdateSliderBar(sender)
 	fUpdateNavigationButtons(sender)
}


function fLoadFirstScreen(sender,eventArgs){

	fEnableAllNavButtons(sender)	
	fNavigate(sender)
	
}

function fEnableAllNavButtons(sender){
	var lNext = sender.findName("Next")	
	var lPause = sender.findName("Pause")
	var lReplay = sender.findName("Replay")
	var lMenu = sender.findName("Menu")
	var lBackDisable= sender.findName("Back_disable")
	var lBack= sender.findName("Back")
	var lAnimateMenu = sender.findName("Animate_Menu")
	var lSectionBackDisable= sender.findName("Section_Back_disable")
	var lSectionNextNormal= sender.findName("Section_Next")
	
	var lAnimateBack = sender.findName("Animate_Back")
	var lAnimatePause = sender.findName("Animate_Pause")
	var lAnimateReplay = sender.findName("Animate_Replay")
	var lAnimateNext = sender.findName("Animate_Next")
	
	var lAnimateSectionBack = sender.findName("Animate_Section_Back")
	var lAnimateSectionNext = sender.findName("Animate_Section_Next")
	
	lNext.Visibility = "Visible"
	lNext.Opacity = 1;		
	
	lPause.Visibility = "Visible"
	lPause.Opacity = 1;	

	lReplay.Visibility = "Visible"
	lReplay.Opacity = 1;
	
	lMenu.Visibility = "Visible"
	lMenu.Opacity = 1;
	
	lBack.Visibility = "Visible"
	lBack.Opacity = 1;
	
	lBackDisable.Visibility = "Visible"
	lBackDisable.Opacity = 1;
	
	lSectionBackDisable.Visibility = "Visible"
	lSectionBackDisable.Opacity = 1;
	
	lSectionNextNormal.Visibility = "Visible"
	lSectionNextNormal.Opacity = 1;
	
	lAnimateMenu.Visibility = "Collapsed"
	lAnimateMenu.Opacity = 0;
	
	lAnimateBack.Visibility = "Collapsed"
	lAnimateBack.Opacity = 0;
	
	lAnimatePause.Visibility = "Collapsed"
	lAnimatePause.Opacity = 0;
	
	lAnimateReplay.Visibility = "Collapsed"
	lAnimateReplay.Opacity = 0;
	
	lAnimateNext.Visibility = "Collapsed"
	lAnimateNext.Opacity = 0;
	
	lAnimateSectionNext.Visibility = "Collapsed"
	lAnimateSectionNext.Opacity = 0;

	lAnimateSectionBack.Visibility = "Collapsed"
	lAnimateSectionBack.Opacity = 0;
}

function fShowHidePauseButton(sender,lValue){

	var lPause =  sender.findName("Pause");
	var lPauseNormal =  sender.findName("Pause_normal");
	var lPauseEnter =  sender.findName("Pause_enter");
	if(lValue == "1"){			
		lPause.visibility = "Visible"
		lPause.Opacity = 1;

		lPauseNormal.visibility = "Visible"
		lPauseNormal.Opacity = 1;

	}else{
		lPause.visibility = "Collapsed"
		lPause.Opacity = 0;

		lPauseNormal.visibility = "Collapsed"
		lPauseNormal.Opacity = 0;

		lPauseEnter.Opacity = 0;
		lPauseEnter.visibility = "Collapsed"
	}

}
		
function fShowHidePlayButton(sender,lValue){
	var lPlay =  sender.findName("Play");
	var lPlayNormal =  sender.findName("Play_normal");
	var lPlayEnter =  sender.findName("Play_enter")
	if(lValue == "1"){			
		lPlay.visibility = "Visible"
		lPlay.Opacity = 1;	

		lPlayNormal.visibility = "Visible"
		lPlayNormal.Opacity = 1;


	}else{
		lPlay.visibility = "Collapsed"
		lPlay.Opacity = 0;

		lPlayNormal.visibility = "Collapsed"
		lPlayNormal.Opacity = 0;

		lPlayEnter.visibility = "Collapsed"
		lPlayEnter.Opacity = 0;
	}	
}
//function to stop the audio 
function AudioLoaded(sender){	
	sender.findName("Main_mp3").Stop();
}
//function called at the end of the storyboard
function StoryboardFinished(sender, eventArgs){
	
	//write the code to load the next xaml file
	
	if(!isMouseDown){
		if(pageCnt<(gTotalPages)-1){
			var newSender = sender.findName("Next")
			sender = newSender
			fIncrementDecrementcnt(sender,"1")			
		}
	}
}
//generic function to increment/decrement page counters
function fIncrementDecrementcnt(sender, lValue){
	var newSender = sender.findName("Next")
	sender = newSender
	if(lValue== "1"){
		pageCnt++		
		if(pageCnt > gTotalPages-1){			
			pageCnt = gTotalPages - 1			
			lValue = "maxValue"
			enableDisableNext(sender, "0")			
		}
	}else if(lValue== "0"){
		pageCnt--
		if(pageCnt <=0){
			pageCnt = 0
			lValue = "reset"
			enableDisableBack(sender, "0")	
		}
	}else if(lValue== "reset"){
		 pageCnt = 0
		 
	}else if(lValue == "updateFromMenu"){
		pageCnt = 0
		for (i=0;i<=gCurrSectionNum-1;i++){			
			pageCnt += sectioPagesArr[i]			
		}		
	}else if(lValue =="maxValue"){
		pageCnt = gTotalPages - 1		
	}else if (lValue == "JumpToSection"){
		var lCnt = 0
		for (i=0;i<gCurrSectionNum;i++){			
			lCnt += sectioPagesArr[i]			
		}
		pageCnt = lCnt
		
	}else{
		pageCnt = lValue;
		
		if(pageCnt < 0){
			pageCnt = 0;
			
		}else if(pageCnt>= gTotalPages){
			pageCnt = gTotalPages - 1
		}		
	}	
	fIncrementDecrementSectionCnt(sender,lValue)
}

function fIncrementDecrementSectionCnt(sender,lValue){
//alert("fIncrementDecrementSectionCnt " )
	if(lValue== "1"){
		if(gCurrSectionPageNum < sectioPagesArr[gCurrSectionNum]-1){
			gCurrSectionPageNum++
		}else{
			
			gCurrSectionPageNum = 0
			gCurrSectionNum++			
		}
	}else if(lValue== "0"){
		if(gCurrSectionPageNum >0){
			
			gCurrSectionPageNum--
		}else{
			gCurrSectionNum--			
			gCurrSectionPageNum = sectioPagesArr[gCurrSectionNum]-1
			
		}
		
	}else if(lValue== "reset"){
		gCurrSectionPageNum = 0
		
	}else if(lValue == "updateFromMenu"){
		gCurrSectionPageNum = 0
		
	}else if(lValue =="maxValue"){
		
	}else if(lValue == "JumpToSection"){	
		
		gCurrSectionNum = gCurrSectionNum		
		gCurrSectionPageNum = 0		
	}else{		
		var lCnt = 0 
		var lCnt1 = pageCnt
		for (i=0;i<sectioPagesArr.length;i++){			
			lCnt += (sectioPagesArr[i] )			
			if(pageCnt <= (lCnt -1)){
				gCurrSectionNum = i					
				if(i==0){
					gCurrSectionPageNum =  pageCnt 					
				}else{
					if(lCnt1 > 0){
						gCurrSectionPageNum = lCnt1 - 1						
					}else{
						gCurrSectionPageNum = lCnt1						
					}		
				}				
				break;
			}else{
				lCnt1 -= sectioPagesArr[i]
			}
		}		
	}
	
	enableDisableSectionBack(sender)	
	enableDisableSectionNext(sender)	
	fPreloadAssets(sender)
}
function fDownloadFonts(sender, eventArgs)
{
    // Retrieve a reference to the plug-in.
  //  var plugin = sender.getHost();

    // Create a Downloader object.
    var downloader = sender.createObject("downloader");
	fontDownloaderObj = downloader;
    // Add Completed event.
    downloader.addEventListener("Completed", onFontCompleted);

    // Initialize the Downloader request.
 	downloader.open("GET", "fonts/ms_fonts.DEPLOY");

    // Execute the Downloader request.
    // NOTE: downloader APIs disallow file:\\ scheme
    // you must run this sample over localhost: or off a server or the following call will fail
    downloader.send();
}

// Event handler for the Completed event.
function onFontCompleted(sender, eventArgs)
{
	//fDownloadImages(gControl)
	fDownloadXaml(gControl)	
}
//function to download xaml files
function fDownloadXaml(sender){
	//alert("precacheSectionCnt" + precacheSectionCnt)
	xamlDownloadingOn = true	
	xaml_downloader = sender.createObject("downloader");
	xaml_downloader.addEventListener("Completed", onXamlCompleted);
	var lZipFileName = "XAML/scenes/section"+(precacheSectionCnt+1)+".DEPLOY"	
	xaml_downloader.open("GET", lZipFileName);
	xaml_downloader.send();	
}
//function called when the xaml downloading is complete
function onXamlCompleted(sender, eventArgs){
//alert("precacheSectionCnt = " + precacheSectionCnt)
	if(precacheSectionCnt==0){		
		S1_xaml_downloader = xaml_downloader
		S1_xaml_loaded = true
	}else if(precacheSectionCnt==1){
		S2_xaml_downloader= xaml_downloader
		S2_xaml_loaded = true
	}else if(precacheSectionCnt==2){
		S3_xaml_downloader= xaml_downloader
		S3_xaml_loaded = true
	}else if(precacheSectionCnt==3){
		S4_xaml_downloader= xaml_downloader
		S4_xaml_loaded = true
	}
	xamlDownloadingOn = false
	preCachePageCnt++
	
	//tmpHolder = xaml_downloader
	assetCnt=0
	//demandFlag = false
	if(precacheSectionCnt==0 && callOnce==false){
		callOnce = true
		fDownloadImages(gControl)
	}else{
		
		fContinueDownloading(gControl)
	}
	//fDownloadImages(gControl)
	/*alert("demandFlag completed" +demandFlag)
	S1_xaml_loaded = true
	S2_xaml_loaded = true
	S3_xaml_loaded = true
	S4_xaml_loaded = true*/
}
//function to download images
function fDownloadImages(sender){
	downloader_img = sender.createObject("downloader");
	downloader_img.addEventListener("Completed", onImagesLoaded);
	//downloader_img.open("GET", assetArrName[assetCnt])
	//alert(Course.Section[precacheSectionCnt].Pages[preCachePageCnt].PrecacheAssets[assetCnt])
	downloader_img.open("GET", Course.Section[precacheSectionCnt].Pages[preCachePageCnt].PrecacheAssets[assetCnt])	
	downloader_img.send();
}

function onImagesLoaded(sender){
	assetCnt++		
	if(assetCnt < Course.Section[precacheSectionCnt].Pages[preCachePageCnt].PrecacheAssets.length){
		//downloader_img.open("GET", assetArrName[assetCnt])
		downloader_img.open("GET", Course.Section[precacheSectionCnt].Pages[preCachePageCnt].PrecacheAssets[assetCnt])
		downloader_img.send();
	}else{
		Course.Section[precacheSectionCnt].Pages[preCachePageCnt].AssetsPrecached =true			
		preCachePageCnt++			
		if(preCachePageCnt <= 2){			
			assetCnt = 0				
			downloader_img.open("GET", Course.Section[precacheSectionCnt].Pages[preCachePageCnt].PrecacheAssets[assetCnt])
			downloader_img.send();
		}else{

			fDownloadRemainingImages(gControl)				
			var loader =   sender.findName("Loading")
			loader.visibility = "Collapsed"	
			//Course.Section[0].imagesLoaded = true
			sender.findName("Main_mp3").Play();	
			sender.findName("Main_BG_Animation").Begin()
		}
	}
}

function fDownloadRemainingImages(sender){	
	assetCnt = 0
	downloader_img_1 = sender.createObject("downloader");
	downloader_img_1.addEventListener("Completed", fContinueDownloading);
//	downloader_img_1.open("GET", assetArrName[assetCnt])
	downloader_img_1.open("GET", Course.Section[precacheSectionCnt].Pages[preCachePageCnt].PrecacheAssets[assetCnt])
	downloader_img_1.send();
}
function  fContinueDownloading(sender){	
	if(!demandFlag){
		assetCnt++		
		if(assetCnt < Course.Section[precacheSectionCnt].Pages[preCachePageCnt].PrecacheAssets.length){	
			//downloader_img.open("GET", assetArrName[assetCnt])			
			downloader_img_1.open("GET", Course.Section[precacheSectionCnt].Pages[preCachePageCnt].PrecacheAssets[assetCnt])
			downloader_img_1.send();
		}else{
			Course.Section[precacheSectionCnt].Pages[preCachePageCnt].AssetsPrecached =true
			preCachePageCnt++
			assetCnt = 0			
			if(preCachePageCnt >= Course.Section[precacheSectionCnt].Pages.length){				
				precacheSectionCnt++					
				preCachePageCnt = 0	
				assetCnt = 0
				if(precacheSectionCnt < Course.Section.length){						
					fDownloadXaml(gControl)
					//downloader_img_1.open("GET", Course.Section[precacheSectionCnt].Pages[preCachePageCnt].PrecacheAssets[assetCnt])
					//downloader_img_1.send();
				}else{
					//precacheSectionCnt--
				}
			}else if(precacheSectionCnt < Course.Section.length){
				downloader_img_1.open("GET", Course.Section[precacheSectionCnt].Pages[preCachePageCnt].PrecacheAssets[assetCnt])
				downloader_img_1.send();
			}
			
		}
	}else{
		assetCnt++
		
		if(assetCnt < Course.Section[precacheSectionCnt].Pages[preCachePageCnt].PrecacheAssets.length){	
			downloader_img_1.open("GET", Course.Section[precacheSectionCnt].Pages[preCachePageCnt].PrecacheAssets[assetCnt])
			downloader_img_1.send();		
		}else{
			//alert("demandFlag " +demandFlag)
		//	alert(" other = "+sender.name + " xamlDownloadingOn= " + xamlDownloadingOn)

			if(!xamlDownloadingOn){
				demandFlag = false
				var loader =   gControl.content.findName("Loading")
				//loader.visibility = "Collapsed"	
				//alert("calling fnavigate " + sender.name )
				
				//try for audio download
				
				fNavigate(loader)
				fContinueDownloading(sender)
			}
		}
	}
}

function fDownloadOnDemand(sender){	
		//alert("fDownloadOnDemand called = " + eval("S"+(precacheSectionCnt+1)+"_xaml_loaded"))
		//demandFlag = true
		//xamlDownloadingOn = false
		//if(eval("S"+(precacheSectionCnt+1)+"_xaml_loaded")){
			downloader_img_1.open("GET", Course.Section[precacheSectionCnt].Pages[preCachePageCnt].PrecacheAssets[assetCnt])
			downloader_img_1.send();
		//}else{
	//		fDownloadXaml(gControl)
		//}
}

function fPreloadAssets(sender){
	demandFlag = true
	xamlDownloadingOn = false
	var sceneHostCanvas = gControl.content.findName("sceneHostCanvas");
	var loader =   sender.findName("Loading")
	if(sceneHostCanvas.children.count > 0) {
		sceneHostCanvas.children.removeAt(0);
	} 
	precacheSectionCnt =  gCurrSectionNum
	preCachePageCnt = gCurrSectionPageNum
	assetCnt = 0
	loader.visibility = "Visible" 
	if(eval("S"+(precacheSectionCnt+1)+"_xaml_loaded")){
		fDownloadOnDemand(sender)
	}else{
		fDownloadXaml(gControl)
	}
}
//downloadimages for other setions
function fDownloadSectionImages(sender){
	sectiondownloader_img = sender.createObject("downloader");
	sectiondownloader_img.addEventListener("Completed", onSectionImagesLoaded);
	sectiondownloader_img.open("GET", assetArrName[assetCnt])
	sectiondownloader_img.send();	
}

























function onSectionImagesLoaded(sender){
	assetCnt++	
	if(assetCnt <= (assetArrName.length)-1)	{
		sectiondownloader_img.open("GET", assetArrName[assetCnt])
		sectiondownloader_img.send();
	}else{		
		//Course.Section[gCurrSectionNum].imagesLoaded = true
		var loader =   sender.findName("Loading")
		loader.visibility = "Collapsed"			
		fNavigate(sender)
	}	
}
































function fChangefont(sender, eventArgs){
	if (sender.tag == "TextBlock")
	{
		 var myTextBlock = sender;
		 myTextBlock.setFontSource(fontDownloaderObj);	 
		 myTextBlock.fontFamily = "Segoe Condensed"; 	 
	}
}

function fChangefontBold(sender, eventArgs){
	if (sender.tag == "TextBlock")
	{
		 var myTextBlock = sender;
		 myTextBlock.setFontSource(fontDownloaderObj); 
		 myTextBlock.fontFamily = "Segoe Bold"; 	 
	}
}


/*****************************************
Slider Functionality Code Starts here
*****************************************/
// Define state variables for drag and drop operation.
var beginX;
var beginY;
var isMouseDown = false;
var origX = 213

var maxLimit = 459
// Start drag and drop operation.
function fOnMouseDown(sender, mouseEventArgs)
{
    // Set the beginning position of the mouse.
    fPlayPauseScreen(sender, "1")
    beginX = mouseEventArgs.getPosition(null).x;       
    beginY = mouseEventArgs.getPosition(null).y;
    isMouseDown = true;

    // Ensure this object is the only one receiving mouse events.
    sender.captureMouse();
}


// Reposition object during drag and drop operation.
function fDragSlider(sender, mouseEventArgs)
{
    // Determine whether the mouse button is down.
    // If so, move the object.
    if (isMouseDown == true)
    {
        // Retrieve the current position of the mouse.
        var currX = mouseEventArgs.getPosition(null).x;
      
        var fillBlock = sender.findName("S0_S0_ProgressFill")
        fillBlock_xpos = fillBlock["Canvas.Left"]
       
	if(currX >= origX && currX <= maxLimit){
		// Reset the location of the object.
		sender["Canvas.Left"] += currX - beginX;		
		fillBlock.width = sender["Canvas.Left"] - fillBlock_xpos 
        }
	// Update the beginning position of the mouse.
        beginX = currX;        
    }
}

// Stop drag and drop operation.
function fStopDragSlider(sender, mouseEventArgs)
{
    isMouseDown = false;
    // Allow all objects to receive mouse events.
    sender.releaseMouseCapture();
    var sliderbar = sender.findName("Slider_btn");
    fUpdateXAMLPage(sender, sliderbar["Canvas.Left"])
}
//function called when the slider dragging is stopped
//according to the positon of the slider thumb the xaml page is loaded
function fUpdateXAMLPage(sender, dragbarPosition){	
	var maxWidth = 240
	var ScaleFactor = (maxWidth/gTotalPages) 
	pageCnt = Math.round(dragbarPosition/ScaleFactor) - 1			
	if(pageCnt < 0){
		pageCnt = 0;
	}else if(pageCnt>= gTotalPages){		
		pageCnt = gTotalPages - 1		
	}		
	var lCnt = 0 
	var lCnt1 = pageCnt
	for (i=0;i<sectioPagesArr.length;i++){			
		lCnt += (sectioPagesArr[i] )			
		if(pageCnt <= (lCnt -1)){			
			gCurrSectionNum = i			
			if(i==0){
				gCurrSectionPageNum =  pageCnt 					
			}else{
				if(lCnt1 > 0){
					gCurrSectionPageNum = lCnt1 //- 1						
				}else{
					gCurrSectionPageNum = lCnt1						
				}		
			}			
			break;
		}else{
			lCnt1 -= sectioPagesArr[i]
		}
	}
	precacheSectionCnt =  gCurrSectionNum
	preCachePageCnt = gCurrSectionPageNum
	assetCnt = 0
	fUpdateNavigationButtons(sender)
	fPlayPauseScreen(sender, "0")	
	//fNavigate(sender)
	//fDownloadOnDemand(sender)
	fPreloadAssets(sender)
	enableDisableSectionBack(sender)	
	enableDisableSectionNext(sender)
}
function fUpdateSliderBar(sender){
	var maxWidth = 240
	var ScaleFactor = (maxWidth/gTotalPages) * (pageCnt+1)	
	var fillBlock = sender.findName("S0_S0_ProgressFill")
	fillBlock.width = ScaleFactor
	var dragHandle = sender.findName("Slider_btn")
	dragHandle["Canvas.Left"] = ScaleFactor-5	
}

function fUpdateNavigationButtons(sender){
	 var tmpLength = gTotalPages	 
	if(pageCnt<=0){
		enableDisableBack(sender, "0")
		enableDisableNext(sender, "1")
	}else if(pageCnt < tmpLength-1 ){
		enableDisableBack(sender, "1")
		enableDisableNext(sender, "1")
	}else{
		enableDisableBack(sender, "1")
		enableDisableNext(sender, "0")
	}
	enableDisablePlayPauseButtons(sender)
}

function enableDisableBack(sender, lValue){
	var BackDisable =  sender.findName("Back_disable");
	var BackNormal =  sender.findName("Back_normal");
	var BackEnter = sender.findName("Back_enter");

	if(lValue == "1"){
		//enable back button
		BackNormal.visibility = "Visible"
		BackNormal.Opacity = 1;	

		BackDisable.visibility = "Collapsed"
		BackDisable.Opacity = 0;


	}else{
		//disable back button
		BackDisable.visibility = "Visible"
		BackDisable.Opacity = 1;	

		BackNormal.visibility = "Collapsed"
		BackNormal.Opacity = 0;
		
		BackEnter.visibility = "Collapsed"
		BackEnter.Opacity = 0;
	}

}
function enableDisableNext(sender, lValue){

	var NextDisable =  sender.findName("Next_disable");
	var NextNormal =  sender.findName("Next_normal");
	var NextEnter = sender.findName("Next_enter");

	if(lValue == "1"){
		//enable back button
		NextNormal.visibility = "Visible"
		NextNormal.Opacity = 1;	

		NextDisable.visibility = "Collapsed"
		NextDisable.Opacity = 0;


	}else{
		//disable back button
		NextDisable.visibility = "Visible"
		NextDisable.Opacity = 1;	

		NextNormal.visibility = "Collapsed"
		NextNormal.Opacity = 0;
		
		NextEnter.visibility = "Collapsed"
		NextEnter.Opacity = 0;
	}	

}

function enableDisableSectionBack(sender, lValue){

	var SectionBackDisable =  sender.findName("Section_Back_disable");
	var SectionBack =  sender.findName("Section_Back");
	var SectionBackNormal =  sender.findName("Section_Back_normal");
	var SectionBackEnter = sender.findName("Section_Back_enter");
	
	
	
	//if(lValue == "1" || ){
	if(gCurrSectionNum > 0){
		//enable back button
		SectionBack.visibility = "Visible"
		SectionBack.Opacity = 1;
		
		SectionBackNormal.visibility = "Visible"
		SectionBackNormal.Opacity = 1;	

		SectionBackDisable.visibility = "Collapsed"
		SectionBackDisable.Opacity = 0;	


	}else{
		//disable back button
		SectionBackDisable.visibility = "Visible"
		SectionBackDisable.Opacity = 1;	

		SectionBackNormal.visibility = "Collapsed"
		SectionBackNormal.Opacity = 0;

		SectionBackEnter.visibility = "Collapsed"
		SectionBackEnter.Opacity = 0;
	}
	
}

function  enableDisableSectionNext(sender, lValue){
	var SectionNextDisable =  sender.findName("Section_Next_disable");
	var SectionNextNormal =  sender.findName("Section_Next_normal");
	var SectionNextEnter = sender.findName("Section_Next_enter");
	
	//if(lValue == "1"){
	var tmpLength = Course.Section.length
	if(gCurrSectionNum < tmpLength-1){
		//enable back button
		SectionNextNormal.visibility = "Visible"
		SectionNextNormal.Opacity = 1;	

		SectionNextDisable.visibility = "Collapsed"
		SectionNextDisable.Opacity = 0;

	}else{
		//disable back button
		SectionNextDisable.visibility = "Visible"
		SectionNextDisable.Opacity = 1;	

		SectionNextNormal.visibility = "Collapsed"
		SectionNextNormal.Opacity = 0;

		SectionNextEnter.visibility = "Collapsed"
		SectionNextEnter.Opacity = 0;
	}	
}
function fPlayPauseScreen(sender, lValue){
//value 1 means pause the screen
//value 0 means play the screen
	var sceneHostCanvas = gControl.content.findName("sceneHostCanvas");
	if(lValue == "1"){			
		if(sceneHostCanvas.children.findName("SectionAnimation")!= null){
			sceneHostCanvas.children.findName("SectionAnimation").Pause()
		}
		
		if(sceneHostCanvas.children.findName("SectionAnimation_audio")!= null){
			sceneHostCanvas.children.findName("SectionAnimation_audio").Pause()
		}
	}else{
		if(sceneHostCanvas.children.findName("SectionAnimation")!= null){
			sceneHostCanvas.children.findName("SectionAnimation").Resume()
		}
		
		if(sceneHostCanvas.children.findName("SectionAnimation_audio")!= null){
			sceneHostCanvas.children.findName("SectionAnimation_audio").Play()
		}
	}
		
}

function enableDisablePlayPauseButtons(sender){
	if(playPauseFlag == "pause"){
		var lPause =  sender.findName("Pause");
		var lPauseNormal =  sender.findName("Pause_normal");
		
		var lPlay =  sender.findName("Play");
		var lPlayNormal =  sender.findName("Play_normal");
		
		lPause.visibility = "Visible"
		lPause.Opacity = 1;

		lPauseNormal.visibility = "Visible"
		lPauseNormal.Opacity = 1;
		
		lPlay.visibility = "Collapsed"
		lPlay.Opacity = 0;

		lPlayNormal.visibility = "Collapsed"
		lPlayNormal.Opacity = 0;	
	}
}

//function to initiate the buttons for the menu open
function fInitiateMenuButtons(sender){	
	Section_01   = new Button(gControl, "Section_01", "", fShowPageFromMenu);
	Section_02   = new Button(gControl, "Section_02", "", fShowPageFromMenu);
	Section_03   = new Button(gControl, "Section_03", "", fShowPageFromMenu);
	Section_04   = new Button(gControl, "Section_04", "", fShowPageFromMenu);
	fCheckState(sender)
}

//function to update the state of the selected/current section tab
function fCheckState(sender){
	var tmpNum = gCurrSectionNum + 1 
	var lSelected1 = sender.findname("Section_01_down") 
	var lSelected2 = sender.findname("Section_02_down")
	var lSelected3 = sender.findname("Section_03_down")
	
	var lNormal1 = sender.findname("Section_01_normal") 
	var lNormal2 = sender.findname("Section_02_normal")
	var lNormal3 = sender.findname("Section_03_normal")

	
	var lNormal = sender.findname("Section_0"+tmpNum+"_normal")
	var lSelected = sender.findname("Section_0"+tmpNum+"_down")
	
	lSelected1.visibility = "Collapsed"
	lSelected1.Opacity = 0;

	lSelected2.visibility = "Collapsed"
	lSelected2.Opacity = 0;
	
	lSelected3.visibility = "Collapsed"
	lSelected3.Opacity = 0;
	
	lNormal1.visibility = "Visible"
	lNormal1.Opacity = 1;

	lNormal2.visibility = "Visible"
	lNormal2.Opacity = 1;

	lNormal3.visibility = "Visible"
	lNormal3.Opacity = 1;
	
	
	lSelected.visibility = "Visible"
	lSelected.Opacity = 1;
			
	lNormal.visibility = "Collapsed"
	lNormal.Opacity = 0;
	
}

//function to launch the url from the lase page
function fLaunchHtmlPage(sender, e){

	//fLaunchHtmlPage
	var lURL = sender.Text
	if(lURL.indexOf("http:") != -1){
		
	}else{
		lURL = "http://"+lURL
	}
	window.open(lURL)
}

//function called on each event of media changed... added for media precaching
function media_state_changed(sender, args)
{
	if(!gPageAudioLoaded){

	   var media = sender.findName("SectionAnimation_audio");
	 //  alert("currentstate = "+ media.CurrentState);
	   var sceneHostCanvas = gControl.content.findName("sceneHostCanvas");
		if(sceneHostCanvas.children.findName("SectionAnimation")!= null){
			sceneHostCanvas.children.findName("SectionAnimation").Pause()
		}
		if(sceneHostCanvas.children.findName("SectionAnimation_audio")!= null){
			//sceneHostCanvas.children.findName("SectionAnimation_audio").Pause()
		}
		if(media.CurrentState == "Playing"){
			//alert("INSDIE IF")
			if(sceneHostCanvas.children.findName("SectionAnimation")!= null){
				sceneHostCanvas.children.findName("SectionAnimation").Begin()
			}
			if(sceneHostCanvas.children.findName("SectionAnimation_audio")!= null){
				sceneHostCanvas.children.findName("SectionAnimation_audio").Stop();
				sceneHostCanvas.children.findName("SectionAnimation_audio").Play()
			}
				gPageAudioLoaded = true
				sceneHostCanvas.visibility = "Visible"
				sceneHostCanvas.Opacity = 1;
				var loader =   sender.findName("Loading")		
				loader.visibility = "Collapsed"
				fUpdateSliderBar(sender)
				fUpdateNavigationButtons(sender)
		}
	}
   
}


