////////////////**********************************************/////////////
/* Workflow control module
1.workflow sequence
	loading -> caching -> playing
*/
////////////////**********************************************/////////////

var gLoading = false;
function AcuShowErrLoadingMsg(sMsg)
{
	AcuLog("AcuShowErrLoadingMsg:" + sMsg);
	_GetObjById("errPanel").innerHTML = sMsg;
}

function AcuSetLoading(bLoading)
{
	return gLoading = bLoading;
}

function AcuIsLoading()
{
	return gLoading;
}

function AcuSwitchToLoading()
{
	_GetObjById("panelPlay").style.display 	= "";
	_GetObjById("panelPlay").style.display 	= "none";
	AcuLoadLangMsg("studiolang.xml","AcuOnLoadMsgFinish");
	AcuSetDefaultWindowSize();
}

function AcuSetDefaultWindowSize()
{
	var nWidth = _GetWinWidth();
	var nHeight = _GetWinHeight();
	if(nWidth<=800 || nHeight<600){
		nWidth = nWidth<800?800-nWidth:0;
		nHeight = nHeight<600?600-nHeight:0;
		window.resizeBy(nWidth,nHeight);
	}
}

function AcuOnLoadMsgFinish(bResult)
{
	if(bResult){
		AcuSetDefaultLang();
		AcuSetLangChangedCallback("AcuOnLangChanged");
		AcuCreatOptionList();
		AcuLangChangeUI(document);
		AcuLangChangeUI(window.frames["panelSlidesInfo"].document);
		AcuLoadData(AcuGetBasePath() + "playback.xml");
	} else {
		AcuShowErrLoadingMsg("load studiolang.xml failed");
	}
}

function AcuOnLoadMsgFinishFF(bResult)
{
	if(bResult){
		AcuSetDefaultLangFF();
		AcuSetLangChangedCallback("AcuOnLangChanged");
		AcuCreatOptionListFF();
		AcuLangChangeUI(document);
		AcuLangChangeUI(window.frames["panelSlidesInfo"].document);
		if(AcuIsLocalPlayback()){
			AcuLoadDataFF("playback.xml");
		} else {
			AcuLoadDataFF(AcuGetBasePath() + "playback.xml");
		}
		
	} else {
		AcuShowErrLoadingMsg("load studiolang.xml failed");
	}
}

function AcuOnDataLoad(bLoad)
{
	AcuSetLoading(false);
	if(bLoad){
		if(AcuIsLocalPlayback()){
			AcuSwitchToPlay();
		} else {
			AcuSwitchToCaching();
		}
	} else {
		AcuShowErrLoadingMsg("Failed to load playback.xml. Please try again.");
	}
}

function AcuSwitchToCaching()
{
	//frmprogressBar.window.document.getElementById("progressBar")
	//var nWidth = frmprogressBar.window.document.getElementById("progressBar").offsetWidth;
	var nWidth = _GetObjById("progressBar").offsetWidth;
	var nWinWidth = _GetWinWidth();
	var nLeft = nWinWidth-nWidth;
	//nLeft = nLeft>0?nLeft:0;
	//progressBar.style.left = nLeft;
	
	_GetObjById("spanLoading").style.display 	= "";
	_GetObjById("panelPlay").style.display 	= "";
	//setTimeout("AcuSwitchToPlay();",500);
	AcuStartCache();
}

function AcuSwitchToPlay()
{
	_GetObjById("spanLoading").style.display 	= "none";
	_GetObjById("panelPlay").style.display 	= "none";
	
	// 1. init layout
	AcuInstallLayout();
	
	// 2. init drag
	AcuInstallDrag();
	
	// 3. init slides ui
	AcuShowSLV();
	
	// 4. init command proccessor
	AcuInstallCmdProccessor();
	
	// 5. show ui
	AcuShowUI(true);
	
	// 6. display Toc
	AcuDisplayToc();
	
	// 7. open first slide page and toc	
	AcuOpenEmptySlide();
	AcuOpenFirstSlidePageToc();	
	//_TestUI01();
	
	// 8. play 
	AcuStartPlay();
	
	// 9. install bottom button
	AcuInstallBottomButtons();	
}

function AcuOpenEmptySlide()
{	
	var cs = new CCurrentSlide();
	cs.mSlideId	= "-1";
	cs.mSlidePath	= "";
	cs.mSrcWidth 	= 176;
	cs.mSrcHeight 	= 144;
	cs.mVideoWidth 	= cs.mSrcWidth;
	cs.mVideoHeight	= cs.mSrcHeight;
	cs.mHasVideo	= true;	
	cs.mHasAudio	= true;
	
	AcuSetCurrentSlide(cs);	
	AcuFitCurrentSlide();	
}

function AcuSetServerInfo(sAMIP, sPlayListFile, sManagementStopUrl, bHasForum, sForumUrl, sLogonUserId, sLogonUserGroup, sAuthorGroup, sAuthorAccount)
{
	_gSysInfo.mLocalPlayback	= false;
	_gSysInfo.mAMIP				= sAMIP;
	_gSysInfo.mManagementStopUrl= sManagementStopUrl;
	//_gSysInfo.mHasForum			= bHasForum;
	_gSysInfo.mHasForum			= false;
	_gSysInfo.mPlayListFile		= sPlayListFile;
	_gSysInfo.mForumUrl			= sForumUrl;
	_gSysInfo.mLogonUserId		= sLogonUserId;
	_gSysInfo.mLogonUserGroup	= sLogonUserGroup;
	_gSysInfo.mCompany			= sAuthorGroup;
	_gSysInfo.mAuthorAccount	= sAuthorAccount;
	// if has forum then display the link
	if(_gSysInfo.mHasForum){
		_GetObjById("forumLink").href = sForumUrl;
		_GetObjById("forumLink").style.display = "inline";
	}
}


function AcuSetPodcastInfo(bMP3, sMP3File, bMP4, sMP4File)
{	
	_gCourseInfo.mSupportMP3			= bMP3;
	_gCourseInfo.mMP3File				= sMP3File;
	_gCourseInfo.mSupportMP4			= bMP4;
	_gCourseInfo.mMP4File				= sMP4File;	
}

function AcuSetContentInfo(sCat, sAuthor, sModuleId)
{
	_gSysInfo.mCat		= sCat;
	_gSysInfo.mModuleId	= sModuleId;
	_gSysInfo.mAuthor	= sAuthor;
}

function AcuSendManagementStop()
{
	if(!AcuIsLocalPlayback()){
		var objFrmMgr = _GetObjById("frmMgr");
		if(AcuIsObject(objFrmMgr)){
			objFrmMgr.src = _gSysInfo.mManagementStopUrl;
		}
	}
}

function AcuShowSLV()
{
	if(AcuSupportSLV()){
		objSLV.style.display = "block";
		objFrmSlides.style.display = "none";
	} else {
		objSLV.style.display = "none";
		objFrmSlides.style.display = "";
		//AcuLog("objFrmSlides.document.location:" + objFrmSlides.src);
		//objFrmSlides.src = "http://www.aculearn2.com";
	}
}

////////////////**********************************************/////////////
/* Util module
1.screen position api
2.log api
*/
////////////////**********************************************/////////////

//////////////////////Interface Start/////////////////
// public function defination
var doc				= document;
var objSLV;
var objFrmSlides;
var objWMP;
var objImage;

function AcuInitDebug(bDebug){
	_gbDebug = bDebug;
	if(_gbDebug){
		_GetObjById("txtOutput").style.display="";
	}
}

function AcuLog(sMsg)
{
	_Log(sMsg);
}

function AcuGetBasePath()
{
	return _gSysInfo.mBasePath;
}

function AcuSetBasePath(sBasePath)
{
	return _gSysInfo.mBasePath = sBasePath;
}

function AcuCheckSystem()
{	
	doc			= document;
	objSLV		= _GetObjById("slv");
	objWMP		= _GetObjById("wmp");
	objFrmSlides= _GetObjById("frmSlides");
	objImage	= _GetObjById("imgMedia");
	objImgTb	= _GetObjById("imgTable");
	//alert(objImage.width + " " + objImage.height);
	_gSysInfo.checkSystem();
}

function AcuSupportSLV()
{
	return _gSysInfo.mSupportSlideViewerOcx;	
}

function AcuGetPlayListFile()
{
	return _gSysInfo.mPlayListFile;	
}

function AcuIsLocalPlayback()
{
	return _gSysInfo.mLocalPlayback;	
}


function AcuHasForum()
{
	return _gSysInfo.mHasForum;	
}

function AcuGetForumUrl()
{
	return _gSysInfo.mForumUrl;	
}

function AcuIsObject(obj)
{
	return !(obj==null || typeof(obj) == "undefined");
}

///////////////////////////////////////////////////////
// global var defination
var _gbDebug = false;
var _gSysInfo= new CSysInfo();
var _gCourseInfo= new CCourseInfo();
var _gServerInfo= new CServerInfo();


// private function defination
function _GetWinWidth()
{	
	if ( IsIE() ) {		
		return doc.body.offsetWidth;
	} else {	
		return doc.body.clientWidth;
	}
}
function _GetWinHeight()
{	
	if ( IsIE() ) {
		return doc.body.offsetHeight;
	} else {
		return doc.body.clientHeight;
	}
}

function _ABS(n)
{
	return n>0?n:-1*n;
}

function _MIN(n1,n2)
{
	return n1>n2?n2:n1;
}
function _MAX(n1,n2)
{
	return n1<n2?n2:n1;
}


function _Round(n1)
{
	var nRet = n1;
	var nTemp = Math.round(n1);
	if(nTemp>n1){
		nRet = Math.round(n1-1);
	} else {
		nRet = Math.round(n1);
	}
	nRet = nRet>=0?nRet:0;
	return nRet;
}

function _ParseInt(s)
{
	if(s!=null && s.length>0){
		return parseInt(s);
	}
	return -1;
}

function _ParseBoolean(s)
{	
	if(s==null || s=="0" || s.length<=0 ){
		return false;
	}
	return true;
}

function _IsEqual(s1,s2)
{
	if(s1!=null && s2!=null){
		s1 += "";
		s2 += "";
		return s1.toLowerCase() == s2.toLowerCase();
	}
	return false;
}

function _IsEmpty(s1)
{
	
	return s1 == null || s1.length<=0;;
}

function _GetObjById(sId)
{
	return doc.getElementById(sId);
}

function _PosToTime(nPos)
{
	return nPos * 1000;	
}

function _FormatTime(nHour, nMinute, nSecond)
{
	var sHour 	= nHour;
	nMinute		= _Round(nMinute);
	nSecond		= _Round(nSecond);
	var sMinute = nMinute<10? "0" + nMinute: ""+nMinute;
	var sSecond = nSecond<10? "0" + nSecond: ""+nSecond;
	return sHour + ":" + sMinute.substring(0,2) + ":" + sSecond.substring(0,2);
}

function _Log(sMsg)
{
	if(_gbDebug){
		if(txtOutput){
			var sOut = sMsg + "\n" + _GetObjById("txtOutput").value;
			_GetObjById("txtOutput").value = sOut.substring(0,8000);
		}
	}
}

function _FilterHtmlData(s1)
{
	if(_IsEmpty(s1)){
		return "";
	} else {
		var sRet = s1
		sRet = s1.replace(/</g,"&lt;");
		sRet = sRet.replace(/>/g,"&gt;");
		sRet = sRet.replace("\n","<br>");
		return sRet;
	}	
}

function AcuSetInitilSlide(sid)
{
	_gSysInfo.mInitSlideID = sid;
}

// object defination
/////////////// CSysInfo //////////////////////////////////////
function CSysInfo()
{
	// general members
	this.mLocalPlayback = true;
	this.mHasForum = false;
	// support functions 
	this.mSupportSlideViewerOcx = true;
	this.mSupportPPTSlides = true;
	this.mIE = true;
	this.mIEVer = "";
	this.mBasePath = "";
	this.mForumUrl = "";
	this.mPlayListFile = "play.asx";
	this.mLogonUserId = "";
	this.mLogonUserGroup = "";
	this.mAMIP = "";	
	this.mManagementStopUrl = "";
	this.mCat = "";
	this.mModuleId = "";
	this.mAuthor = "";
	this.mAuthorAccount = "";
	this.mCompany = "";
	this.mInitSlideID = "1";
}

CSysInfo.prototype.checkSystem = function ()
{
	this.mBasePath = this.getBasePath();
	this.mSupportSlideViewerOcx = (AcuIsObject(objSLV) && typeof(objSLV.runPreview) != "undefined");
	this.mIE = true;
	this.mSupportPPTSlides = this.mIE;	
}

CSysInfo.prototype.getBasePath = function ()
{   
    var part_num = 0;
	var Mpath = ""; 
	Mpath = location.href;	
	if (Mpath.split("%20")){
	var arrSetSpace = location.href.split("%20");
		while (part_num < arrSetSpace.length)
		{
			Mpath = Mpath.replace("%20"," ");
			part_num+=1;
		}
	}
	
	var pathType = Mpath.split(":");
	if (pathType[0] == "file"){
		var path = Mpath.split("///");
		if(path.length==2){
			var pathTr = path[1].split("/");
			var MainPath = "";
			var part_num=0;
			while (part_num < pathTr.length-1)
			{           
				MainPath = MainPath + pathTr[part_num] + "\\";
				part_num+=1;
			}
		} else {
			path = Mpath.split("//");
			var pathTr = path[1].split("/");
			var MainPath = "file://";
			var part_num=0;
			while (part_num < pathTr.length-1)
			{           
				MainPath = MainPath + pathTr[part_num] + "/";
				part_num+=1;
			}
		}
	}else if (pathType[0] == "http" || pathType[0] == "https"){
		var pathTr = Mpath.split("/");
		var MainPath = "";
		var part_num=0;
		while (part_num < pathTr.length-1)
		{	
			MainPath = MainPath + pathTr[part_num] + "/";;
			part_num+=1;
	  	}
	}
    return(MainPath);
}
CSysInfo.prototype.getBasePathFF = function ()
{   
    var part_num = 0;
	var Mpath = ""; 
	Mpath = location.href;	
	if (Mpath.split("%20")){
	var arrSetSpace = location.href.split("%20");
		while (part_num < arrSetSpace.length)
		{
			Mpath = Mpath.replace("%20"," ");
			part_num+=1;
		}
	}
	
	var pathType = Mpath.split(":");
	if (pathType[0] == "file"){
		var path = Mpath.split("///");
		if(path.length==2){
			var pathTr = path[1].split("/");
			var MainPath = "";
			var part_num=0;
			while (part_num < pathTr.length-1)
			{           
				MainPath = MainPath + pathTr[part_num] + "\\";
				part_num+=1;
			}
		} else {
			path = Mpath.split("//");
			var pathTr = path[1].split("/");
			var MainPath = "file://";
			var part_num=0;
			while (part_num < pathTr.length-1)
			{           
				MainPath = MainPath + pathTr[part_num] + "/";
				part_num+=1;
			}
		}
	}else if (pathType[0] == "http" || pathType[0] == "https"){
		var tempPath = Mpath.split("?");
		var pathPure = tempPath[0];
		var pathTr = pathPure.split("/");
		var MainPath = "";
		var part_num=0;
		while (part_num < pathTr.length-1)
		{	
			MainPath = MainPath + pathTr[part_num] + "/";;
			part_num+=1;
	  	}
	}

	AcuLog("getBasePath:" + MainPath);
    return(MainPath);
}

/////////////// CSourceInfo //////////////////////////////////////
function CSourceInfo()
{
	this.mId = "";
	this.mPath = "";
	this.mType = "";
	this.mFileName = "";
}

/////////////// CCourseInfo //////////////////////////////////////
function CCourseInfo()
{
	this.mId = "";
	this.mTitle = "";
	this.mDesc = "";
	this.mAuthorName = "";
	this.mAuthorEmail = "";
	this.mCreatedDate = "";
	this.mCreatedTime = "";
	this.mExpiryDate = "";
	this.mSourceArray = new Array();
	this.addSource	= function (sId, sPath, sType, sFileName){
		var item = new CSourceInfo();
		item.mId = sId;
		item.mPath = sPath;
		item.mType = sType;
		item.mFileName = sFileName;
		this.mSourceArray[this.mSourceArray.length] = item;
	}
	
	this.mLeftImage = "";
	this.mRightImage = "";
	
	this.mHasSLVInfo = false;
	this.mSLVInfo = new CSLVInfo();
	
	//Podcast
	this.mSupportMP3 = false;
	this.mMP3File	= "";
	this.mSupportMP4 = false;
	this.mMP4File	= "";
}

function CSLVInfo()
{
	this.mType = "";
	this.mBgcolor = 0;
	this.mWidth = 0;
	this.mHeight = 0;	
}

/////////////// CServerInfo //////////////////////////////////////
function CServerInfo()
{	
	this.mIISHost;
	this.mWMSHost;
	this.mWMVPath;
	this.mModuleName;
	this.mAuthorId;
	this.mUserId;
}

/////////////// CRect //////////////////////////////////////
function CRect(x1,y1,x2,y2)
{
	this.x1 = x1;
	this.y1 = y1;
	this.x2 = x2;
	this.y2 = y2;
	this.getWidth 		= function(){
		return _ABS(this.x2-this.x1);
	}
	this.getHeight 		= function(){
		return _ABS(this.y2-this.y1);
	}
	this.isValidRect 	= function() {
		return ((this.x2-this.x1)>=0) && ((this.y2-this.y1)>=0);
	}
	this.toString 		= function() {
		return "CRect(x1=" + this.x1 + ", y1=" + this.y1 + ", x2=" + this.x2 + ", y2=" + this.y2 + ")";
	}
	this.isEmpty 	= function() {
		return this.x2==0 && this.x1==0 && this.y2==0 && this.y1==0;
	}
}



/////////////// CCurrentSlide //////////////////////////////////////

function CAction(nId, sType, nTime, sValue)
{
	this.mId = nId;
	this.mType = sType;
	this.mTime = nTime;
	this.mValue = sValue;
}

function CSpearkerNote(sLangId, sValue)
{
	this.mId = sLangId;
	this.mValue = sValue;	
}

function CCurrentSlide()
{	
	this.mSlideId		= "";
	this.mType			= "ppt";
	this.mSlidePath		= "";
	this.mPreviewHtml	= "";
	this.mPreviewImage	= "";
	this.mFolder		= "";
	this.mMediaFileId	= "";
	this.mMediaFile		= "";
	this.mStartTime		= 0;
	this.mEndTime		= 0;
			
	this.mVideoWidth 	= 176;
	this.mVideoHeight 	= 144;
	this.mHasChat		= false;
	this.mHasVideo		= true;
	this.mHasAudio		= true;	
	this.mVideoSize		= "QCIF (176 x 144)";
	
	this.mHasImage		= false;
	this.mImageFile		= "";
	this.mImageWidth	= 320;
	this.mImageHeight	= 240;
	
	this.setImage		= function(sImageFile, nWidth, nHeight){
		this.mImageWidth 	= nWidth;
		this.mImageHeight 	= nHeight;
		this.mImageFile 	= sImageFile;
		this.mHasImage		= true;
		
		nWidth = nWidth<176?176:nWidth;
		nWidth = nWidth>352?352:nWidth;
		nHeight = nHeight<144?144:nHeight;
		nHeight = nHeight>288?288:nHeight;
		this.mVideoWidth 	= nWidth;
		this.mVideoHeight 	= nHeight;
	}
	this.isScreenDirector = function(){
		return this.mVideoWidth>=800;
	}
	this.isScale = function(){
		return this.mType.toLowerCase() == "ppt";
	}
	
	this.toString		= function(){
		return "mSlideId:" + this.mSlideId
			+ ";mSlidePath:" + this.mSlidePath
			//+ ";mPreviewHtml:" + this.mPreviewHtml
			//+ ";mPreviewImage:" + this.mPreviewImage
			+ ";mMediaFileId:" + this.mMediaFileId
			+ ";mStartTime:" + this.mStartTime
			+ ";mEndTime:" + this.mEndTime
			+ ";mSrcWidth:" + this.mVideoWidth
			+ ";mSrcHeight:" + this.mVideoHeight
			+ ";mHasVideo:" + this.mHasVideo
			+ ";mImageFile:" + this.mImageFile
			+ ";mImageWidth:" + this.mImageWidth
			+ ";mImageHeight:" + this.mImageHeight;
	}
	
	this.mActions = new Array();
	
	this.addAction 		= function(nId, sType, nTime, sValue){
		var act = new CAction(nId, sType, nTime, sValue);
		var nLen = this.mActions.length;
		this.mActions[nLen] = act;
	}
	
	this.getActionCount	= function(){
		return this.mActions.length;
	}	
		
	this.getAction	= function(sType, nId){
		var ret = null;
		var nLen = this.mActions.length;
		for(var i=0;i<nLen;i++){
			if(_IsEqual(this.mActions[i].mType,sType) && _IsEqual(this.mActions[i].mId,nId)){
				ret = this.mActions[i];
				break;
			}
		}
		return ret;
	}	
	
	this.mNotes = new Array();
	
	this.addSpeakerNote 		= function(sId, sValue){
		var act = new CSpearkerNote(sId, sValue);
		var nLen = this.mNotes.length;
		this.mNotes[nLen] = act;
	}	
	
	this.getSpeakerNoteCount	= function(){
		return this.mNotes.length;
	}
		
	this.getSpeakerNote	= function(sId){
		var ret = "";
		var bFound = false;
		var nLen = this.mNotes.length;
		for(var i=0;i<nLen;i++){
			if(_IsEqual(this.mNotes[i].mId,sId)){
				ret = this.mNotes[i].mValue;
				bFound = true;
				break;
			}
		}
		
		if(!bFound){
			var sLang = AcuGetSelectedLang();
			for(var i=0;i<nLen;i++){
				if(_IsEqual(this.mNotes[i].mId,sLang)){
					ret = this.mNotes[i].mValue;
					bFound = true;
					break;
				}
			}
		}
		
		if(!bFound){
			var sLang = AcuGetDefaultLang();
			for(var i=0;i<nLen;i++){
				if(_IsEqual(this.mNotes[i].mId,sLang)){
					ret = this.mNotes[i].mValue;
					bFound = true;
					break;
				}
			}
		}
		
		if(!bFound && nLen>0){			
			ret = this.mNotes[0].mValue;
		}
		
		return ret;
	}	
	
	this.hasChat	= function(){
		return this.mHasChat;
	}
	
	this.hasSpeakerNote	= function(){
		var sNote = this.getSpeakerNote("");
		if(sNote.length>0){
			return true;
		}
		return false;
	}
		
	this.checkChat	= function(){
		var bRet = false;
		var nLen = this.getActionCount();
		for(var i=0;i<nLen;i++){
			if(_IsEqual(this.mActions[i].mType, "Chat")){
				bRet = true;
				break;
			}
		}
		this.mHasChat = bRet;
		return bRet;
	}
	
	this.getChat	= function(){
		var sRet = "";
		var nLen = this.getActionCount();
		for(var i=0;i<nLen;i++){
			if(_IsEqual(this.mActions[i].mType, "Chat")){
				sRet += this.mActions[i].mValue;
				sRet += "<br>";
			}
		}
		return sRet;
	}	
	
	
	this.getActionsByTime	= function(nTime){
		var list = new Array();
		
		var nLen = this.getActionCount();
		var actScroll = null;
		var actCursor = null;
		var actBg = null;
		for(var i=0;i<nLen;i++){
			var item = this.mActions[i];
			
			if(item.mTime>nTime)
				break;
			
			if(_IsEqual(item.mType, CMD_CLEARANNOTATION)){
				list = null;
				list = new Array();
				list[list.length] = item;
				continue;
			} else if (_IsEqual(item.mType, CMD_WHITEBOARD)){
				list = null;
				list = new Array();
				//list[list.length] = item;
				actBg = item;
				continue;
			} else  if(_IsEqual(item.mType, CMD_SLIDESCROLL)){
				actScroll = item;
				continue;
			} else  if(_IsEqual(item.mType, CMD_CURSOR)){
				actCursor = item;
				continue;
			} else  if(_IsEqual(item.mType, CMD_HYPERLINK)){
				var parser = new CCmdParser(item.mType ,item.mValue);
				if(parser.mIsPopupLink){
					continue;
				} else {						
					list = null;
					list = new Array();
					//list[list.length] = item;
					actBg = item;
					continue;
				}					
			} else  if(_IsEqual(item.mType, CMD_PAUSE)){ // do not show insert pause				
				continue;
			} else {
				list[list.length] = item;
			}
		}
		
		if(AcuIsObject(actScroll))
			list[list.length] = actScroll;
		if(AcuIsObject(actCursor))
			list[list.length] = actCursor;
		
		//AcuLog("CCurrentSlide->getActionsByTime: nTime=" + nTime + "list.length=" + list.length);	
		if(AcuIsObject(actBg)){
			var list1 = new Array();
			list1[list1.length] = actBg;
			for(var i=0;i<list.length;i++){
				list1[i+1] = list[i];
			}
			return list1;
		} else {
			return list;
		}		
	}
}

/////////////// CWnd //////////////////////////////////////
function CWnd(sPanelId)
{
	this.mId	= sPanelId;
	this.mObj	= _GetObjById(sPanelId);
	this.mVisible	= false;
	this.mMinimize	= false;
}

CWnd.prototype.getWidth = function(n)
{
	if(this.mObj){
		return this.mObj.offsetWidth;
	}
	return 0;
}

CWnd.prototype.getHeight = function(n)
{
	if(this.mObj){
		return this.mObj.offsetWidth;
	}
	return 0;
}


CWnd.prototype.setWidth = function(n)
{
	if(this.mObj){
		this.mObj.style.width = n;
	}
}

CWnd.prototype.setHeight = function(n)
{
	if(this.mObj){
		this.mObj.style.height = n;
	}
}

CWnd.prototype.show = function(b1)
{
	var s1 = b1?"visible":"hidden";
	if(this.mId=="panelSlides" && AcuSupportSLV() && !b1){
	} else {
		if(this.mObj){
			this.mObj.style.visibility = s1;
		}
	}
}

CWnd.prototype.setScroll = function(b1)
{
	var s1 = b1?"auto":"hidden";
	if(this.mObj){
		this.mObj.style.overflow = s1;
	}
}

CWnd.prototype.moveTo = function(x,y)
{
	if(this.mObj){	
		this.mObj.style.left 	= x;
		this.mObj.style.top 	= y;
	}
}

CWnd.prototype.setPos = function(rc)
{
	if(this.mObj){		
		//AcuLog("CWnd(" + this.mId +  ").setPos: " + rc.toString());
		// III becase iframe frmslides does not auto fit, so reset it's size when panelSlides change size
		if(this.mId=="panelSlides"){
			if(AcuSupportSLV()){
				if(rc.isEmpty()){					
					objSLV.width = 10;
					objSLV.height = 10;
					this.mObj.style.left 	= _GetWinWidth();
					this.mObj.style.top 	= 0;
					this.mObj.style.width 	= 10;
					this.mObj.style.height 	= 10;
				} else {
					this.mObj.style.left 	= rc.x1;
					this.mObj.style.top 	= rc.y1;
					this.mObj.style.width 	= rc.getWidth();
					this.mObj.style.height 	= rc.getHeight();
					
					var nWidth = rc.getWidth();
					var nHeight = rc.getHeight();
					if (_gCourseInfo.mHasSLVInfo) {
						//alert("_gCourseInfo.mHasSLVInf");
						objSLV.width = "100%";
						objSLV.height = "100%";
					}
					else {
						if(nHeight>0){
							if(nWidth/nHeight>4/3){
								nWidth = nHeight*4/3;
							} else {
								nHeight = nWidth*3/4;
							}
							objSLV.width = nWidth;
							objSLV.height = nHeight;
						} else {
							objSLV.width = "100%";
							objSLV.height = "100%";
						}			
					}		
				}
			} else {
				
				if(AcuIsObject(objFrmSlides)){
					
					this.mObj.style.left 	= rc.x1;
					this.mObj.style.top 	= rc.y1;
					this.mObj.style.width 	= rc.getWidth();
					this.mObj.style.height 	= rc.getHeight();
					
					objFrmSlides.width = "100%";
					objFrmSlides.height = "100%";
				}
			}
			
		} else if(this.mId=="panelTop"){
			this.mObj.style.left 	= rc.x1;
			this.mObj.style.top 	= rc.y1;
			this.mObj.style.width 	= rc.getWidth();
			this.mObj.style.height 	= rc.getHeight();
			var objFrmTop = _GetObjById("frmTop");
			if(AcuIsObject(objFrmTop)){
				objFrmTop.width  = "100%";
				objFrmTop.height = rc.getHeight();
			}
		} else if(this.mId=="panelVideo"){
			var nWidth = rc.getWidth();
			var nHeight = rc.getHeight();
			
			this.mObj.style.left 	= rc.x1;
			this.mObj.style.top 	= rc.y1;
			this.mObj.style.width 	= nWidth;
			this.mObj.style.height 	= nHeight;
			if(AcuUsingImage()){
				var cs = AcuGetCurrentSlide();
				var nImgTbWidth = nWidth;
				var nImgTbHeight= nHeight - AcuGetBarHeight();
				nImgTbHeight = nImgTbHeight > 0 ? nImgTbHeight : 0;
				var nImgWidth = cs.mImageWidth;
				var nImgHeight = cs.mImageHeight;
				var nLeft = rc.x1;
				var nTop = rc.y1;
				objImgTb.top = nTop;
				objImgTb.left = nLeft;
				
				var fRatio = 4/3;
				if (cs.mImageWidth > 0 && cs.mImageHeight > 0) {
					fRatio = cs.mImageWidth/cs.mImageHeight;
				}
				
				if( (nImgTbWidth>0 && nImgTbHeight>0 ) )
				{
					if ( nImgTbWidth/nImgTbHeight >= fRatio)
					{ 
						nImgHeight = nImgTbHeight;
						nImgWidth  = nImgTbHeight * fRatio;
					} else { 
						nImgWidth = nImgTbWidth;
						nImgHeight  = nImgTbWidth / fRatio;
					}
					
					objImgTb.width = nImgTbWidth;
					objImgTb.height = nImgTbHeight;
					objImage.width 	= nImgWidth;
					objImage.height = nImgHeight;
				} else {
					objImage.width = nImgTbWidth;
					objImage.height = nImgTbHeight;
				}
				objWMP.height = AcuGetBarHeight();
			}
			else {
				objImgTb.style.width = 0;
				objImgTb.style.height = 0;
				objImage.width 	= 0;
				objImage.height = 0;
			}			
			
		} else {		
			this.mObj.style.left 	= rc.x1;
			this.mObj.style.top 	= rc.y1;
			this.mObj.style.width 	= rc.getWidth();
			this.mObj.style.height 	= rc.getHeight();
		}
		
	}
}


CWnd.prototype.setBgImage = function (sFile)
{
	if(this.mObj){
		this.mObj.style.backgroundImage = "url(" + sFile + ")";
	}
}

/////////////// CTabButton //////////////////////////////////////

function CTabButton(sId)
{
	this.mId		= sId;
	this.mObj		= _GetObjById(sId);
	this.mVisible	= false;
	this.mChecked	= false;
	
	this.setCheck	= function(bCheck){
		this.mChecked = bCheck;
	}	
}

/////////////// CTabWin //////////////////////////////////////
function CTabWnd(sPanelId)
{
	this.mId		= sPanelId;
	this.mObj		= _GetObjById(sPanelId);
	this.mVisible	= false;
	this.mMinimize	= false;
	
	this.mWidth		= 0;
	this.mHeight	= 0;	
	this.mToolBarHeight = 28;
	
	this.mSelectIndex = 0;
	this.mTabPanel	= new Array();
	this.mTabBtn 	= new Array();
	
	this.addTab 	= function(sBtnId, sPanelId){
		this.mTabPanel[this.mTabPanel.length] 	= new CWnd(sPanelId);
		this.mTabBtn[this.mTabBtn.length] 		= new CTabButton(sBtnId);
	}
	
	this.getTabCount= function(){		
		return this.mTabPanel.length;
	}
	
	this.getTab 	= function(nIndex){
		var ret = null;
		if(nIndex>=0&&nIndex<this.getTabCount()){
			ret = this.mTabPanel[nIndex];
		}
		return ret;
	}
	
	this.getBarHeight= function(){		
		return this.mToolBarHeight;
	}
}

CTabWnd.prototype.getWidth = function(n)
{
	if(this.mObj){
		return this.mObj.offsetWidth;
	}
	return 0;
}

CTabWnd.prototype.getHeight = function(n)
{
	if(this.mObj){
		return this.mHeight;
	}
	return 0;
}


CTabWnd.prototype.setWidth = function(n)
{
	if(this.mObj){
		this.mObj.style.width = n;		
		
		for(var i=0; i<this.getTabCount(); i++){
			this.getTab(i).setWidth(n);
		}
	}
}

CTabWnd.prototype.setHeight = function(n)
{
	if(this.mObj){
		this.mHeight = n;
		var nHeight = n>this.mToolBarHeight?n-this.mToolBarHeight:0;
		this.mObj.style.height = this.mToolBarHeight;	
		
		for(var i=0; i<this.getTabCount(); i++){
			this.getTab(i).setHeight(nHeight);
		}
	}
}

CTabWnd.prototype.show = function(b1)
{
	var s1 = b1?"visible":"hidden";
	
	if(this.mObj){
		this.mObj.style.visibility = s1;
	}
	// hide all tab
	if(b1){
		this.showTab(this.mSelectIndex);
	} else {
		this.showTab(-1);		
	}
}

CTabWnd.prototype.setScroll = function(b1)
{	
	for(var i=0;i<this.getTabCount();i++){
		this.getTab(i).setScroll(b1);
	}
}

CTabWnd.prototype.moveTo = function(x,y)
{
	if(this.mObj){	
		this.mObj.style.left 	= x;
		this.mObj.style.top 	= y;
		
		var nPanelTop = y + this.mToolBarHeight;
		for(var i=0;i<this.getTabCount();i++){
			this.getTab(i).moveTo(x,nPanelTop);
		}
	}
}

CTabWnd.prototype.setPos = function(rc)
{
	AcuLog("CTabWnd(" + this.mId +").setPos:" + rc);
	//alert("CTabWnd(" + this.mId +").setPos:" + rc);
	if(this.mObj){		
		if(rc.isEmpty()){			
			this.mObj.style.left 	= 0;//_GetWinWidth();
			this.mObj.style.top 	= 0;
			this.mObj.style.width 	= 0;
			this.mObj.style.height 	= 0;
			
			for(var i=0;i<this.getTabCount();i++){
				this.getTab(i).setPos(rc);
			}
		} else {					
			this.mObj.style.left 	= rc.x1;
			this.mObj.style.top 	= rc.y1;
			this.mObj.style.width 	= rc.getWidth();
			this.mObj.style.height 	= this.mToolBarHeight;
			rc.y1 = rc.y1 + this.mToolBarHeight;
			
			var rcNew = rc;
			if(rc.getHeight()<=0){
				rcNew = new CRect(0,0,0,0);
			}
			for(var i=0;i<this.getTabCount();i++){
				this.getTab(i).setPos(rcNew);
			}
		}
	}
}

CTabWnd.prototype.setBgImage = function (sFile)
{
	if(this.mObj){
		//this.mObj.style.backgroundImage = "url(" + sFile + ")";
		for(var i=0;i<this.mTabPanel.length;i++){
			this.mTabPanel[i].setBgImage(sFile);
		}
	}
}
//////////////////// interface not same with CWin

CTabWnd.prototype.showTab = function(nIndex)
{
	var nTabCount = this.getTabCount();
	for(var i=0;i<nTabCount;i++){
		var tabWin = this.getTab(i);
		if(i==nIndex){
			tabWin.show(true);
			this.mTabBtn[i].setCheck(true);
			this.mSelectIndex = nIndex;			
		} else {
			tabWin.show(false);
			this.mTabBtn[i].setCheck(false);
		}
	}
}

CTabWnd.prototype.showMinimize = function(b1)
{
	this.mMinBtn.setMinimize(b1);
}

CTabWnd.prototype.isMinimize = function()
{
	return this.mMinBtn.mMinimized;
}


//////////////////////Interface End/////////////////


////////////////**********************************************/////////////
/* Drag/Resize module
1.Video resize
2.Frame resize
*/
////////////////**********************************************/////////////
var DRAG01 = 0;
var DRAG02 = 1;
//////////////////////Interface Start/////////////////
// public function defination
function AcuInstallDrag()
{
	_gObjDrag1 = new CDragObj("drag01");
	_gObjDrag1.setLimit(100,100, _GetWinWidth()-100, _GetWinHeight()-100);
	
	_gObjDrag2 = new CDragObj("drag02");
	_gObjDrag2.mAllowVerResize = false;
	_gObjDrag2.setLimit(100, 0,  _GetWinWidth()-100 , 0);
	
	document.onmousedown = _MouseDown;
	document.onmousemove = _MouseMove;
	document.onmouseup = _MouseUp;
}

function AcuShowDrag(nIndex, bShow)
{
	if(nIndex==DRAG01){
		_gObjDrag1.show(bShow);
		if(bShow){
			_gObjDrag2.show(false);
		}
	} else if(nIndex==DRAG02){
		_gObjDrag2.show(bShow);
		if(bShow){
			_gObjDrag1.show(false);
		}
	}
}


function AcuHideAllDrag()
{
	_gObjDrag1.show(false);
	_gObjDrag2.show(false);
}

function AcuMoveDrag(nIndex,x,y,nHeight)
{
	AcuLog("AcuMoveDrag:" + nIndex + "," + x + "," + y + "," + nHeight);
	if(nIndex==DRAG01){
		_gObjDrag1.moveWin(x,y);
	} else if(nIndex==DRAG02){
		_gObjDrag2.moveWin(x,y);
		_gObjDrag2.setHeight(nHeight);
	}
	
}

function AcuSetDragLimit(nIndex,x1,y1,x2,y2)
{
	AcuLog("AcuSetDragLimit:" + nIndex + "," + x1 + "," + y1 + "," + x2 + "," + y2);
	if(nIndex==DRAG01){
		_gObjDrag1.setLimit(x1,y1,x2,y2);
	} else if(nIndex==DRAG02){
		_gObjDrag2.setLimit(x1,y1,x2,y2);
	}
	
}

//////////////////////Interface End/////////////////


///////////////////////////////////////////////////////

// global var defination
var _gDrag = false;
var _gObjDrag1;
var _gObjDrag2;
var _gCurrDrag = 0;

// object defination
function CDragObj(sId)
{
	this.mId	= sId;
	this.mObj	= _GetObjById(this.mId);
	this.mAllowVerResize = true;
	this.mLimitX1 = 0;
	this.mLimitY1 = 0;
	this.mLimitX2 = _GetWinWidth();
	this.mLimitY2 = _GetWinHeight();
}

CDragObj.prototype.isSameObj = function(obj)
{
	var bRet = false;
	if(this.mObj && obj){
		var sId = obj.id;
		bRet = this.mId == sId ;
	}
	return bRet;
}

CDragObj.prototype.show = function(bShow)
{
	var sVis = bShow?"visible":"hidden";
	if(this.mObj){
		this.mObj.style.visibility = sVis;
	}	
}

CDragObj.prototype.moveTo = function(x,y)
{
	if(this.mObj){
		var aX = this.getPermitX(x);
		var aY = this.getPermitY(y);
		//AcuLog("moveTo(" + x + "," + y + "), (" + aX + "," + aY + ")");	
		
		if(this.mAllowVerResize){
			this.mObj.style.left = aX - this.mObj.offsetWidth;
			this.mObj.style.top	= aY - this.mObj.offsetHeight;
		} else {
			this.mObj.style.left= aX;
			this.mObj.style.top	= aY;			
		}
		if(AcuOnDrag){
			AcuOnDrag(aX,aY);
		}
	}
}


CDragObj.prototype.moveWin = function(x,y)
{
	if(this.mObj){
		var aX = this.getPermitX(x);
		var aY = this.getPermitY(y);
		
		if(this.mAllowVerResize){
			this.mObj.style.left = aX - this.mObj.offsetWidth;
			this.mObj.style.top	= aY - this.mObj.offsetHeight;
		} else {
			this.mObj.style.left= aX;
			this.mObj.style.top	= aY;
		}
	}
}



CDragObj.prototype.setWidth = function(n)
{
	if(this.mObj){
		this.mObj.style.width = n;
	}
}

CDragObj.prototype.setHeight = function(n)
{
	if(this.mObj){
		this.mObj.style.height = n;
	}
}


CDragObj.prototype.setLimit = function(x1,y1,x2,y2)
{
	this.mLimitX1 = x1;
	this.mLimitY1 = y1;
	this.mLimitX2 = x2;
	this.mLimitY2 = y2;	
	//AcuLog("setLimit(" + x1 + "," + y1 + ", " + x2 + "," + y2 + ")");
}

CDragObj.prototype.getPermitX = function(x)
{
	if(x<=this.mLimitX1) return this.mLimitX1;
	if(x>=this.mLimitX2) return this.mLimitX2;
	return x;
}

CDragObj.prototype.getPermitY = function(y)
{
	if(y<=this.mLimitY1) return this.mLimitY1;
	if(y>=this.mLimitY2) return this.mLimitY2;
	return y;
}


// private function defination
function _MouseDown(evt)
{
	 
	evt = evt || window.event;
	var objSrc = evt.srcElement ? evt.srcElement : evt.target;
	var x= evt.pageX || evt.clientX;
  var y= evt.pageY || evt.clientY;      
    
	if(_gObjDrag1.isSameObj(objSrc)){		
		_gDrag = true;
		if(_gObjDrag1.mObj.setCapture){
        _gObjDrag1.mObj.setCapture();        
     } else {
     	_GetObjById("slidesAbove").style.left = _GetObjById("panelSlides").offsetLeft;
			_GetObjById("slidesAbove").style.top = _GetObjById("panelSlides").offsetTop;			
			_GetObjById("slidesAbove").style.width = _GetObjById("panelSlides").offsetWidth;
			_GetObjById("slidesAbove").style.height = _GetObjById("panelSlides").offsetHeight;
			_GetObjById("slidesAbove").style.display='';
    }
     _gObjDrag1.moveTo(x,y);    
		_gCurrDrag = 1;		
		return false;
	}
	
	if(_gObjDrag2.isSameObj(objSrc)){		
		_gDrag = true;
		if(_gObjDrag2.mObj.setCapture){
        _gObjDrag2.mObj.setCapture();        
     } else {
     	_GetObjById("slidesAbove").style.left = _GetObjById("panelSlides").offsetLeft;
			_GetObjById("slidesAbove").style.top = _GetObjById("panelSlides").offsetTop;			
			_GetObjById("slidesAbove").style.width = _GetObjById("panelSlides").offsetWidth;
			_GetObjById("slidesAbove").style.height = _GetObjById("panelSlides").offsetHeight;
			_GetObjById("slidesAbove").style.display='';
    }
     _gObjDrag2.moveTo(x,y);    
		_gCurrDrag = 2;		
		return false;
	}	
}


function _MouseMove(evt)
{
	
	evt = evt || window.event;
	
  var x= evt.pageX || evt.clientX;
  var y= evt.pageY || evt.clientY;    
		
	if(_gDrag){
		if(_gCurrDrag==1){
			_gObjDrag1.moveTo(x,y);
		} else if(_gCurrDrag==2){
			_gObjDrag2.moveTo(x,y);
		}
	}
}


function _MouseUp()
{		
	if(_gDrag){		
		if(_gCurrDrag==1){			
			if(_gObjDrag1.mObj.releaseCapture){
        _gObjDrag1.mObj.releaseCapture();
      } else {
      	_GetObjById("slidesAbove").style.display='none';
      }
		} else if(_gCurrDrag==2){
			if(_gObjDrag2.mObj.releaseCapture){
        _gObjDrag2.mObj.releaseCapture();
      } else {
      	_GetObjById("slidesAbove").style.display='none';
      }
		}
		_gDrag = false;
	}
}


////////////////**********************************************/////////////
/* Layout module
1.layout defination
2.layout change(resize,drag)
*/
////////////////**********************************************/////////////

// const var
// view type
var VIEW_NORMAL = 0;
var VIEW_VIDEO 	= 1;
var VIEW_SLIDES	= 2;

// window defination
var WND_TOP 	= 0;
var WND_VIDEO 	= 1;
var WND_TOC 	= 2;
var WND_SLIDES 	= 3;
var WND_BOTTOM 	= 4;
var WND_FISRT	= WND_TOP;
var WND_COUNT	= WND_BOTTOM+1;


//toc tab id
var TOC_TAB1	= 0;
var TOC_TAB2	= 1;
var TOC_TAB3	= 2;
var TOC_TAB4	= 3;
var TOC_TAB5	= 4;

// default size
var TOP_HEIGHT		= 55;
var VIDEO_WIDTH		= 176;
var VIDEO_HEIGHT	= 144;
var VIDEO_BAR_WIDTH	= 176;
var VIDEO_BAR_HEIGHT= 72;
var VIDEO_BAR_HEIGHT2= 64;
var BOTTOM_HEIGHT	= 38;

var _gFirstSlideLoaded = false;
var _gLastVisitSlideId = "";
var _gCurrBarHeight = VIDEO_BAR_HEIGHT;
//////////////////////Interface Start/////////////////
// public function defination
function AcuInstallLayout()
{	
	_gUI = new CUIObj();
	window.onresize = _WinResize;	
}

function AcuSetViewType(nType)
{
	if(!(nType==VIEW_NORMAL || nType==VIEW_VIDEO || nType==VIEW_SLIDES)){
		nType = VIEW_NORMAL;
	}
	_gUI.mViewType = nType;
	
	_gUI.resizeWin();
	AcuSyncDrag();
}

function AcuChangeTocTab(nIndex)
{
	_gUI.mWndToc.showTab(nIndex);
}

function AcuShowUI(bShow)
{
	_gUI.showAll(bShow);
}

function AcuSetCurrentSlide(cs)
{
	if(_gFirstSlideLoaded){
		if(_IsEqual(_gUI.mCurrSlide.mSlideId,cs.mSlideId))
			return;
	} else {
		_gFirstSlideLoaded = true;
	}
	
	var sCurrId = AcuGetCurrentSlideId();
	
	if(sCurrId.length>0 && sCurrId + "" != "-1"){
		_gLastVisitSlideId = sCurrId + "";
	}
	
	_gUI.setCurrentSlide(cs);
	
	AcuClearChat();
	if(cs.hasSpeakerNote()){
		AcuSetSpeakerNote(cs.getSpeakerNote(""));
	} else {
		AcuSetSpeakerNote("");
	}
}


function AcuGetCurrentSlide()
{
	return _gUI.mCurrSlide;
}

function AcuIsDraged()
{
	return _gUI.mDraged;
}

function AcuIsDraged2()
{
	return _gUI.mDraged2;
}

function AcuIsLayoutChanged()
{
	return _gUI.mLayoutChanged;
}

function AcuIsScreenDirector()
{
	return _gUI.mCurrSlide.isScreenDirector();
}

function AcuUsingImage()
{
	return _gUI.mCurrSlide.mHasImage;
}

function AcuGetBarHeight()
{
	return _gCurrBarHeight;
}
function AcuFitCurrentSlide()
{	
	if(AcuIsLayoutChanged()){
		if(AcuIsScreenDirector()){
			if(AcuIsDraged2()){
				AcuSetVideoSize(_gUI.mCurrVideoWidth2, _gUI.mCurrVideoHeight2);
			} else {
				AcuSetVideoSize(_gUI.mCurrSlide.mVideoWidth, _gUI.mCurrSlide.mVideoHeight);
			}			
		} else {
			if(AcuIsDraged()){
				AcuSetVideoSize(_gUI.mCurrVideoWidth, _gUI.mCurrVideoHeight);
			} else {
				AcuSetVideoSize(_gUI.mCurrSlide.mVideoWidth, _gUI.mCurrSlide.mVideoHeight);
			}
		}
	} else {		
		if(AcuIsScreenDirector()){			
			if(AcuIsDraged2()){
			} else {
				AcuSetVideoSize(_gUI.mCurrSlide.mVideoWidth, _gUI.mCurrSlide.mVideoHeight);
			}			
		} else {			
			if(AcuIsDraged()){
				//AcuSetVideoSize(_gUI.mCurrVideoWidth, _gUI.mCurrVideoHeight);
			} else {
				AcuSetVideoSize(_gUI.mCurrSlide.mVideoWidth, _gUI.mCurrSlide.mVideoHeight);
			}
		}
	}
	AcuSyncDrag();
}

function AcuSetVideoSize(cx, cy)
{
	AcuLog("AcuSetVideoSize: cx=" + cx + ",cy=" + cy);
	cx = _MIN(cx, 800);
	cy = _MIN(cy, 600);
	_gUI.setVideoSize(cx, cy);
	AcuSyncDrag();
}

function AcuDragVideoSize(cx, cy)
{
	_gUI.dragVideoSize(cx, cy);
}

function AcuResize()
{	
	_gUI.resizeWin();
	AcuLog("AcuResize->mViewType:" + _gUI.mViewType);
	//AcuSyncDrag();
	if(_gUI.mViewType==VIEW_NORMAL){
		var rcLimit = _gUI.getDragLimit();
		AcuSetDragLimit(_gUI.getCurrentDrag(), rcLimit.x1, rcLimit.y1, rcLimit.x2, rcLimit.y2);
	} else {
		AcuHideAllDrag();
	}
}


function AcuSyncDrag()
{
	var rc = _gUI.getVideoRect();	
	var nSlideWidth = _gUI.getSlideWidth();
	var nDrag = _gUI.getCurrentDrag();
	if(nDrag==DRAG01){
		AcuMoveDrag(nDrag,rc.x2,rc.y2,0);
	} else if(nDrag==DRAG02){
		//alert("video rect:" + rc.toString() + " width:" + _GetWinWidth());
		if(nSlideWidth>=50){
			AcuMoveDrag(nDrag,rc.x2,rc.y1,rc.getHeight());
		} else {
			AcuMoveDrag(nDrag,_GetWinWidth(),rc.y1,rc.getHeight());
		}
	}
	
	if(_gUI.mShowAll){		
		AcuShowDrag(nDrag,true);
	}
	
	if(_gUI.mViewType==VIEW_NORMAL){
		var rcLimit = _gUI.getDragLimit();
		AcuSetDragLimit(nDrag, rcLimit.x1, rcLimit.y1, rcLimit.x2, rcLimit.y2);
	} else {
		AcuHideAllDrag();
	}
}

// call back function 
function AcuOnDrag(x,y)
{
	AcuLog("AcuOnDrag(" + x + "," + y + ")" );
	AcuDragVideoSize(x, y-TOP_HEIGHT);
}


function AcuSetTOC(sText)
{
	_gUI.setTOCText(sText);
}

function AcuSetCourseInfo(sText)
{
	_gUI.setCourseInfoText(sText);
}

function AcuSetSpeakerNote(sText)
{
	_gUI.setSpeakerNoteText(_FilterHtmlData(sText));
}

function AcuSetChat(sText)
{
	_gUI.setChatText(sText);
}

function AcuSetSearch(sText)
{
	_gUI.setSearchText(sText);
}

function AcuSetSearchSession()
{
	if (_GetObjById("fromsession").value=="0")
	{
		_GetObjById("edtUserName").value = _gSysInfo.mAuthorAccount;
		_GetObjById("edtModuleName").value = _gSysInfo.mModuleId;
	}
	else
	{
		_GetObjById("edtUserName").value = "";
		_GetObjById("edtModuleName").value = "";
	}
	
	AcuSubmitSearch();
	
	return false;
}

function AcuAddChat(sText)
{
	_gUI.addChatText(sText);
}

function AcuClearChat()
{
	_gUI.setChatText("");
}

function AcuMinimize1()
{
	_gUI.mWndToc.showMinimize(!_gUI.mWndToc.isMinimize());
	AcuResize();
}

function AcuMinimize2()
{
	_gUI.mWndChat.showMinimize(!_gUI.mWndChat.isMinimize());
	AcuResize();
}

function AcuSetLeftBgImage(sFile)
{
	_gUI.mWndToc.setBgImage(sFile);
}

function AcuSetRightBgImage(sFile)
{
	_gUI.mWndSlides.setBgImage(sFile);
}

//////////////////////Interface End/////////////////

///////////////////////////////////////////////////////

// global var defination
var _gUI;
// object defination



/////////////// CLayoutObj //////////////////////////////////////

function CLayoutObj(ui)
{
	// config
	this.mWndTopPos		= "F1";
	this.mWndVideoPos	= "F11";
	this.mWndTocPos		= "F12";
	this.mWndChatPos	= "F13";
	this.mWndSlidesPos	= "F21";
	this.mWndBottomPos	= "F2";
	
	this.mUI 			= ui;
	
	// position
	this.mWidth			= _GetWinWidth();
	this.mHeight		= _GetWinHeight();	
	
	this.mTopRect		= new CRect(0, 0, 0, 0);
									
	this.mBottomRect	= new CRect(0, 0, 0, 0);
	
	this.mVideoRect		= new CRect(0, 0, 0, 0);
									
	this.mSlidesRect	= new CRect(0, 0, 0, 0);	
		 
	this.mTocRect		= new CRect(0, 0, 0, 0);									
	
	this.mRectArray				= new Array();
	this.mRectArray[WND_TOP]	= this.mTopRect;
	this.mRectArray[WND_VIDEO]	= this.mVideoRect;
	this.mRectArray[WND_TOC]	= this.mTocRect;
	this.mRectArray[WND_SLIDES] = this.mSlidesRect;
	this.mRectArray[WND_BOTTOM] = this.mBottomRect;
	
}

CLayoutObj.prototype.clear = function()
{
	this.mWndTopPos		= "";
	this.mWndVideoPos	= "";
	this.mWndTocPos		= "";
	this.mWndChatPos	= "";
	this.mWndSlidesPos	= "";
	this.mWndBottomPos	= "";	
}

CLayoutObj.prototype.setLayout = function(sTop, sVideo, sToc, sChat, sSlides, sBottom)
{
	this.mWndTopPos		= sTop;
	this.mWndVideoPos	= sVideo;
	this.mWndTocPos		= sToc;
	this.mWndChatPos	= sChat;
	this.mWndSlidesPos	= sSlides;
	this.mWndBottomPos	= sBottom;	
}
CLayoutObj.prototype.initSize = function()
{
	this.mWidth			= _GetWinWidth();
	this.mHeight		= _GetWinHeight();
}

CLayoutObj.prototype.getRect = function(n)
{
	if(n>=WND_FISRT && n<WND_COUNT){
		var rc = this.mRectArray[n];
		//rc.y2 += VIDEO_BAR_HEIGHT;
		return rc;
	}
	return null;
}


CLayoutObj.prototype.calculate = function()
{
	var cs = this.mUI.mCurrSlide;
	if(cs.isScreenDirector()){
		this.resize(this.mUI.mCurrVideoWidth2, this.mUI.mCurrVideoHeight2, true);
	} else {
		this.resize(this.mUI.mCurrVideoWidth, this.mUI.mCurrVideoHeight, true);
	}
}

CLayoutObj.prototype.recalculate = function(nWidth, nHeight)
{
	this.resize(nWidth, nHeight, true);
}


CLayoutObj.prototype.resize = function(nWidth, nHeight, bWithBar)
{
	this.initSize();
	var cs = this.mUI.mCurrSlide;
	var left = 0;
	var top = 0;
	
	AcuLog("CLayoutObj.resize: " + nWidth + "," + nHeight);
	//AcuLog("CLayoutObj.resize->cs:" + cs);
	
	var bSC = cs.isScreenDirector();
	var bChat = cs.hasChat();
	var bSpeakerNote = cs.hasSpeakerNote();
	
	if(bWithBar){		
		nHeight += _gCurrBarHeight;
	}
	
	var wnd1 = this.mUI.mWndToc;
	var wnd2 = this.mUI.mWndChat;

	if(bSC){
		this.mTopRect.x1 = 0;
		this.mTopRect.y1 = 0;
		this.mTopRect.x2 = 0;
		this.mTopRect.y2 = 0;
		
		if(this.mWidth>100){
			if(this.mWidth - nWidth- 100<0){
				nWidth = this.mWidth;
			}
		} else {
			nWidth = this.mWidth/2;
		}
		
		this.mBottomRect.x1 = left;
		this.mBottomRect.y1 = this.mHeight-BOTTOM_HEIGHT;
		this.mBottomRect.x2 = this.mWidth;
		this.mBottomRect.y2 = this.mHeight;
		
		this.mVideoRect.x1 = left;
		this.mVideoRect.y1 = top ;
		this.mVideoRect.x2 = nWidth;
		this.mVideoRect.y2 = this.mBottomRect.y1;		
		
		var nRightWidth = this.mWidth -this.mVideoRect.getWidth();
		nRightWidth = nRightWidth<=0?0:nRightWidth;
		var nSlidesHeight = Math.round((nRightWidth *3) /4);
		var nVideoHeight = this.mVideoRect.getHeight();
		if(nRightWidth>0){
			nSlidesHeight = _MIN(nSlidesHeight, _ABS(nVideoHeight-100));
		} else {
			nSlidesHeight = 100;
		}		
		
		//if(bChat && bSpeakerNote){
		if(true){
			this.mSlidesRect.x1 = this.mVideoRect.x2 + 2;
			this.mSlidesRect.y1 = this.mVideoRect.y1;
			this.mSlidesRect.x2 = this.mWidth;
			this.mSlidesRect.y2 = this.mSlidesRect.y1 + nSlidesHeight;
			
			this.mTocRect.x1 	= this.mSlidesRect.x1;
			this.mTocRect.y1 	= this.mSlidesRect.y2;
			this.mTocRect.x2 	= this.mSlidesRect.x2;
			this.mTocRect.y2 	= this.mBottomRect.y1;
		}
										
	} else {
		
		this.mTopRect.x1 = left;
		this.mTopRect.y1 = top;
		this.mTopRect.x2 = this.mWidth;
		this.mTopRect.y2 = TOP_HEIGHT;
										
		this.mBottomRect.x1 = left;
		this.mBottomRect.y1 = this.mHeight-BOTTOM_HEIGHT;
		this.mBottomRect.x2 = this.mWidth;
		this.mBottomRect.y2 = this.mHeight;
		//AcuLog("HasVideo:" + cs.mHasVideo + ", haschat=" + cs.hasChat());
		if(cs.mHasVideo){
			this.mVideoRect.x1 = left;
			this.mVideoRect.y1 = this.mTopRect.y2;
			this.mVideoRect.x2 = nWidth;
			this.mVideoRect.y2 = this.mVideoRect.y1 + nHeight;
		} else {
			
			//AcuLog("HasVideo: nWidth=" + nWidth + ", nHeight=" + nHeight);
			this.mVideoRect.x1 = left;
			this.mVideoRect.y1 = this.mTopRect.y2;
			this.mVideoRect.x2 = nWidth;
			this.mVideoRect.y2 = this.mTopRect.y2 + nHeight;
		}		
				
		this.mSlidesRect.x1 = this.mVideoRect.x2;
		this.mSlidesRect.y1 = this.mVideoRect.y1;
		this.mSlidesRect.x2 = this.mTopRect.x2;
		this.mSlidesRect.y2 = this.mBottomRect.y1;	
			
		if(true){
			this.mTocRect.x1 	= this.mVideoRect.x1;
			this.mTocRect.y1 	= this.mVideoRect.y2;
			this.mTocRect.x2 	= this.mVideoRect.x2;
			this.mTocRect.y2 	= this.mBottomRect.y1;
			//alert(this.mTocRect);											
		}
	}
}


CLayoutObj.prototype.resizeToVideoView = function()
{
	this.initSize();
	var left = 0;
	var top = 0;
		
	for(var i=WND_FISRT; i<WND_COUNT; i++){
		this.mRectArray[i].x1 = 0;
		this.mRectArray[i].y1 = 0;
		this.mRectArray[i].x2 = 0;
		this.mRectArray[i].y2 = 0;
	}
	
	this.mBottomRect.x1 = left;
	this.mBottomRect.y1 = this.mHeight-BOTTOM_HEIGHT;
	this.mBottomRect.x2 = this.mWidth;
	this.mBottomRect.y2 = this.mHeight;
	
	this.mVideoRect.x1 = left;
	this.mVideoRect.y1 = top;
	this.mVideoRect.x2 = this.mBottomRect.x2;
	this.mVideoRect.y2 = this.mBottomRect.y1;
	
	//AcuLog("resizeToVideoView->mVideoRect: " + this.mVideoRect);
	//AcuLog("resizeToVideoView->mSlidesRect: " + this.mSlidesRect);
}


CLayoutObj.prototype.resizeToSlidesView = function()
{
	this.initSize();
	var left = 0;
	var top = 0;
		
	for(var i=WND_FISRT; i<WND_COUNT; i++){
		this.mRectArray[i].x1 = 0;
		this.mRectArray[i].y1 = 0;
		this.mRectArray[i].x2 = 0;
		this.mRectArray[i].y2 = 0;
	}
	
	this.mBottomRect.x1 = left;
	this.mBottomRect.y1 = this.mHeight-BOTTOM_HEIGHT;
	this.mBottomRect.x2 = this.mWidth;
	this.mBottomRect.y2 = this.mHeight;
	
	this.mSlidesRect.x1 = left;
	this.mSlidesRect.y1 = top;
	this.mSlidesRect.x2 = this.mWidth;
	this.mSlidesRect.y2 = this.mBottomRect.y1;
	
	AcuLog("resizeToSlidesView->mSlidesRect: " + this.mSlidesRect);
}


/////////////// CUIObj //////////////////////////////////////
function CUIObj()
{	
	// window
	this.mWndTop		= new CWnd("panelTop");
	this.mWndVideo		= new CWnd("panelVideo");
	this.mWndToc		= new CTabWnd("panelTab1");
	this.mWndSlides		= new CWnd("panelSlides");
	this.mWndBottom		= new CWnd("panelBottom");
		
	this.mWndToc.addTab("bnTab1",		"panelTOC");
	this.mWndToc.addTab("bnTab2",		"panelSlidesInfo");
	
	this.mWndToc.addTab("bnTab3",		"panelSpeakerNote");
	this.mWndToc.addTab("bnTab4",		"panelChat");
	this.mWndToc.addTab("bnTab5",		"panelSearch");
	
	this.mWndArray				= new Array();
	this.mWndArray[WND_TOP]		= this.mWndTop;
	this.mWndArray[WND_VIDEO]	= this.mWndVideo;
	this.mWndArray[WND_TOC]		= this.mWndToc;
	this.mWndArray[WND_SLIDES] 	= this.mWndSlides;
	this.mWndArray[WND_BOTTOM] 	= this.mWndBottom;
		
	// layout
	this.mCurrSlide		= new CCurrentSlide();
	this.mDefaultLayout	= new CLayoutObj(this); // default layout
	this.mSCLayout		= new CLayoutObj(this); // screen director
	this.mLayout		= this.mDefaultLayout;
	this.mDefaultLayout.setLayout("F1","F11","F12","F13","F21","F2");
	this.mSCLayout.setLayout("F1","F11","F22","F23","F21","F2");
	
	// status
	this.mCurrVideoWidth 	= 0;
	this.mCurrVideoHeight 	= 0;
	
	this.mCurrVideoWidth2 	= 0;
	this.mCurrVideoHeight2 	= 0;
	
	// draged video size
	this.mDragVideoWidth 	= 0;
	this.mDragVideoHeight 	= 0;
	this.mShowAll			= false;
	//flag of video has been draged
	this.mDraged			= false;
	this.mDraged2			= false;
	this.mLayoutChanged		= false;
	this.mFirstSlide		= true;
	this.mViewType			= VIEW_NORMAL;	
}

CUIObj.prototype.setCurrentSlide = function(cs)
{	
	if(cs.mHasVideo){
		if(cs.mHasImage){			
			objImage.src = cs.mImageFile;
			if(!this.mCurrSlide.mHasImage){				
				objImage.style.display = "";
				objImage.width = cs.mImageWidth;
				objImage.height = cs.mImageHeight;
				objWMP.width = "100%";
				objWMP.height = _gCurrBarHeight;	
			}			
		} else {			
			_gCurrBarHeight = VIDEO_BAR_HEIGHT;
			objImage.style.display = "none";
			objWMP.width = "100%";
			objWMP.height = "100%";
		}
	} else {
		_gCurrBarHeight = VIDEO_BAR_HEIGHT2;
		objImage.src = "";
		objImage.style.display = "none";
		objWMP.width = "100%";
		objWMP.height = "100%";
	}
		
	if(this.mFirstSlide){
		this.mLayoutChanged = true;
		this.mFirstSlide = false;
	} else {
		if(cs.isScreenDirector() == this.mCurrSlide.isScreenDirector()){			
			if(cs.mHasVideo == this.mCurrSlide.mHasVideo && cs.mHasImage == this.mCurrSlide.mHasImage){
				this.mLayoutChanged = false;
			} else {
				this.mLayoutChanged = true;
			}			
		} else {
			this.mLayoutChanged = true;
		}
		
		if(!cs.isScreenDirector()){
			if(cs.mHasVideo){
				if(this.mCurrVideoHeight<=0){
					this.mCurrVideoHeight 	= cs.mVideoHeight;
				}
			} else {
				this.mCurrVideoHeight 	= 0;
			}
		}
	}
	this.mCurrSlide = cs;
}

CUIObj.prototype.isLayoutChanged = function()
{
	return this.mLayoutChanged;	
}

CUIObj.prototype.setVideoSize = function(cx,cy)
{	
	AcuLog("CUIObj.setVideoSize: cx=" + cx + ",cy=" + cy);
	if(this.mCurrSlide.isScreenDirector()){
		this.mCurrVideoWidth2 = cx;
		this.mCurrVideoHeight2 = cy;
		this.mLayout = this.mSCLayout;
		this.mWndVideo.setScroll(false);
	} else {
		this.mCurrVideoWidth = cx;
		this.mCurrVideoHeight = cy;
		this.mLayout = this.mDefaultLayout;
		this.mWndVideo.setScroll(false);
	}
		
	
	if(this.mViewType == VIEW_NORMAL){
		this.mLayout.calculate();
	} else if(this.mViewType == VIEW_VIDEO){
		this.mLayout.resizeToVideoView();
	} else if(this.mViewType == VIEW_SLIDES){
		this.mLayout.resizeToSlidesView();
	}
	
	//this.scrollToTopLeft();
	var i=0;
	for(i=WND_FISRT; i<WND_COUNT; i++){
		var rc = this.mLayout.getRect(i);
		
		if(this.mShowAll){
			this.mWndArray[i].show(!rc.isEmpty());
		}
		this.mWndArray[i].setPos( rc );			
	}	
	//this.scrollToTopLeft();
}

CUIObj.prototype.dragVideoSize = function(cx,cy)
{
	if(this.mCurrSlide.isScreenDirector()){
		this.mCurrVideoWidth2 	= cx;
		this.mCurrVideoHeight2 	= cy - _gCurrBarHeight;
		this.mDraged2			= true;
	} else {		
		this.mCurrVideoWidth 	= cx;
		this.mCurrVideoHeight 	= cy - _gCurrBarHeight;
		this.mDraged			= true;
	}
	
	this.mLayout.calculate();
	var i=0;
	for(i=WND_FISRT; i<WND_COUNT; i++){
		var rc = this.mLayout.getRect(i);
		this.mWndArray[i].setPos( rc );
	}	
	
	this.mDragVideoWidth 	= this.mCurrVideoWidth;
	this.mDragVideoHeight 	= this.mCurrVideoHeight;
}

CUIObj.prototype.getVideoRect = function()
{
	return this.mLayout.getRect(WND_VIDEO);
}

CUIObj.prototype.getSlideWidth = function()
{
	return this.mLayout.mSlidesRect.getWidth();
}



CUIObj.prototype.getCurrentDrag = function()
{
	return this.mCurrSlide.isScreenDirector()?DRAG02:DRAG01;
}

CUIObj.prototype.getDragLimit = function()
{
	var rc = new CRect(0,0,0,0);
	if(this.mCurrSlide.isScreenDirector()){
		rc.x1 = 100;
		rc.y1 = 0;
		rc.x2 = _GetWinWidth() - 100;
		rc.x2 = rc.x2<rc.x1?rc.x1:rc.x2;	
		rc.y2 = 0;
	} else {
		if(this.mCurrSlide.mHasVideo){
			rc.x1 = 100;
			rc.y1 = TOP_HEIGHT + 100;
			rc.x2 = _GetWinWidth() - 100;
			rc.x2 = rc.x2<rc.x1?rc.x1:rc.x2;	
			rc.y2 = _GetWinHeight() - 100;
		} else {
			rc.x1 = 100;
			rc.y1 = TOP_HEIGHT + _gCurrBarHeight;
			rc.x2 = _GetWinWidth() - 100;
			rc.x2 = rc.x2<rc.x1?rc.x1:rc.x2;	
			rc.y2 = rc.y1;
		}
		
	}
	return rc;
}


CUIObj.prototype.showAll = function(bShow)
{
	for(i=WND_FISRT; i<WND_COUNT; i++){
		this.mWndArray[i].show(bShow);
	}
	//this.scrollToTopLeft();
	AcuShowDrag(this.getCurrentDrag(),true);
	this.mShowAll = bShow;
}

CUIObj.prototype.resizeWin = function()
{	
	if(this.mViewType == VIEW_NORMAL){
		if(this.mCurrSlide.isScreenDirector()){
			this.mLayout.recalculate(this.mCurrVideoWidth2,this.mCurrVideoHeight2);
		} else {
			this.mLayout.recalculate(this.mCurrVideoWidth,this.mCurrVideoHeight);
		}
	} else if(this.mViewType == VIEW_VIDEO){
		this.mLayout.resizeToVideoView();
	} else if(this.mViewType == VIEW_SLIDES){
		this.mLayout.resizeToSlidesView();
	}
	var i=0;
	for(i=WND_FISRT; i<WND_COUNT; i++){
		var rc = this.mLayout.getRect(i);
		if(this.mShowAll){
			this.mWndArray[i].show(!rc.isEmpty());
		}
		this.mWndArray[i].setPos( rc );
	}	
	//this.scrollToTopLeft();
}

CUIObj.prototype.setTOCText = function(sText)
{
	var panel = _GetObjById("panelTOC");
	if(AcuIsObject(panel)){
		panel.innerHTML = sText;
	}
}

CUIObj.prototype.setCourseInfoText = function(sText)
{
	/*var panel = _GetObjById("panelSlidesInfo");
	if(AcuIsObject(panel)){
		panel.innerHTML = sText;
	}*/
	var obj,sHtml,sCSSUrl;

	sCSSUrl = document.getElementById('playbackStyle').href;
	if(AcuIsLocalPlayback()){
		sCSSUrl = sCSSUrl.substring(sCSSUrl.lastIndexOf("/") + 1);
	}
	sHtml = "<link rel=\"stylesheet\" type=\"text/css\" href=\"" + sCSSUrl + "\">\
	<BODY style='BACKGROUND-COLOR: transparent'> " + sText + "</body>";	
	obj = window.frames["panelSlidesInfo"];	
	obj.document.open();
	obj.document.write(sHtml);	
	obj.document.close();	
	
	
}

CUIObj.prototype.setSpeakerNoteText = function(sText)
{
	var panel = _GetObjById("panelSpeakerNote");
	if(AcuIsObject(panel)){
		panel.innerHTML = sText;
	}
}

CUIObj.prototype.setChatText = function(sText)
{
	var panel = _GetObjById("panelChat");
	if(AcuIsObject(panel)){
		panel.innerHTML = sText;
	}
}

CUIObj.prototype.setSearchText = function(sText)
{
	var panel = _GetObjById("panelSearch");
	if(AcuIsObject(panel)){
		panel.innerHTML = sText;
	}
}

CUIObj.prototype.addChatText = function(sText)
{
	var panel = _GetObjById("panelChat");
	if(AcuIsObject(panel)){
		panel.innerHTML +=  sText + "<br>";
	}
}

CUIObj.prototype.scrollToTopLeft = function()
{
	//window.scrollTo(0,0);
	//var minBtn = _GetObjById("tdLeft");
	//minBtn.scrollIntoView();
}



function _WinResize()
{
	AcuResize();
}

////////////////**********************************************/////////////
/* Slide Manager module
1. playback.xml parsing
2. 
*/
////////////////**********************************************/////////////

function AcuGetMediaFileBySlideId(nSlideId)
{
	return _gSlideMgr.getMediaFileBySlideId(nSlideId);
}

function AcuGetSlide(nSlideId)
{
	if (window.XMLHttpRequest && !IsIE()){
		return _gSlideMgr.getSlideFF(nSlideId);
	} else {
		return _gSlideMgr.getSlide(nSlideId);
	}
	
}

function AcuGetFirstSlide()
{	
	if (window.XMLHttpRequest && !IsIE()){
		return _gSlideMgr.getSlideFF("1");
	} else {
		return _gSlideMgr.getSlide("1");
	}
}


var _gSlideMgr = new CSlidesMgr();
// slides manager
function CSlidesMgr()
{
	this.mXml = null;
	this.mXMLDoc = null;
}

CSlidesMgr.prototype.getMediaFileBySlideId = function(nSlideId)
{	
	var sRet = "";
	var sMediaId = "-1";
	var oXml = this.mXml;
	var nodeSlide, nodeMedia;
	if(AcuIsObject(oXml)){
		nodeSlide = oXml.selectSingleNode("/Aculearn/Playback/Slide[@Id='" + nSlideId + "']");
		if(AcuIsObject(nodeSlide)){
			sMediaId = nodeSlide.getAttribute("MediaFileId");
			nodeMedia = oXml.selectSingleNode("/Aculearn/Media/MediaFile[@Id='" + nSlideId + "']");
			if(AcuIsObject(nodeMedia)){
				sRet = nodeMedia.nodeTypedValue;
			}
		}
	}
	return sRet;
}

CSlidesMgr.prototype.getSlideIdByFileName = function(sFileName)
{
	var sRet = "";
	if(sFileName.length>0){		
		var oXml = this.mXml;
		var nodeList;
		var sPath;
		if(AcuIsObject(oXml)){
			nodeList = oXml.selectNodes("/Aculearn/Playback/Slide");
			if(AcuIsObject(nodeList)){
				for(var item = nodeList.nextNode(); item; item = nodeList.nextNode()){
					sPath = item.getAttribute("Path");					
					if(sPath.indexOf(sFileName)>0){
						sRet = item.getAttribute("Id") + "";
						break;
					}
				}
			}
		}
	}
	return sRet;
}
CSlidesMgr.prototype.getSlideIdByFileNameFF = function (sFileName)
{
	var sRet = "";
	if(sFileName.length>0){		
		var oXml = this.mXMLDoc;
		var nodeList;
		var sPath;
		if(AcuIsObject(oXml)){
			var rootNode = oXml.getElementsByTagName("Aculearn")[0];
			var nodeSlides = rootNode.getElementsByTagName("Playback")[0];
			if ( !nodeSlides )
				return sRet;
			nodeList = nodeSlides.getElementsByTagName("Slide");
			if(AcuIsObject(nodeList)){
				for (var i=0;i<nodeList.length;i++){
					item = nodeList[i];
					sPath = item.getAttribute("Path");
					if(sPath.indexOf(sFileName)>0){
						sRet = item.getAttribute("Id") + "";
						break;
					}
				}
			}
		}
	}
	return sRet;
}
CSlidesMgr.prototype.getSlide = function(nSlideId)
{	
	var cs = new CCurrentSlide();
	var sMediaId = "-1";
	var oXml = this.mXml;
	var nodeSlide, nodeMedia;
	
	var nodeList;
	if(AcuIsObject(oXml)){
		nodeSlide = oXml.selectSingleNode("/Aculearn/Playback/Slide[@Id=\"" + nSlideId + "\"]");
		if(AcuIsObject(nodeSlide)){
			// load slide info
			cs.mSlideId 		= nodeSlide.getAttribute("Id");
			cs.mType 			= nodeSlide.getAttribute("Type");
			cs.mType = cs.mType==null?"":cs.mType;
			
			cs.mSlidePath 		= nodeSlide.getAttribute("Path");
			cs.mPreviewHtml 	= nodeSlide.getAttribute("PreviewHtml");
			cs.mPreviewImage 	= nodeSlide.getAttribute("PreviewImage");
			cs.mFolder 			= nodeSlide.getAttribute("Folder");
			cs.mMediaFileId 	= nodeSlide.getAttribute("MediaFileId");
			cs.mStartTime 		= _ParseInt(nodeSlide.getAttribute("StartTime"));
			cs.mEndTime 		= _ParseInt(nodeSlide.getAttribute("EndTime"));
			
			nodeList			= nodeSlide.selectNodes("SlideInfo/SpeakerNote");
			if(AcuIsObject(nodeList)){
				for(var item = nodeList.nextNode(); item; item = nodeList.nextNode()){
					cs.addSpeakerNote( item.getAttribute("LanguageId"), item.nodeTypedValue);
				}
			}
			
			// load media info
			nodeMedia = oXml.selectSingleNode("/Aculearn/Media/MediaFile[@Id='" + cs.mMediaFileId + "']");
			if(AcuIsObject(nodeMedia)){				
				cs.mMediaFile 		= nodeMedia.nodeTypedValue;
				cs.mVideoWidth 		= _ParseInt(nodeMedia.getAttribute("Width"));
				cs.mVideoHeight 	= _ParseInt(nodeMedia.getAttribute("Height"));
				if( cs.mVideoWidth >=426 && cs.mVideoWidth < 800 ) {
					cs.mVideoWidth 		= 426;
					cs.mVideoHeight 	= 320;
				}
				cs.mHasVideo 		= _ParseBoolean(nodeMedia.getAttribute("HasVideo"));
				
				cs.mHasImage		= _ParseBoolean(nodeMedia.getAttribute("HasImage"));
				if(!cs.mHasVideo){
					cs.mVideoWidth = VIDEO_WIDTH;
					cs.mVideoHeight = 0;
				}
				cs.mVideoSize 		= nodeMedia.getAttribute("VideoSize");
				cs.mHasAudio 		= true;
				if(cs.mHasImage){
					var sImagePath = nodeMedia.getAttribute("ImageFile");
					if(AcuIsLocalPlayback()){
						sImagePath = "media\\" + sImagePath;
					} else {
						sImagePath = AcuGetBasePath() + "media\\" + sImagePath;
					}
					cs.setImage(sImagePath ,
						_ParseInt(nodeMedia.getAttribute("ImageWidth")),
						_ParseInt(nodeMedia.getAttribute("ImageHeight")));
				}
			}
			
			// load actions
			var items = nodeSlide.selectNodes("Actions/Action");
			if(AcuIsObject(items)){
				for(var item = items.nextNode(); item; item = items.nextNode()){
					cs.addAction( item.getAttribute("Id"),
						 item.getAttribute("Type"),
						 _ParseInt(item.getAttribute("Time")),
						 item.nodeTypedValue);
				}
			}
			
			cs.checkChat();
		}
		AcuLog("CSlidesMgr->getSlide: nSlideId=" + nSlideId + ", cs=" + cs.toString());
	}
	
	if(cs.mSlideId.length>0)
		return cs
	else
		return null;
}

CSlidesMgr.prototype.getSlideFF = function(nSlideId)
{	
	var cs = new CCurrentSlide();
	var sMediaId = "-1";
	var oXml = this.mXMLDoc;	

	if(AcuIsObject(oXml))
	{
		var rootNode = oXml.getElementsByTagName("Aculearn")[0];
		var playbackNode = rootNode.getElementsByTagName("Playback")[0];
		var slideNode = playbackNode.getElementsByTagName("Slide");
		
		for (var i = 0; i < slideNode.length; i++)
		{
			if (slideNode[i].getAttribute("Id") == nSlideId)
			{
				// load slide info
    			cs.mSlideId 		= slideNode[i].getAttribute("Id");
    			cs.mType 			= slideNode[i].getAttribute("Type");
    			cs.mType 			= cs.mType==null?"":cs.mType;
    			
    			cs.mSlidePath 		= slideNode[i].getAttribute("Path");
    			cs.mPreviewHtml 	= slideNode[i].getAttribute("PreviewHtml");
    			cs.mPreviewImage 	= slideNode[i].getAttribute("PreviewImage");
    			cs.mFolder 			= slideNode[i].getAttribute("Folder");
    			cs.mMediaFileId 	= slideNode[i].getAttribute("MediaFileId");
    			cs.mStartTime 		= _ParseInt(slideNode[i].getAttribute("StartTime"));
    			cs.mEndTime 		= _ParseInt(slideNode[i].getAttribute("EndTime"));
    			
    			// load speaknote info
    			var nodeList		= slideNode[i].getElementsByTagName("SlideInfo")[0].getElementsByTagName("SpeakerNote");
    			for(var k = 0; k < nodeList.length; k++)
    			{
						if (nodeList[k].firstChild) {
			    				cs.addSpeakerNote(nodeList[k].getAttribute("LanguageId"), nodeList[k].firstChild.nodeValue);
						}
    			}
    			
    			// load chat info
    			var actionsNode = slideNode[i].getElementsByTagName("Actions")[0];
    			var actionNode = actionsNode.getElementsByTagName("Action");

    			for (var j = 0; j < actionNode.length; j++)
    			{
    				if (actionNode[j].getAttribute("Type") == "Chat")
    					cs.mChatInfo += actionNode[j].firstChild.nodeValue + "<br>";
    			}
    			
    			// load media info
    			var mediaNode = rootNode.getElementsByTagName("Media")[0];
    			cs.mMediaFolder = mediaNode.getAttribute("Folder");
    			var mediafileNode = mediaNode.getElementsByTagName("MediaFile");
    			
					for (var j = 0; j < mediafileNode.length; j++)
					{
						if (mediafileNode[j].getAttribute("Id") == cs.mMediaFileId)
						{
									cs.mMediaFile 		= mediafileNode[j].firstChild.nodeValue;
	        				cs.mVideoWidth 		= _ParseInt(mediafileNode[j].getAttribute("Width"));
	        				cs.mVideoHeight 	= _ParseInt(mediafileNode[j].getAttribute("Height"));
	        					        				
	        				if( cs.mVideoWidth >=426 && cs.mVideoWidth < 800 ) {
										cs.mVideoWidth 		= 426;
										cs.mVideoHeight 	= 320;
									}
	        				cs.mHasVideo 		= _ParseBoolean(mediafileNode[j].getAttribute("HasVideo"));
	        				cs.mHasImage		= _ParseBoolean(mediafileNode[j].getAttribute("HasImage"));
	        				
	        				/*if(!cs.mHasVideo)
	        				{
	        					cs.mVideoWidth = VIDEO_WIDTH;
	        					cs.mVideoHeight = 0;
	        				}*/
	        				cs.mVideoSize 		= mediafileNode[j].getAttribute("VideoSize");
	        				cs.mHasAudio 		= true;
	        				if(cs.mHasImage)
	        				{
	        					var sImagePath = mediafileNode[j].getAttribute("ImageFile");
	        					if(AcuIsLocalPlayback())
	        					{
	        						sImagePath = "media\\" + sImagePath;
	        					} else {
	        						sImagePath = AcuGetBasePath() + "media\\" + sImagePath;
	        					}
	        					cs.setImage(sImagePath, _ParseInt(mediafileNode[j].getAttribute("ImageWidth")), _ParseInt(mediafileNode[j].getAttribute("ImageHeight")));
	        				}
							
									//if found then quit [load media info] loop
									break;
						}
					}		
    			//cs.checkChat();
    			break;
			}
		}

		AcuLog("CSlidesMgr->getSlide: nSlideId=" + nSlideId + ", cs=" + cs.toString());
	}
	
	if(cs.mSlideId.length > 0)
		return cs
	else
		return null;
}
function AcuLoadData(sXmlUrl)
{
	AcuLog("AcuLoadData:" + sXmlUrl);
	
	// 1. load xml
	var objXML = new ActiveXObject("Microsoft.XMLDOM");
	objXML.resolveExternals = false;
   	_gSlideMgr.mXml = objXML; 
   	
	if(AcuIsLocalPlayback()){
		objXML.async = false; 
		if(!objXML.load(sXmlUrl)){
			AcuLog("AcuLoadData: failed to load " +sXmlUrl);
			AcuOnDataLoad( false );
			return false;
		} else {
			AcuOnDataLoad( AcuParseData() );
		}
	} else {
		objXML.onreadystatechange = AcuOnLoadStatusChange
		objXML.async = true;
		objXML.load(sXmlUrl);
		AcuSetLoading(true);
		setTimeout("AcuUpdateLoadingStatus();",500);
	}   	
}
function AcuLoadDataFF(sXmlUrl)
{
	// 1. load xml
	var objXML;
	if (window.XMLHttpRequest && !IsIE()){
		objXML = new XMLHttpRequest();
		_gSlideMgr.mXml = objXML;
		objXML.onreadystatechange = AcuOnLoadStatusChangeFF;
		objXML.open("GET", sXmlUrl, true);
		objXML.send(null);
	}	
	AcuSetLoading(true);
	setTimeout("AcuUpdateLoadingStatus();",500);
}
function AcuUpdateLoadingStatus()
{
	if(AcuIsLoading()){
		var sText = eval(processMultiBrowser("_GetObjById('loadingStatus').innerText"));
		var nLen = sText.length;
		if(nLen>=6){
			sText = ".";
		} else {
			sText += ".";
		}
		eval(processMultiBrowser("_GetObjById('loadingStatus').innerText = sText"));
		setTimeout("AcuUpdateLoadingStatus();",500);
	}
}

function AcuOnLoadStatusChange()
{
	var objXML = _gSlideMgr.mXml;
	if (objXML.readyState == 4) {
		if (objXML.parseError.errorCode != 0){
			AcuOnDataLoad(false);
		} else {
			AcuOnDataLoad(AcuParseData());
		}
	}
}
function AcuOnLoadStatusChangeFF()
{
	var objXML = _gSlideMgr.mXml;
	if (objXML.readyState == 4) {
		if (objXML.status == 200 || objXML.status == 0){
			_gSlideMgr.mXMLDoc = objXML.responseXML;
			AcuOnDataLoad(AcuParseDataFF());
		} else {			
			AcuOnDataLoad(false);
		}
	}
}
function AcuParseData()
{
	AcuLog("AcuParseData:");
	
	var objXML = _gSlideMgr.mXml;
	// 1. check xml
	if (objXML.parseError.errorCode != 0)
   	{
		AcuLog("AcuLoadData: failed to parse " +sXmlUrl);
		return false;
   	}
   	
	AcuLog("AcuParseData->xml object loaded");
	
	// 2. read course info
   	var nodeTemp = objXML.selectSingleNode("//Aculearn/Courses");   	
   	_gCourseInfo.mId		= nodeTemp.getAttribute("Id");
   	_gCourseInfo.mTitle 	= nodeTemp.getAttribute("Title");
   	_gCourseInfo.mDesc 		= nodeTemp.getAttribute("Desc");
   	
   	nodeTemp = objXML.selectSingleNode("//Aculearn/Courses/Author");
   	_gCourseInfo.mAuthorName	= nodeTemp.getAttribute("Name");
   	_gCourseInfo.mAuthorEmail 	= nodeTemp.getAttribute("Email");
   	
   	nodeTemp = objXML.selectSingleNode("//Aculearn/Courses/DateInfo");
   	_gCourseInfo.mCreatedDate 	= nodeTemp.getAttribute("CreatedDate");
   	_gCourseInfo.mCreatedTime 	= nodeTemp.getAttribute("CreatedTime");
   	_gCourseInfo.mExpiryDate 	= nodeTemp.getAttribute("ExpiryDate");
   	
   	// load SLV Info
   	nodeTemp = objXML.selectSingleNode("//Aculearn/SLVAttr");
   	if (nodeTemp) {
   		_gCourseInfo.mHasSLVInfo = true;
   		_gCourseInfo.mSLVInfo.mType = nodeTemp.getAttribute("type");
   		_gCourseInfo.mSLVInfo.mBgcolor = parseInt(nodeTemp.getAttribute("bgcolor"));
   		_gCourseInfo.mSLVInfo.mWidth = parseInt(nodeTemp.getAttribute("width"));
   		_gCourseInfo.mSLVInfo.mHeight = parseInt(nodeTemp.getAttribute("height"));
   	}
   	
   	// load podcast info for local playback
   	if(AcuIsLocalPlayback()){   		
	   	nodeTemp = objXML.selectSingleNode("//Aculearn/Courses/Podcast");
	   	if(nodeTemp){
				_gCourseInfo.mSupportMP3		= nodeTemp.getAttribute("SupportMP3") == "1";
				_gCourseInfo.mMP3File 			= nodeTemp.getAttribute("MP3File");
				if(_gCourseInfo.mMP3File.length>0){
					_gCourseInfo.mMP3File = AcuGetBasePath() + _gCourseInfo.mMP3File;
				}
				
				_gCourseInfo.mSupportMP4		= nodeTemp.getAttribute("SupportMP4") == "1";
				_gCourseInfo.mMP4File 			= nodeTemp.getAttribute("MP4File");
				if(_gCourseInfo.mMP4File.length>0){
					_gCourseInfo.mMP4File = AcuGetBasePath() + _gCourseInfo.mMP4File;
				}	   	
	   	}
   	}
   	
   	nodeTemp = objXML.selectSingleNode("//Aculearn/DefaultLayout");
   	_gCourseInfo.mLeftImage 	= nodeTemp.getAttribute("LeftImage");
   	_gCourseInfo.mRightImage 	= nodeTemp.getAttribute("RightImage");
   	
   	var list = objXML.selectNodes("//Aculearn/Scource/File");
   	for (var i=0;i<list.length;i++){
   		nodeTemp = list.nextNode();
   		_gCourseInfo.addSource(nodeTemp.getAttribute("Id"),
   			nodeTemp.getAttribute("Path"),
   			nodeTemp.getAttribute("Type"),
   			nodeTemp.getAttribute("FileName"));
   	}
   	
   	AcuLog("AcuInitSlidesInfo-> get slides info");
   	
	// 3. read slides TOC info
   	list = objXML.selectNodes("//Aculearn/Playback/Slide");
   	for (var i=0;i<list.length;i++){
   		nodeTemp = list.nextNode();
   		
		
   		var item = new CTOCItem(nodeTemp.selectSingleNode("SlideInfo/SlideLabel").nodeTypedValue);
   		item.mSlideId 		= nodeTemp.getAttribute("Id");
   		
		item.mMediaFileId 	= nodeTemp.getAttribute("MediaFileId");
		item.mStartTime		= _ParseInt(nodeTemp.getAttribute("StartTime"));
		item.mEndTime		= _ParseInt(nodeTemp.getAttribute("EndTime"));		
		
   		var subNodes = nodeTemp.selectNodes("SlideInfo/SlideDetails/SlideDetail");
   		for (var j=0;j<subNodes.length;j++){
   			var nodeDetail = subNodes.nextNode();
   			item.addDetail(nodeDetail.nodeTypedValue);
   		}
   		_gTOC.addItem(item);
   	}
   	
   	
	// 4. cache info
   	var list = objXML.selectNodes("//Aculearn/Cache/Images/Image");
   	for (var i=0;i<list.length;i++){
   		nodeTemp = list.nextNode();	
		AcuAddCacheImage(nodeTemp.getAttribute("Id"),nodeTemp.getAttribute("Path"));
   	}
   	   	
   	var list = objXML.selectNodes("//Aculearn/Cache/Videos/Video");
   	for (var i=0;i<list.length;i++){
   		nodeTemp = list.nextNode();	
		AcuAddCacheVideo(nodeTemp.getAttribute("Id"),nodeTemp.getAttribute("Path"));
   	}
   	
   	var list = objXML.selectNodes("//Aculearn/Cache/Slides/Slide");
   	for (var i=0;i<list.length;i++){
   		nodeTemp = list.nextNode();	
		AcuAddCacheSlide(nodeTemp.getAttribute("Id"),nodeTemp.getAttribute("Path"));
   	}
   	return true;
}
function AcuParseDataFF()
{
	var XMLDoc = _gSlideMgr.mXMLDoc;
	var rootNode = XMLDoc.getElementsByTagName("Aculearn")[0];
	
	AcuLog("read course info");
	//1. read course info
	var courseNode = rootNode.getElementsByTagName("Courses")[0];
	if (courseNode) {
		_gCourseInfo.mId		= courseNode.getAttribute("Id");
	   	_gCourseInfo.mTitle 	= courseNode.getAttribute("Title");
	   	_gCourseInfo.mDesc 		= courseNode.getAttribute("Desc");
	}
   	var authorNode = courseNode.getElementsByTagName("Author")[0];
   	if (authorNode) {
	   	_gCourseInfo.mAuthorName	= authorNode.getAttribute("Name");
	   	_gCourseInfo.mAuthorEmail 	= authorNode.getAttribute("Email");
	}
   	var dateNode = courseNode.getElementsByTagName("DateInfo")[0];
   	if (dateNode) {
	   	_gCourseInfo.mCreatedDate 	= dateNode.getAttribute("CreatedDate");
	   	_gCourseInfo.mCreatedTime 	= dateNode.getAttribute("CreatedTime");
	   	_gCourseInfo.mExpiryDate 	= dateNode.getAttribute("ExpiryDate");
	}
   	var defaultlayoutNode = rootNode.getElementsByTagName("DefaultLayout")[0];
   	if (defaultlayoutNode) {
	   	_gCourseInfo.mLeftImage 	= defaultlayoutNode.getAttribute("LeftImage");
	   	_gCourseInfo.mRightImage 	= defaultlayoutNode.getAttribute("RightImage");
	}
   	var scourceNode = rootNode.getElementsByTagName("Scource")[0];
   	if (scourceNode) {
	   	var list = scourceNode.getElementsByTagName("File");
	   	for (var i = 0; i < list.length; i++){
	   		_gCourseInfo.addSource(list[i].getAttribute("Id"),
	   			list[i].getAttribute("Path"),
	   			list[i].getAttribute("Type"),
	   			list[i].getAttribute("FileName"));
	   	}
	}
   	
   	AcuLog("read slides TOC info");
	// 2. read slides TOC info
	var playbackNode = rootNode.getElementsByTagName("Playback")[0];
	if (playbackNode) {
		var list = playbackNode.getElementsByTagName("Slide");
	   	for (var i=0; i < list.length; i++){
			var slideinfoNode = list[i].getElementsByTagName("SlideInfo")[0];
			if (slideinfoNode) {
				var slideLabelNode = slideinfoNode.getElementsByTagName("SlideLabel")[0];
				if (slideLabelNode) {
			   		var item = new CTOCItem(slideLabelNode.firstChild.nodeValue);
			   		item.mSlideId 		= list[i].getAttribute("Id");
					item.mMediaFileId 	= list[i].getAttribute("MediaFileId");
					item.mStartTime		= _ParseInt(list[i].getAttribute("StartTime"));
					item.mEndTime		= _ParseInt(list[i].getAttribute("EndTime"));
					
					var slideDetailsNode = slideinfoNode.getElementsByTagName("SlideDetails")[0];
					if (slideDetailsNode) {
				   		var subNodes = slideDetailsNode.getElementsByTagName("SlideDetail");
				   		for (var j=0;j<subNodes.length;j++){
				   			if (subNodes[j].firstChild) {
				   				item.addDetail(subNodes[j].firstChild.nodeValue);
				   			}
				   		}
				   	}
			   		_gTOC.addItem(item);
			   	}
			}
	   	}
	}
   	
   	AcuLog("read cache info");
   	// 3. read cache info
   	var cacheNode = rootNode.getElementsByTagName("Cache")[0];
   	if (cacheNode) {
   		var cacheimageNode = cacheNode.getElementsByTagName("Images")[0];
   		if (cacheimageNode) {
		   	var list = cacheimageNode.getElementsByTagName("Image");
		   	for (var i = 0;i < list.length; i++)
		   	{
				AcuAddCacheImage(list[i].getAttribute("Id"),list[i].getAttribute("Path"));
		   	}
		}
	}
   	/*
   	var list = cacheNode.getElementsByTagName("Videos")[0].getElementsByTagName("Video");
   	for (var i = 0;i < list.length; i++)
   	{
		AcuAddCacheVideo(list[i].getAttribute("Id"),list[i].getAttribute("Path"));
   	}*/
   	
   	if (cacheNode) {
   		var cacheSlides = cacheNode.getElementsByTagName("Slides")[0];
   		if (cacheSlides) {
		   	var list = cacheSlides.getElementsByTagName("Slide");
		   	for (var i = 0;i < list.length; i++)
		   	{
				AcuAddCacheSlide(list[i].getAttribute("Id"),list[i].getAttribute("Path"));
		   	}
		}
	}
	
	return true;
}


function AcuGetSlideIdByPos(sMediaFileId, nPos)
{
	var nRet = "1";
	var nCount = _gTOC.getCount();
	var nTimePos = nPos;
	
	for(var i=0;i<nCount;i++){
		var item = _gTOC.getItemAt(i);
		if(_IsEqual(item.mMediaFileId,sMediaFileId)){
			if(nTimePos>=item.mStartTime && nTimePos<=item.mEndTime){
				nRet = item.mSlideId;
			}
		}
	}
	
	AcuLog("AcuGetSlideIdByPos-> pos=" + nTimePos + ",sMediaFileId=" + sMediaFileId + ",SlideId=" + nRet);
	return nRet;
}


function AcuGetCurrentMediaFileId()
{
	var sRet = "1";
	var cs = AcuGetCurrentSlide();
	if(AcuIsObject(cs)){
		sRet = cs.mMediaFileId;
	}
	return sRet;
}


function AcuGetCurrentSlideId()
{
	var sRet = "";
	var cs = AcuGetCurrentSlide();
	if(AcuIsObject(cs)){
		sRet = cs.mSlideId;
	}
	return sRet;
}

function AcuOnLangChanged(sLangId)
{
	var cs = AcuGetCurrentSlide();
	if(cs && cs.mSlideId.length>0){		
		AcuSetSpeakerNote(cs.getSpeakerNote(sLangId));
	}
}

function AcuGetPrevSlideId()
{
	var sRet = "";
	var sCurrId = AcuGetCurrentSlideId();
	if(sCurrId.length>0){
		nCurrId = parseInt(sCurrId);
		if(nCurrId>1){
			sRet = (nCurrId -1) + "";
		}
	}
	return sRet;
}

function AcuGetNextSlideId()
{
	var sRet = "";
	var sCurrId = AcuGetCurrentSlideId();
	if(sCurrId.length>0){
		nCurrId = parseInt(sCurrId);
		if(nCurrId<AcuGetMaxSlideId()){
			sRet = (nCurrId + 1) + "";
		}
	}
	return sRet;
}

function AcuGetFirstSlideId()
{
	var sRet = "1";
	return sRet;
}

function AcuGetLastSlideId()
{
	var sRet = AcuGetMaxSlideId() + "";
	return sRet;
}

function AcuGetSlideIdByFileName(sFileName)
{
	var sRet = "";
	if(sFileName.length>0){
		if ( IsIE() ) {
			sRet = _gSlideMgr.getSlideIdByFileName(sFileName);
		} else {
			sRet = _gSlideMgr.getSlideIdByFileNameFF(sFileName);
		}		
	}
	return sRet;
}

function AcuGetLastViewedSlideId()
{
	var sRet = "";
	if(_gLastVisitSlideId!=AcuGetCurrentSlideId()){
		sRet = _gLastVisitSlideId + "";
	}	 
	return sRet;
}

////////////////**********************************************/////////////
/* TOC module
1. generate and display TOC
*/
////////////////**********************************************/////////////

// global definations
var _gTOC = new CTOCInfo();

// object defination
function CTOCInfo()
{
	this.mExpand = false;
	this.mItems = new Array();
	this.mCount = 0;
	this.mMaxSlideId = 0;
	this.addItem = function (item){
		this.mItems[this.mCount++] = item;
		var sId = item.mSlideId;
		if(sId.length>0){
			var nId = parseInt(sId);
			this.mMaxSlideId = this.mMaxSlideId>nId?this.mMaxSlideId : nId;
		}
	}
	this.getItemAt = function (nIndex){
		return this.mItems[nIndex];
	}
	this.getCount = function (){
		return this.mCount;
	}
}

function CTOCItem(sNote)
{	
	sNote = sNote==null?"":sNote;
	this.mSlideId = "";
	this.mNote = sNote;
	this.mMediaFileId = "";
	this.mStartTime	=0;
	this.mEndTime	=0;
	this.mDetails = new Array();
	this.mDetailCount = 0;
	this.addDetail = function(sDetail){
		sDetail = sDetail==null?"":sDetail;
		this.mDetails[this.mDetailCount++] = sDetail;
	}
	
	this.getDetailAt = function(nIndex){
		return this.mDetails[nIndex];
	}
	
	this.getNote = function(){
		return this.mNote;
	}
	
	this.getDetailCount = function(){
		return this.mDetailCount;
	}
	
	this.getDuration  	= function(){
		return this.mEndTime - this.mStartTime;
	}
	
	this.getDurationString  	= function(){
		var nDuration = _Round(this.getDuration() / 1000);
		var nSecond = 0, nMinute=0, nHour = 0;
		
		if(nDuration>=60){
			nSecond = nDuration % 60;
			
			nDuration = _Round(nDuration/60);
			if(nDuration>=60){
				nMinute = nDuration % 60;
				nHour = _Round(nDuration/60);
			} else {
				nMinute = nDuration;
				nHour	= 0;
			}	
		} else {
			nSecond = nDuration;
			nMinute = 0;
			nHour	= 0;
		}
		//AcuLog(this.mSlideId + "getDurationString: nDuration=" + this.getDuration() + ", nHour=" + nHour + ", nMinute=" + nMinute + ", nSecond=" + nSecond);
		return _FormatTime(nHour, nMinute, nSecond);
	}
}

function AcuGetTOCBySlideId(nSlideId)
{
	for (var i=0; i<_gTOC.getCount(); i++) {
		var item = 	_gTOC.getItemAt(i);
		if (item.mSlideId == nSlideId)
			return item;
	}
	
	return null;
}

function AcuGetMaxSlideId()
{
	AcuLog("AcuGetMaxSlideId:" + _gTOC.mMaxSlideId);
	return _gTOC.mMaxSlideId;
}
//call back function
function AcuOnTocClick(nSlideId)
{
	AcuLog("AcuOnTocClick:" + nSlideId);
	_gTOC.mSlideId = nSlideId;
	AcuChangeSlideFromToc(nSlideId);
}

function AcuExpandToc(bExpand)
{
	_gTOC.mExpand = bExpand;
	AcuLog("AcuExpandToc:" + bExpand);
	var sDisplay = _gTOC.mExpand? "" : "none";
	var itemDetail;
	for(i=0;i<_gTOC.getCount();i++){
		var item = _gTOC.getItemAt(i);
		itemDetail = _GetObjById("tocDetail" + item.mSlideId);
		if(AcuIsObject(itemDetail)){
			itemDetail.style.display = sDisplay;
		}
	}
	return _gTOC.mExpand;
}

function AcuHighLightTocById(nSlideId)
{
	AcuLog("AcuHighLightTocById:" + nSlideId);
	var nTotal = AcuGetSlideseCount();
	var nCurrentSlide = nSlideId;
	var note, detail;
	for(var i=0;i<nTotal;i++){
		var item = _gTOC.getItemAt(i);
		note = _GetObjById("tocNote"+item.mSlideId);
		detail = _GetObjById("tocDetail"+item.mSlideId);
		if(AcuIsObject(note)){
			note.style.color = colorNormal;
			detail.style.color = colorNormal;
			if(nCurrentSlide==item.mSlideId){
				note.style.backgroundColor = colorBgHighLight;
				detail.style.backgroundColor = colorBgHighLight;
				//note.scrollIntoView();
			} else {			
				note.style.backgroundColor = colorBgNormal;
				detail.style.backgroundColor = colorBgNormal;
			}
		}
	}
}

var g_bShowSearchPanel = true;

function AcuSetShowSearchPanel(bShow)
{
	g_bShowSearchPanel = bShow;
}

function AcuDisplayToc()
{	
	// display TOC
	var sHtml = "<table width=100% style='background: transparent;'>";
	var nDetailCount = 0;
	for(var i=0;i<_gTOC.getCount();i++){
		var item = _gTOC.getItemAt(i);
		var nId = item.mSlideId;
		var sNote = item.getNote() + " (" + item.getDurationString() + ")";
		sHtml += "<tr><td id=tocNote" + nId + " name=tocNote" + nId + " class=TocNote noWrap onmouseover='TocOver(this)' onmouseout='TocOut(this)' onclick='TocClick(" + nId + ")' title='" + sNote + "'><b>" + (i+1) + "</b>  " + sNote + "</td></tr>";
		sHtml += "<tr><td><table id=tocDetail" + nId + " name=tocDetail" + nId + "  width=100% class=TocDetail onmouseover='TocOver(this)' onmouseout='TocOut(this)' onclick='TocClick(" + nId + ")'>";		

		for(var j=0;j<item.getDetailCount();j++){
			sHtml += "<tr><td>&nbsp;&nbsp;" + item.getDetailAt(j) + "</td></tr>";			
		}
		
		sHtml += "</table>";
		sHtml += "</td></tr>";
	}
	sHtml += "</table>";
	//alert(sHtml);
	AcuSetTOC(sHtml);
	
	// display Course Info
	sHtml = "<table width=100% style='background: transparent;'>";
	sHtml += "<tr><td nowrap><b><span autoLang=1 langId=1028>" + AcuGetMsg(1028) + "</span>:</b></td><td align=left>" 	+ _gCourseInfo.mTitle + "</td></tr>";
	sHtml += "<tr><td nowrap><b><span autoLang=1 langId=1029>" + AcuGetMsg(1029) + "</span>:</b></td><td align=left>" 	+ _gCourseInfo.mDesc + "</td></tr>";
	sHtml += "<tr><td nowrap><b><span autoLang=1 langId=1030>" + AcuGetMsg(1030) + "</span>:</b></td><td align=left>" 	+ _gCourseInfo.mAuthorName + "</td></tr>";
	sHtml += "<tr><td nowrap><b><span autoLang=1 langId=1031>" + AcuGetMsg(1031) + "</span>:</b></td><td align=left>" 	
	if(_gCourseInfo.mAuthorEmail.length>0){
		sHtml += "<a href='mailto:" + _gCourseInfo.mAuthorEmail + "'>" + _gCourseInfo.mAuthorEmail + "</a></td></tr>";
	} else {
		sHtml += _gCourseInfo.mAuthorEmail + "</td></tr>";
	}
	sHtml += "<tr><td nowrap><b><span autoLang=1 langId=1032><b>" + AcuGetMsg(1032) + "</span>:</b></td><td align=left>" 	+ _gCourseInfo.mCreatedDate + "</td></tr>";
	sHtml += "</table>\n\n";
	
	
	if(_gCourseInfo.mSupportMP3){
		sHtml += "<br><a href='" + _gCourseInfo.mMP3File + "' target='_blank'>" + AcuGetMsg(1034) +"</a><br>";
	}
	
	if(_gCourseInfo.mSupportMP4){
		sHtml += "<a href='" + _gCourseInfo.mMP4File + "' target='_blank'>" + AcuGetMsg(1035) +"</a><br>";
	}
	
	if(_gCourseInfo.mSourceArray.length>0){		
		sHtml += "<table width=100% style='background: transparent;'>";
		sHtml += "<tr><td><b><span autoLang=1 langId=1033><br>" + AcuGetMsg(1033) + "</span></b></td></tr>";
		for(var i=0;i<_gCourseInfo.mSourceArray.length;i++){
			var item = _gCourseInfo.mSourceArray[i];
			var sFileName = item.mFileName;
			var sLink;
			if(AcuIsLocalPlayback()){
				sLink = item.mPath;
			} else {
				sLink = AcuGetBasePath() + item.mPath;
			}
			if(_IsEmpty(sFileName)){
				sFileName = sLink;
			}
			sHtml += "<tr><td><a href='" + sLink + "' target='_blank'>" + sFileName +"</a></td></tr>";
		}
		sHtml += "</table>\n\n";
	}
	
	AcuSetCourseInfo(sHtml);
	
	sHtml = "<form name='GetData' id='GetData' method='get' onsubmit='return AcuSetSearchSession();'>";
	sHtml += "<table width=100% style='background: transparent;'>";		
	sHtml += "<input type='hidden' name='edtUserName' id='edtUserName' value=''>";
	sHtml += "<input type='hidden' name='edtModuleName' id='edtModuleName' value=''>";
	sHtml += "<input type='hidden' name='edtKeyWords' id='edtKeyWords' value=''>";
	sHtml += "<input type='hidden' name='kk' id='kk' value=''>";
	sHtml += "<input type='hidden' name='km' id='km' value=''>";
	sHtml += "<input type='hidden' name='ka' id='ka' value=''>";
	sHtml += "<input type='hidden' name='kc' id='kc' value=''>";
	sHtml += "<input type='hidden' name='ug' id='ug' value=''>";
	sHtml += "<tr><td width=80><span autoLang=1 langId=1037>" + AcuGetMsg(1037) + "</span>:</td><td align=left><select id='fromsession' name='fromsession'>"
	sHtml += "<option autoLang=1 langId=1040 value='0'>" + AcuGetMsg(1040) + "</option>";
	sHtml += "<option autoLang=1 langId=1050 value='1'>" + AcuGetMsg(1050) + "</option>";
	sHtml += "<option autoLang=1 langId=1051 value='2'>" + AcuGetMsg(1051) + "</option>";
	sHtml += "<option autoLang=1 langId=1041 value='3'>" + AcuGetMsg(1041) + "</option>";
	sHtml += "</td></tr>";
	sHtml += "<tr><td><span autoLang=1 langId=1038>" + AcuGetMsg(1038) + "</span>:</td><td align=left><table cellspacing=0 cellpadding=0><tr><td><input type='text' name='inKeyWords' id='inKeyWords' value='' size=6></td><td><input autoLang=1 langId=1039 type='button' name='searchSubmit' id='searchSubmit' value='" + AcuGetMsg(1039) + "' onclick='AcuSubmitSearch()'></td></tr></table></td></tr>";
	sHtml += "</table><table width=100% style='background: transparent;'>"
	sHtml += "<tr><td><span id='searchResultPanel' name='searchResultPanel' width=100% height=100% style='background: transparent;display:none;'>searchResultPanel</span></td></tr>";
	sHtml += "</table>";
	sHtml += "</form>\n\n";
	
	// if local playback , hide search tab
	if (!AcuIsLocalPlayback()) {
		// set show or hide for search panel in network playback
		AcuShowSearchPanel(g_bShowSearchPanel);
	}
	else
	{
		// set show or hide for search panel in local playback
		AcuShowSearchPanel(false);
	}
	
	AcuSetSearch(sHtml);
	
	// display speaker note
	AcuSetSpeakerNote("");
	// display chat
	AcuClearChat();
	
	if(!_IsEmpty(_gCourseInfo.mLeftImage)){
		var sLink = AcuGetBasePath() + "images/" + _gCourseInfo.mLeftImage;
		AcuSetLeftBgImage(sLink);
	}	
	
	if(!_IsEmpty(_gCourseInfo.mRightImage)){
		var sLink = AcuGetBasePath() + "images/" + _gCourseInfo.mRightImage;
		AcuSetRightBgImage(sLink);
	}
	
}

var gObjXML = null;
var gObjReq = null;
var gSearchExpanded = false;
function AcuSubmitSearch()
{
	// search in current session	
	if (_GetObjById("fromsession").value=="0") {
				
		var sBasePath = AcuGetBasePath();
		var SearchURL = "";
		var SearchParam = "";
		if (sBasePath.indexOf("aculearn-me") > 0) {
			SearchURL = sBasePath.substring(0, sBasePath.indexOf("aculearn-me")) + "aculearn-me/v4/studio/currentsearchforAS.asp";
			SearchParam += "AMIP=" + _gSysInfo.mAMIP + "&";
		}
		else {
			SearchURL = protocolTypeForJsFile + _gSysInfo.mAMIP + "/aculearn-idm/search/currentsearch.asp";
		}
		SearchParam += "edtUserName=" + _gSysInfo.mAuthorAccount;
		SearchParam += "&edtModuleName=" + _gSysInfo.mModuleId;
		SearchParam += "&edtKeyWords=" + _GetObjById("inKeyWords").value;
		SearchParam += "&kk=" + _GetObjById("inKeyWords").value;
		SearchParam += "&km=" + _gSysInfo.mModuleId;
		SearchParam += "&ka=" + _gSysInfo.mAuthorAccount;
		SearchParam += "&ug=" + _gSysInfo.mLogonUserGroup;
		SearchURL += "?" + SearchParam;
				
		if (window.XMLHttpRequest && !IsIE()){
			var objReq = new XMLHttpRequest();	
			gObjReq = objReq;		
			objReq.onreadystatechange = AcuOnSearchReqStatusChangeFF;			
			objReq.open("GET", SearchURL, true);
			objReq.send(null);
			
		} else if (window.ActiveXObject){
			var objReq = new ActiveXObject("Microsoft.XMLHTTP");
			objReq.onreadystatechange = AcuOnSearchReqStatusChange;
			gObjReq = objReq;
			objReq.open("GET", SearchURL, true);
			objReq.send();
		}
		
	}
	// search in all author's sessions
	else if (_GetObjById("fromsession").value == "1") {
		_GetObjById("searchResultPanel").style.display = "none";
		_GetObjById("edtKeyWords").value = _GetObjById("inKeyWords").value;
		_GetObjById("kk").value = _GetObjById("inKeyWords").value;
		_GetObjById("ka").value = _gSysInfo.mAuthorAccount;
		_GetObjById("kc").value = _gSysInfo.mCompany;
		_GetObjById("ug").value = "";
		_GetObjById("GetData").action = protocolTypeForJsFile + _gSysInfo.mAMIP + "/aculearn-idm/search/search.asp";
		_GetObjById("GetData").target = "_blank";
		_GetObjById("GetData").submit();
	}
	// search in all company's sessions
	else if (_GetObjById("fromsession").value == "2") {
		_GetObjById("searchResultPanel").style.display = "none";
		_GetObjById("edtKeyWords").value = _GetObjById("inKeyWords").value;
		_GetObjById("kk").value = _GetObjById("inKeyWords").value;
		_GetObjById("kc").value = _gSysInfo.mCompany;
		_GetObjById("ka").value = "";
		_GetObjById("ug").value = "";
		_GetObjById("GetData").action = protocolTypeForJsFile + _gSysInfo.mAMIP + "/aculearn-idm/search/search.asp";
		_GetObjById("GetData").target = "_blank";
		_GetObjById("GetData").submit();
	}
	// search in all sessions
	else if (_GetObjById("fromsession").value == "3") {
		_GetObjById("searchResultPanel").style.display = "none";
		_GetObjById("edtKeyWords").value = _GetObjById("inKeyWords").value;
		_GetObjById("kk").value = _GetObjById("inKeyWords").value;
		_GetObjById("ug").value = _gSysInfo.mLogonUserGroup;
		_GetObjById("ka").value = "";
		_GetObjById("kc").value = "";
		_GetObjById("GetData").action = protocolTypeForJsFile + _gSysInfo.mAMIP + "/aculearn-idm/search/search.asp";
		_GetObjById("GetData").target = "_blank";
		_GetObjById("GetData").submit();
	}
	else
	{
		return;
	}
}

function AcuOnSearchReqStatusChange()
{
	var objReq = gObjReq;
	if (objReq.readyState == 4) {
		if (objReq.status == 200){
			var objXML = new ActiveXObject("Microsoft.XMLDOM");
			objXML.resolveExternals = false;
	   		gObjXML = objXML;
	   		objXML.onreadystatechange = AcuOnSearchLoadStatusChange;
			objXML.async = true;
			objXML.loadXML(objReq.responseText);
		}
		else {
			var sHtml = "";
			sHtml = "<table width=100% style='background:transparent;'>";
			sHtml += "<tr><td align=center valign=middle><span autoLang=1 langId=1042>" + AcuGetMsg(1042) + "</span></td></tr>";
			sHtml += "</table>\n\n";
		   	_GetObjById("searchResultPanel").style.display = "";
		   	_GetObjById("searchResultPanel").innerHTML = sHtml;
		}
	}
}

function AcuOnSearchReqStatusChangeFF()
{
	var objReq = gObjReq;
	if (objReq.readyState == 4) {
		if (objReq.status == 200){
			gObjXML = objReq.responseXML;		
			AcuParseSearchDataFF();
		}
		else {
			var sHtml = "";
			sHtml = "<table width=100% style='background:transparent;'>";
			sHtml += "<tr><td align=center valign=middle><span autoLang=1 langId=1042>" + AcuGetMsg(1042) + "</span></td></tr>";
			sHtml += "</table>\n\n";
		   	_GetObjById("searchResultPanel").style.display = "";
		   	_GetObjById("searchResultPanel").innerHTML = sHtml;
		}
	}
}

function AcuOnSearchLoadStatusChange()
{
	var objXML = gObjXML;
	if (objXML.readyState == 4) {
		if (objXML.parseError.errorCode == 0){
			AcuParseSearchData();
		} else {
			var sHtml = "";
			sHtml = "<table width=100% style='background:transparent;'>";
			sHtml += "<tr><td align=center valign=middle><span autoLang=1 langId=1042>" + AcuGetMsg(1042) + "</span></td></tr>";
			sHtml += "</table>\n\n";
		   	_GetObjById("searchResultPanel").style.display = "";
		   	_GetObjById("searchResultPanel").innerHTML = sHtml;
		}
	}
}

function AcuExpandSearch()
{
	// expand/collapse contents
	gSearchExpanded = _GetObjById("GetData").searchExpand.checked;
	var sDisplay = gSearchExpanded ? "block" : "none";
	var itemDetail;

	for (var i = 1; i <= gMaxSearchIndex; i++) {
		itemDetail = _GetObjById("searchDetail" + i);
		if (AcuIsObject(itemDetail))
			itemDetail.style.display = sDisplay;
	}
}

var gMaxSearchIndex = 0;

function AcuParseSearchData()
{
	var objXML = gObjXML;
	var sHtml = "";
	sHtml = "<table width=98% style='background:transparent;'>";
   	var nodeList = objXML.selectNodes("//AcuMsg/Records/Record");
   	if (nodeList.length == 0) {
   		sHtml += "<tr><td align=center valign=middle><span autoLang=1 langId=1042>" + AcuGetMsg(1042) + "</span></td></tr>";	
   	}
   	else {
   		sHtml += "<tr><td valign=middle><input type=checkbox name=searchExpand onclick='AcuExpandSearch()'><span autoLang=1 langId=1043>" + AcuGetMsg(1043) + "</span></td></tr>";
   		for (var i=0; i < nodeList.length; i++) {
   			var nSlideId = nodeList[i].getAttribute("SlideID");
   			var nIndex = nodeList[i].getAttribute("Index");
	   		sHtml += "<tr><td id=searchNote" + nIndex + " name=searchNote" + nIndex + " class=TocNote noWrap onmouseover='TocOver(this)' onmouseout='TocOut(this)' onclick='SearchTocClick(" + nSlideId + ")'><b>" + nIndex + "</b>&nbsp;";
	   		sHtml += nodeList[i].getAttribute("Label") + "</td></tr>";

			sHtml += "<tr><td><table id=searchDetail" + nIndex + " name=searchDetail" + nIndex + " width=100% class=TocDetail onmouseover='TocOver(this)' onmouseout='TocOut(this)' onclick='SearchTocClick(" + nSlideId + ")'>";		
			sHtml += "<tr><td>&nbsp;&nbsp;" + nodeList[i].getAttribute("Content") + "</td></tr>";			
			sHtml += "</table>";
			sHtml += "</td></tr>";
			
			if (parseInt(nIndex) > gMaxSearchIndex)
				gMaxSearchIndex = nIndex;
		}
		
		var nodeTemp = objXML.selectSingleNode("//AcuMsg/Records");
		var PrevPage = nodeTemp.getAttribute("PrevPage");
		var NextPage = nodeTemp.getAttribute("NextPage");
		var CurrentPage = nodeTemp.getAttribute("CurrentPage");
		_GetObjById("edtKeyWords").value = _GetObjById("inKeyWords").value;
		sHtml += "<tr><td align=center valign=middle>";
		if (parseInt(PrevPage) != 0) {
			sHtml += "&nbsp;<a href='javascript:AcuGoSearchPage(" + (parseInt(CurrentPage) - 1 ) + ")'><span autoLang=1 langId=1044>" + AcuGetMsg(1044) + "</span></a>&nbsp;";
		}
		if (parseInt(NextPage) != 0) {
			sHtml += "&nbsp;<a href='javascript:AcuGoSearchPage(" + (parseInt(CurrentPage) + 1 ) + ")'><span autoLang=1 langId=1045>" + AcuGetMsg(1045) + "</span></a>&nbsp;";
		}
		sHtml += "</td></tr>";	
   	}
   	
   	sHtml += "</table>\n\n";
   	_GetObjById("searchResultPanel").style.display = "";
   	_GetObjById("searchResultPanel").innerHTML = sHtml;
   	
   	if (gSearchExpanded) {
		_GetObjById("searchExpand").checked = true;
		AcuExpandSearch();
	}
}
function AcuParseSearchDataFF()
{
	var objXML = gObjXML;
	var sHtml = "";
	sHtml = "<table width=98% style='background:transparent;'>";
   	var nodeList = objXML.getElementsByTagName("Record");   	
   	if (nodeList.length == 0) {
   		sHtml += "<tr><td align=center valign=middle><span autoLang=1 langId=1042>" + AcuGetMsg(1042) + "</span></td></tr>";	
   	}
   	else {
   		sHtml += "<tr><td valign=middle><input type=checkbox name=searchExpand onclick='AcuExpandSearch()'><span autoLang=1 langId=1043>" + AcuGetMsg(1043) + "</span></td></tr>";
   		for (var i=0; i < nodeList.length; i++) {
   			var nSlideId = nodeList[i].getAttribute("SlideID");
   			var nIndex = nodeList[i].getAttribute("Index");
	   		sHtml += "<tr><td id=searchNote" + nIndex + " name=searchNote" + nIndex + " class=TocNote noWrap onmouseover='TocOver(this)' onmouseout='TocOut(this)' onclick='SearchTocClick(" + nSlideId + ")'><b>" + nIndex + "</b>&nbsp;";
	   		sHtml += nodeList[i].getAttribute("Label") + "</td></tr>";

			sHtml += "<tr><td><table id=searchDetail" + nIndex + " name=searchDetail" + nIndex + " width=100% class=TocDetail onmouseover='TocOver(this)' onmouseout='TocOut(this)' onclick='SearchTocClick(" + nSlideId + ")'>";		
			sHtml += "<tr><td>&nbsp;&nbsp;" + nodeList[i].getAttribute("Content") + "</td></tr>";			
			sHtml += "</table>";
			sHtml += "</td></tr>";
			
			if (parseInt(nIndex) > gMaxSearchIndex)
				gMaxSearchIndex = nIndex;
		}
		
		var nodeTemp = objXML.getElementsByTagName("Records")[0];
		var PrevPage = nodeTemp.getAttribute("PrevPage");
		var NextPage = nodeTemp.getAttribute("NextPage");
		var CurrentPage = nodeTemp.getAttribute("CurrentPage");
		_GetObjById("edtKeyWords").value = _GetObjById("inKeyWords").value;
		sHtml += "<tr><td align=center valign=middle>";
		if (parseInt(PrevPage) != 0) {
			sHtml += "&nbsp;<a href='javascript:AcuGoSearchPage(" + (parseInt(CurrentPage) - 1 ) + ")'><span autoLang=1 langId=1044>" + AcuGetMsg(1044) + "</span></a>&nbsp;";
		}
		if (parseInt(NextPage) != 0) {
			sHtml += "&nbsp;<a href='javascript:AcuGoSearchPage(" + (parseInt(CurrentPage) + 1 ) + ")'><span autoLang=1 langId=1045>" + AcuGetMsg(1045) + "</span></a>&nbsp;";
		}
		sHtml += "</td></tr>";	
   	}
   	
   	sHtml += "</table>\n\n";
   	_GetObjById("searchResultPanel").style.display = "";
   	_GetObjById("searchResultPanel").innerHTML = sHtml;
   	
   	if (gSearchExpanded) {
		_GetObjById("searchExpand").checked = true;
		AcuExpandSearch();
	}
}

function AcuGoSearchPage(iPage)
{
	var sBasePath = AcuGetBasePath();
	var SearchURL = "";
	var SearchParam = "";
	if (sBasePath.indexOf("aculearn-me") > 0) {
		SearchURL = sBasePath.substring(0, sBasePath.indexOf("aculearn-me")) + "aculearn-me/v4/studio/currentsearchforAS.asp";
		SearchParam += "AMIP=" + _gSysInfo.mAMIP + "&";
	}
	else {
		SearchURL = protocolTypeForJsFile + _gSysInfo.mAMIP + "/aculearn-idm/search/currentsearch.asp";
	}
	SearchParam += "edtUserName=" + _gSysInfo.mAuthorAccount;
	SearchParam += "&edtModuleName=" + _gSysInfo.mModuleId;
	SearchParam += "&edtKeyWords=" + _GetObjById("edtKeyWords").value;
	SearchParam += "&hidPageIndex=" + iPage;
	SearchParam += "&kk=" + _GetObjById("inKeyWords").value;
	SearchParam += "&km=" + _gSysInfo.mModuleId;
	SearchParam += "&ka=" + _gSysInfo.mAuthorAccount;
	SearchParam += "&ug=" + _gSysInfo.mLogonUserGroup;
	SearchParam += "&page=" + iPage;
	SearchURL += "?" + SearchParam;
	//alert("SearchURL:" + SearchURL);
	
	if (window.XMLHttpRequest && !IsIE()){
		var objReq = new XMLHttpRequest();	
		gObjReq = objReq;		
		objReq.onreadystatechange = AcuOnSearchReqStatusChangeFF;			
		objReq.open("GET", SearchURL, true);
		objReq.send(null);
		
	} else if (window.ActiveXObject){
		var objReq = new ActiveXObject("Microsoft.XMLHTTP");
		objReq.onreadystatechange = AcuOnSearchReqStatusChange;
		gObjReq = objReq;
		objReq.open("GET", SearchURL, true);
		objReq.send();
	}
}

function AcuGetSlideseCount()
{
	return _gTOC.getCount();
}

function AcuGetExpandToc()
{
	return _gTOC.m_bExpand;
}



//var colorBgNormal = "#FFFFFF";
var colorBgNormal = "";
var colorNormal = "#000000";
var colorOver = "#FF0000";
var colorHOver = "#FFFFFF";
var colorBgHighLight = "#66CCFF";



// private functions
function TocOver( item )
{
	item.style.color = colorOver;
}

function TocOut( item )
{
	item.style.color = colorNormal;
}

function TocClick(nIndex)
{	
	AcuOnTocClick(nIndex);
}

function SearchTocClick(nIndex)
{	
	AcuChangeTocTab(TOC_TAB1);
	_ImgButtonMouseOut("bnTab5");
	_ImgButtonMouseDown("bnTab1");
	AcuOnTocClick(nIndex);
}
////////////////**********************************************/////////////
/* bottom module
1. Toc expand 
2. switch view button
*/
////////////////**********************************************/////////////


var BTN_EXPAND = "bnExpand";
var BTN_NORMAL = "bnNormal";
var BTN_VIDEO  = "bnVideo";
var BTN_SLIDES = "bnSlides";
var BTN_FORUM  = "bnForum";

//toc tab
var BTN_TAB1  = "bnTab1";
var BTN_TAB2  = "bnTab2";
var BTN_TAB3  = "bnTab3";
var BTN_TAB4  = "bnTab4";
var BTN_TAB5  = "bnTab5";
var gShowSearchPanel = true;

function AcuShowSearchPanel(bShow)
{
	if (!AcuIsLocalPlayback()) {
		gShowSearchPanel = bShow;
	}
	else
	{
		gShowSearchPanel = false;
	}
	
	if (!gShowSearchPanel)
	{
		var objSearchPanel = _GetObjById(BTN_TAB5);
		if (AcuIsObject(objSearchPanel))
		{
			//objSearchPanel.style.width = 0;
			objSearchPanel.style.display = "none";
		}
	}
}

function AcuShowSearch()
{
	return gShowSearchPanel;
}

var _gImgButtonMgr = new CImgButtonMgr();
function AcuInstallBottomButtons()
{
	_gImgButtonMgr.createButtonQuick(BTN_EXPAND,	"images/expand");
	_gImgButtonMgr.createButtonQuick(BTN_NORMAL,	"images/normal");
	_gImgButtonMgr.createButtonQuick(BTN_VIDEO,		"images/video");
	_gImgButtonMgr.createButtonQuick(BTN_SLIDES,	"images/slide");
	if(!AcuIsLocalPlayback()){
		_gImgButtonMgr.createButtonQuick(BTN_FORUM,		"images/forum");
	}
		
	_gImgButtonMgr.createButtonQuick(BTN_TAB1,	"images/toc");
	_gImgButtonMgr.createButtonQuick(BTN_TAB2,	"images/courseinfo");
	_gImgButtonMgr.createButtonQuick(BTN_TAB3,	"images/note");
	_gImgButtonMgr.createButtonQuick(BTN_TAB4,	"images/chat");
	if (AcuShowSearch())
		_gImgButtonMgr.createButtonQuick(BTN_TAB5,	"images/search");
	
	_gImgButtonMgr.getButton(BTN_NORMAL).setChecked(true);
	_gImgButtonMgr.getButton(BTN_TAB1).setChecked(true);
}

var _gExpand = false;
function AcuExpandTocClick() 
{	
	_gExpand = !_gExpand;
	AcuExpandToc(_gExpand);
}



function CImgButton(sId, sNormal, sDown, sOver, sChecked)
{
	this.mId	= sId;
	this.mNormal= sNormal;
	this.mDown	= sDown;
	this.mOver	= sOver;
	this.mChecked= sChecked;
	this.mObj 	= document.getElementById(sId);
	this.mIsChecked = false;
	// cache the image
	this.mImgArray = new Array();
	this.cacheImage = function(){		
		this.mImgArray[0] = new Image();
		this.mImgArray[0].src = this.mNormal;
		this.mImgArray[1] = new Image();
		this.mImgArray[1].src = this.mDown;
		this.mImgArray[2] = new Image();
		this.mImgArray[2].src = this.sOver;
		this.mImgArray[3] = new Image();
		this.mImgArray[3].src = this.mChecked;
	}
	this.setDown = function(){
		if(this.mObj && !this.mIsChecked){
			this.mObj.src = this.mDown;
		}
	}
	this.setNormal = function(){
		if(this.mObj && !this.mIsChecked){
			this.mObj.src = this.mNormal;
		}
	}	
	this.setOver = function(){
		if(this.mObj && !this.mIsChecked){
			this.mObj.src = this.mOver;
		}
	}
	this.enable = function(bEnable){
		if(this.mObj){
			this.mObj.disabled = !bEnable;
		}
	}
	this.setChecked = function(bCheck){
		this.mIsChecked = bCheck;
		if(this.mObj){
			if(bCheck)
				this.mObj.src = this.mChecked;
			else
				this.mObj.src = this.mNormal;
		}
	}
}

function CImgButtonMgr()
{
	this.mBtnArray = new Array();
	this.createButtonQuick = function(sId, sFile){
		//alert(sFile);
		var btn = new CImgButton(sId, sFile + "0.jpg", sFile + "2.jpg", sFile + "1.jpg", sFile + "2.jpg");
		this.mBtnArray[this.mBtnArray.length] = btn;
		btn.cacheImage();		
	}
	this.createButton = function(sId, sNormal, sDown, sOver, sChecked){
		var btn = new CImgButton(sId, sNormal, sDown, sOver, sChecked);
		this.mBtnArray[this.mBtnArray.length] = btn;
		btn.cacheImage();		
	}
	this.getButton = function(sId){
		var ret = null;
		var nCount = this.mBtnArray.length;
		for(var i=0;i<nCount;i++){
			if(sId==this.mBtnArray[i].mId){
				ret = this.mBtnArray[i];
				break;
			}
		}
		return ret;
	}
}

function _ImgButtonMouseOver(sId)
{
	var btn = _gImgButtonMgr.getButton(sId);
	if(btn){
		btn.setOver();
	}
	return true;
}

function _ImgButtonMouseDown(sId)
{
	var btn = _gImgButtonMgr.getButton(sId);
	if(btn){
		if(sId==BTN_EXPAND){
			btn.setDown();
			btn.setChecked(!btn.mIsChecked);
		} else if(sId==BTN_NORMAL || sId==BTN_VIDEO || sId==BTN_SLIDES){			
			btn.setChecked(true);
			btn.enable(false);
			if(sId!=BTN_NORMAL){
				var btnTemp = _gImgButtonMgr.getButton(BTN_NORMAL);
				btnTemp.setChecked(false);
				btnTemp.enable(true);
			}
			if(sId!=BTN_VIDEO){
				var btnTemp = _gImgButtonMgr.getButton(BTN_VIDEO);
				btnTemp.setChecked(false);
				btnTemp.enable(true);
			}
			if(sId!=BTN_SLIDES){
				var btnTemp = _gImgButtonMgr.getButton(BTN_SLIDES);
				btnTemp.setChecked(false);
				btnTemp.enable(true);
			}
		} else if(sId==BTN_TAB1 || sId==BTN_TAB2 || sId==BTN_TAB3 || sId==BTN_TAB4 || sId==BTN_TAB5){
			btn.setChecked(true);
			btn.enable(false);
			if(sId!=BTN_TAB1){
				var btnTemp = _gImgButtonMgr.getButton(BTN_TAB1);
				btnTemp.setChecked(false);
				btnTemp.enable(true);
			}
			if(sId!=BTN_TAB2){
				var btnTemp = _gImgButtonMgr.getButton(BTN_TAB2);
				btnTemp.setChecked(false);
				btnTemp.enable(true);
			}
			if(sId!=BTN_TAB3){
				var btnTemp = _gImgButtonMgr.getButton(BTN_TAB3);
				btnTemp.setChecked(false);
				btnTemp.enable(true);
			}
			if(sId!=BTN_TAB4){
				var btnTemp = _gImgButtonMgr.getButton(BTN_TAB4);
				btnTemp.setChecked(false);
				btnTemp.enable(true);
			}
			if(sId!=BTN_TAB5 && AcuShowSearch()){
				var btnTemp = _gImgButtonMgr.getButton(BTN_TAB5);
				btnTemp.setChecked(false);
				btnTemp.enable(true);
			}
		}
	}
	
	// onclick event process(because the button lost onclick event)
	if(sId==BTN_EXPAND)
		AcuExpandTocClick();
	else if(sId==BTN_NORMAL)
		AcuSetViewType(VIEW_NORMAL);
	else if(sId==BTN_VIDEO)
		AcuSetViewType(VIEW_VIDEO);
	else if(sId==BTN_SLIDES)
		AcuSetViewType(VIEW_SLIDES);
	else if(sId==BTN_TAB1)
		AcuChangeTocTab(TOC_TAB1);
	else if(sId==BTN_TAB2)
		AcuChangeTocTab(TOC_TAB2);
	else if(sId==BTN_TAB3)
		AcuChangeTocTab(TOC_TAB3);
	else if(sId==BTN_TAB4)
		AcuChangeTocTab(TOC_TAB4);
	else if(sId==BTN_TAB5 && AcuShowSearch())
		AcuChangeTocTab(TOC_TAB5);
		
	return true;
}

function _ImgButtonMouseUp(sId)
{
	var btn = _gImgButtonMgr.getButton(sId);
	if(btn){
		btn.setOver();
	}
	return true;
}

function _ImgButtonMouseOut(sId)
{
	var btn = _gImgButtonMgr.getButton(sId);
	if(btn){
		btn.setNormal();
	}
	return true;
}



////////////////**********************************************/////////////
/* WMP process module
1. marker hit
2. position change
3. script command
4. media change
*/
////////////////**********************************************/////////////
var _gMediaEnd = false;
var _gNeedSetMarker = false;
var _gNeedSetMarkerName = "";
var _gnPlayState = 0;

function AcuStartPlay()
{
	//there is a bug in TOC panel that can not click TOC when start tab at TOC_TAB1
	AcuChangeTocTab(TOC_TAB5);
	AcuChangeTocTab(TOC_TAB1);
	
	if (_gCourseInfo.mHasSLVInfo && AcuSupportSLV()) {
		//alert(_gCourseInfo.mSLVInfo.mType.toLowerCase());
		objSLV.AppType = _gCourseInfo.mSLVInfo.mType;
		objSLV.runPreview("SetBgColor", _gCourseInfo.mSLVInfo.mBgcolor);
		objSLV.runPreview("SetWidth", _gCourseInfo.mSLVInfo.mWidth);
		objSLV.runPreview("SetHeight", _gCourseInfo.mSLVInfo.mHeight);
	}
	
	objWMP.URL = AcuGetPlayListFile();
	if (_gSysInfo.mInitSlideID == "1") {
		if ( !IsIE() ) {
			objWMP.height = objWMP.offsetHeight - 1;
			setTimeout("wmvStartPlay();", 1000);
		} else {
			objWMP.controls.play();
		}
	}
	else {
		//alert(_gSysInfo.mInitSlideID);
		var item = AcuGetTOCBySlideId(_gSysInfo.mInitSlideID);
		if (item != null) {
			_gNeedSetMarker = true;
			_gNeedSetMarkerName = _gSysInfo.mInitSlideID;	
			AcuChangeSlideFromToc(_gSysInfo.mInitSlideID);
			
			objWMP.controls.pause();
			var dPosition = parseFloat(item.mStartTime/1000);
			objWMP.controls.currentPosition = dPosition;
			if ( !IsIE() ) {
				objWMP.height = objWMP.offsetHeight - 1;
				setTimeout("wmvStartPlay();", 1000);
			} else {
				objWMP.controls.play();
			}
			
		} else {
			if ( !IsIE() ) {
				objWMP.height = objWMP.offsetHeight - 1;
				setTimeout("wmvStartPlay();", 1000);
			} else {
				objWMP.controls.play();
			}
		}
	}
}

function wmvStartPlay() {
	objWMP.height = "100%";
	objWMP.URL = AcuGetPlayListFile();
	objWMP.controls.play();
}

function AcuSetMediaEnd(bEnd)
{
	_gMediaEnd = bEnd;
}

function AcuIsMediaEnd()
{
	return _gMediaEnd;
}


function AcuOnMarkerHit(sMarkerName)
{
	if(sMarkerName.length<=0)
		return;
	// if need set marker
	if(_gNeedSetMarker){
		var nMarker = AcuGetMarkerIndex(sMarkerName);
		if(nMarker==1){ // if first marker
			// clear need set marker
			_gNeedSetMarker = false;
			_gNeedSetMarkerName = "";
		} else {
			return;
		}
	}
	AcuChangeCurrentSlide(sMarkerName);	
	AcuChangeSlideFromWMP(sMarkerName, false);	
}

function AcuOnPosChange(oldPosition, newPosition)
{
	var nCurrSlideId, nNewSlideId;
	var nTime = _PosToTime(newPosition) + 500;
	var cs = AcuGetCurrentSlide();
	if(!AcuIsObject(cs)) return;
	
	_gnPlayState = objWMP.playState;
	if (objWMP.playState == 3 && AcuIsLocalPlayback()) {
		objWMP.controls.pause();
	}
	
	// clear need set marker
	_gNeedSetMarker = false;
	_gNeedSetMarkerName = "";
	
	nCurrSlideId = cs.mSlideId;
	nNewSlideId = AcuGetSlideIdByPos(AcuGetCurrentMediaFileId(), nTime);
	
	AcuLog("AcuOnPosChange-> nCurrSlideId=" + nCurrSlideId + ",nNewSlideId=" + nNewSlideId);
	
	AcuChangeCurrentSlide(nNewSlideId);
	AcuChangeSlideFromWMP(nNewSlideId, true);
	// sync actions
	setTimeout("AcuSyncAction(" + nTime + ");" ,500);
}

function AcuSyncAction(nTime)
{	
	var cs = AcuGetCurrentSlide();
	_gCmdProc.runPreview(CMD_CLEARANNOTATION, "");
	var list = cs.getActionsByTime(nTime);
	
	AcuLog("AcuOnPosChange->sync actions: list.length=" + list.length);
	for(var i=0;i<list.length;i++){
		_gCmdProc.runPreview(list[i].mType, list[i].mValue);
	}
	
	if (objWMP.playState == 2 && _gnPlayState != 2 && AcuIsLocalPlayback()) {
		objWMP.controls.play();
	}
}


function AcuOpenFirstSlidePageToc()
{	
	//AcuChangeCurrentSlide(1);
	//AcuChangeSlideFromWMP(1);
	//AcuOnMarkerHit("1");
	AcuOnMarkerHit(_gSysInfo.mInitSlideID);
	AcuHideAllDrag();
}

function AcuChangeSlideFromToc(nSlideId)
{
	AcuLog("AcuChangeSlideFromToc:" + nSlideId);
	
	AcuHighLightTocById(nSlideId);
	if(AcuChangeSlideWmv(nSlideId)){ // change wmv file
		AcuLog("AcuChangeSlideFromToc: need set marker later");
		_gNeedSetMarker = true;
		_gNeedSetMarkerName = nSlideId;	
	} else {// same wmv file
		AcuLog("AcuChangeSlideFromToc: set marker immediately");
		_gNeedSetMarker = false;
		_gNeedSetMarkerName = "";	
		AcuSetMarker(nSlideId);
		if(AcuIsMediaEnd()){
			var item = AcuGetTOCBySlideId(nSlideId);
			if (item != null) {
				var dPosition = parseFloat(item.mStartTime/1000);
				objWMP.controls.currentPosition = dPosition;
			}
			objWMP.controls.play();
			objWMP.controls.pause();
		}
	}
	
	AcuChangeCurrentSlide(nSlideId);
	AcuChangeSlidePage(nSlideId, true);
	
	//alert(objWMP.playState);
	if(objWMP.playState == 2 || objWMP.playState == 10){ // if paused then play the media
		objWMP.controls.play();
	}
}


function AcuOnPlaying()
{	
	// mark media end to false	
	AcuLog("AcuOnPlaying: _gNeedSetMarker=" + _gNeedSetMarker +", _gNeedSetMarkerName=" + _gNeedSetMarkerName);
	//alert("AcuOnPlaying: _gNeedSetMarker=" + _gNeedSetMarker +", _gNeedSetMarkerName=" + _gNeedSetMarkerName);

   	AcuSetMediaEnd(false);
   	if(_gNeedSetMarker){
   		_gNeedSetMarker = false;
   		if(_gNeedSetMarkerName!=null){
   			//alert(_gNeedSetMarkerName);
   			AcuSetMarker(_gNeedSetMarkerName); 
   			_gNeedSetMarkerName = "";
   		}
   	}
}

function AcuChangeSlideFromWMP(nSlideId, bForce)
{	
	AcuLog("AcuChangeSlideFromWMP:" + nSlideId);
	AcuHighLightTocById(nSlideId);
	AcuChangeSlidePage(nSlideId, bForce);
}

function AcuChangeCurrentSlide(nSlideId)
{
	var cs = AcuGetSlide(nSlideId);
	if(cs!=null){
		//AcuLog("AcuChangeCurrentSlide->AcuGetSlide:" +  cs);
		AcuSetCurrentSlide(cs);
		AcuFitCurrentSlide();
		AcuResize();
	}
}

function AcuChangeSlideWmv(nSlideId)
{
	AcuLog("AcuChangeSlideWmv:" + nSlideId);
	var cs = AcuGetSlide(nSlideId);
	if(cs==null) return false;
	return AcuChangeMedia(cs.mMediaFileId);
}

function AcuChangeSlidePage(nSlideId, bForce)
{
	AcuLog("AcuChangeSlidePage:" + nSlideId);
	var cs = AcuGetSlide(nSlideId);
	if(AcuIsObject(cs)){
		AcuOpenSlidePage(cs, bForce);
	}
}

function AcuChangeMedia(sMediaFileId)
{
	AcuLog("AcuChangeMedia:" + sMediaFileId);	
		
	var bRet = false;
	var nIndex = _ParseInt(sMediaFileId) - 1;
	var currList = objWMP.currentPlaylist;
		
	if(nIndex>=0 && nIndex<currList.count){
		var media = currList.item(nIndex);
		if(!objWMP.controls.currentItem.isIdentical(media)){
			AcuLog("AcuChangeMedia: play media file=" + media.name);
			objWMP.controls.playItem(media);
			objWMP.controls.pause();
			bRet = true;
		} else {
			bRet = false;
		}
	}
	return bRet;
}

function AcuSetMarker(sMarkerName)
{
	AcuLog("AcuSetMarker:" + sMarkerName);
	//alert("AcuSetMarker:" + sMarkerName);
	var nMarker = AcuGetMarkerIndex(sMarkerName);
	//alert("nMarker:" + nMarker);
	objWMP.controls.currentMarker = nMarker;
}

function AcuGetMarkerIndex(sMarkerName)
{
	var nRet = 0;
	var media = objWMP.currentMedia;
	if(AcuIsObject(media)){
		var nCount = media.markerCount;
		for(var i=1;i<=nCount;i++){
			var sTemp = media.getMarkerName(i);
			//alert(sTemp);
			if(_IsEqual(sMarkerName,sTemp)){
				nRet = i;
				break;
			}
		}
	}
	//AcuLog("AcuGetMarkerIndex: sMarkerName=" + sMarkerName + "MarkerIndex=" + nRet);
	return nRet;
}

////////////////**********************************************/////////////
/* script command processor module
1. script command processor
*/
////////////////**********************************************/////////////

var _gCurrSlideId = "-1";
function AcuInstallCmdProccessor()
{
	if(AcuSupportSLV()){
		objSLV.AccessFolder = AcuGetBasePath();
		_gCmdProc = new CSLVCmdProcessor();
	} else {
		_gCmdProc = new CCmdProcessor();
	}
}

function AcuRunPreview(sType, sParam)
{
	var bRet = false;
	
	if(_IsEqual(sType, "OPENEVENT") ){
		bRet = false;
	} else {
		var act = AcuGetAction(sType, sParam);
		if(AcuIsObject(act)){
			_gCmdProc.runPreview(sType, act.mValue);
			bRet = true;
		}
	}
	
	return bRet;
}

function AcuOpenSlidePage(cs, bForce)
{
	//AcuLog("AcuOpenSlidePage: nSlideId=" + nSlideId + ",sPath=" + sPath + ",_gCurrSlideId=" + _gCurrSlideId);
	//alert("AcuOpenSlidePage: nSlideId=" + cs.mSlideId + ",sPath=" + cs.mSlidePath + ",_gCurrSlideId=" + _gCurrSlideId);
	if(!bForce && _IsEqual(_gCurrSlideId,cs.mSlideId))
		return;
		
	if(AcuSupportSLV()){
		//AcuLog("AcuOpenSlidePage: open ok");
		var sType = CMD_OPENSLIDE;				
		var sParam = "Path" + SPLIT_VALUE + cs.mSlidePath ;
		//alert(cs.mSlidePath);
		if(cs.mType.length>0){
			var sScale = cs.isScale()?"1":"0";
			sParam += SPLIT_PARAM + "Scale" + SPLIT_VALUE + sScale ;
		}
		_gCmdProc.runPreview(sType, sParam);
	} else {
		//AcuLog("AcuOpenSlidePage: open ok");
		var slidePath;
		if (!IsIE()){
			if(AcuIsLocalPlayback()){
				slidePath = cs.mPreviewHtml;
			} else {
				slidePath = AcuGetBasePath() + cs.mPreviewHtml;
			}
		} else {
			slidePath = AcuGetBasePath() + cs.mSlidePath;
		}
		AcuOpenFramePage(slidePath);
	}
	_gCurrSlideId = cs.mSlideId;
}

function AcuGetAction(sType, sId)
{
	var ret = null;
	var cs = AcuGetCurrentSlide();
	if(AcuIsObject(cs)){
		ret = cs.getAction(sType, sId);
	}
	return ret;
}


function AcuOpenFramePage(sUrl)
{
	objFrmSlides.src = sUrl.replace(/(\\)/g,"/");
}


function AcuOpenNewWin(sUrl)
{
	window.open(sUrl,"");
}


var CMD_OPENSLIDE 		= "OpenSlide";
var CMD_ANNOTATION 		= "Annotation";
var CMD_ERASE 			= "Erase";
var CMD_CURSOR 			= "Cursor";
var CMD_TEXT 			= "Text";
var CMD_CLEARANNOTATION = "ClearAnnotation";
var CMD_CLICKANNOTATION = "ClickAnimation";
var CMD_HYPERLINK 		= "Hyperlink";
var CMD_WHITEBOARD 		= "WhiteBoard";
var CMD_SLIDESCROLL 	= "SlideScroll";
var CMD_CHAT 			= "Chat";
var CMD_POPUPLINK 		= "Popuplink";
var CMD_PAUSE	 		= "Pause";

var SPLIT_PARAM			= "|";
var SPLIT_VALUE			= "@@";

var _gCmdProc;
function CCmdParser(sType, sParam)
{
	this.mType 	= sType;
	this.mParam = sParam;
	
	this.mId	= 0;
	this.mIsPopupLink 	= false;
	this.mHyperlink		= "";
	this.mFrame			= "";
	
	this.mNames = new Array();
	this.mValues= new Array();
	this.addParam 		= function(sName, sValue){
		var nLen = this.mNames.length;
		this.mNames[nLen] 	= sName;
		this.mValues[nLen] 	= sValue;
	}
	
	this.getParamValue	= function(sName){
		var sRet = "";
		var nLen = this.mNames.length;
		for(var i=0;i<nLen;i++){
			if(_IsEqual(this.mNames[i],sName)){
				sRet = this.mValues[i];
				break;
			}
		}
		return sRet;
	}
	this.parseCmd();
}

			
CCmdParser.prototype.parseCmd = function ()
{
	var sParam = this.mParam;
	if(_IsEmpty(sParam))
		return;
		
	var saParam = sParam.split(SPLIT_PARAM);
	for(var i=0; i<saParam.length; i++){
		var sTemp = saParam[i];
		var saValue = sTemp.split(SPLIT_VALUE);
		if(saValue.length==2){
			this.addParam(saValue[0],saValue[1]);
		}
	}
	
	this.mId 		= this.getParamValue("ID");
	this.mHyperlink = this.getParamValue("Url");
	this.mFrame		= this.getParamValue("FM");
	this.mIsPopupLink = _IsEqual(this.mFrame,"_blank");
}

function CCmdProcessor()
{	
}

CCmdProcessor.prototype.runPreview = function (sType, sParam)
{
	//AcuLog("CCmdProcessor->runPreview: sType=" + sType + ", sParam=" + sParam);
	if(_IsEmpty(sType)) return;
	
	var parser = new CCmdParser(sType,sParam);
	if(_IsEqual(sType,CMD_HYPERLINK)){
		if(parser.mIsPopupLink){
			AcuOpenNewWin(parser.mHyperlink);
		} else {
			var sUrl = parser.mHyperlink.toLowerCase();
			if(sUrl.substring(0,14)=="hyperlinkfiles"){
				AcuOpenFramePage( AcuGetBasePath() + parser.mHyperlink);
			} else {
				if(sUrl.substring(0,7)==protocolTypeForJsFile||sUrl.substring(0,8)==protocolTypeForJsFile){
					AcuOpenFramePage(parser.mHyperlink);
				} else {
					AcuOpenFramePage(protocolTypeForJsFile + parser.mHyperlink);
				}
			}			
		}
	} else if(_IsEqual(sType,CMD_POPUPLINK)){
		AcuOpenNewWin(parser.mHyperlink);
	} else if(_IsEqual(sType,CMD_CHAT)){
		AcuAddChat(sParam);
	} else if(_IsEqual(sType,CMD_WHITEBOARD)){
		//AcuOpenFramePage("about:blank");
	} else if(_IsEqual(sType,CMD_PAUSE)){
		objWMP.controls.pause();
	} else if(_IsEqual(sType,CMD_CLICKANNOTATION)){
		if(AcuIsObject(objFrmSlides.document)){
			//AcuLog("CCmdProcessor->runPreview:ClickAnimation->" + objFrmSlides.document.body.nodeName);		
			objFrmSlides.document.body.click();
		}		
	}
}


function CSLVCmdProcessor()
{	
}

CSLVCmdProcessor.prototype.runPreview = function (sType, sParam)
{	
	//AcuLog("CSLVCmdProcessor->runPreview: sType=" + sType + ", sParam=" + sParam);
	if(_IsEmpty(sType)) return; 
	
	if(_IsEqual(sType,CMD_CHAT)){
		AcuAddChat(sParam);
	} else if(_IsEqual(sType,CMD_PAUSE)){
		objWMP.controls.pause();
	} else {
		objSLV.runPreview(sType,sParam);
	}
}


////////////////**********************************************/////////////
/* cache module
1. cache image
2. cache video
*/
////////////////**********************************************/////////////

var TYPE_IMAGE = 1;
var TYPE_VIDEO = 2;
var TYPE_SLIDE = 3;

var TIMEOUT_IMAGE = 30000;
var TIMEOUT_VIDEO = 60000;
var TIMEOUT_TOTAL = 90000;

var _gCacheMgr = new CCacheMgr();
var _gImageCached = false;
var _gVideoCached = false;
var _gCaching 	  = false;

var _gCachedImageCount = 0;
var _gCachedVideoCount = 0;

function AcuAddCacheImage(nId, sFile)
{
	var item = new CCacheItem(nId, TYPE_IMAGE, sFile);
	_gCacheMgr.addImage(item);
}

function AcuAddCacheVideo(nId, sFile)
{
	var item = new CCacheItem(nId, TYPE_VIDEO, sFile);
	_gCacheMgr.addVideo(item);
}

function AcuAddCacheSlide(nId, sFile)
{
	var item = new CCacheItem(nId, TYPE_VIDEO, sFile);
	_gCacheMgr.addSlide(item);
}

function AcuStartCache()
{
	_gImageCached = false;
	_gVideoCached = false;	
	_gCachedCount = 0;
	_gCachedImageCount = 0;
	_gCachedVideoCount = 0
	_gCaching	  = true;
	
	setTimeout("_CacheTimeout();",TIMEOUT_TOTAL);
	_StartCacheImage();
}

function AcuSkipCache()
{
	AcuFinishCacheTimout();
}

function AcuIsCaching()
{
	return _gCaching;
}

function AcuVideoCacheComplete()
{
	AcuLog("AcuVideoCacheComplete:" + _gCachedVideoCount + ",AcuIsCaching()=" + AcuIsCaching());
	if(!AcuIsCaching() || !_gVideoCached) return;
	
	_gCachedVideoCount++;
	SetCacheProgress(_GetCacheProgress());
	
	if(_IsCacheFinished()){
		AcuFinishCacheTimout();
	} else {
		// cache next video
		if(_gCachedVideoCount<_gCacheMgr.mVideos.length){
			wmpCache.URL = AcuGetBasePath() + _gCacheMgr.mVideos[_gCachedVideoCount].mFile;
			//AcuLog("AcuVideoCacheComplete:" + _gCachedVideoCount + ", wmpCache.URL" + wmpCache.URL);
		} else {
			_gVideoCached = false;
			AcuFinishCacheTimout();
		}
		
	}
}

function AcuCheckVideoCacheProgress()
{
	if(AcuIsCaching() && AcuIsObject(wmpCache)){
		if(wmpCache.network.downloadProgress != 100){
			//setTimeout("AcuCheckVideoCacheProgress();", 500);
			setTimeout("AcuCheckVideoCacheProgress();", 50);
		} else {
			AcuVideoCacheComplete();
		}
	}
}

var _gFinishCacheCalled = false;
function AcuFinishCache()
{
	AcuLog("AcuFinishCache");
	if(!_gFinishCacheCalled){
		_gCaching = false;
		_GetObjById("cachePanel").innerHTML = "";
		AcuSwitchToPlay();
		_gFinishCacheCalled = true;
	}
}

function AcuFinishCacheTimout()
{
	AcuLog("AcuFinishCacheTimout");
	if(!_gFinishCacheCalled){
		//setTimeout("AcuFinishCache();",500);
		setTimeout("AcuFinishCache();",50);
	}
}

function _StartCacheImage()
{	
	var sHtml = _gCacheMgr.getCacheImageHtml();
	AcuLog("_StartCacheImage:" + sHtml);
	_gImageCached = true;
	_GetObjById("imgCache").innerHTML = sHtml;
	AcuLog("_StartCacheImage:" + _gCacheMgr.mImages.length);
	if(_gCacheMgr.mImages.length>0){
		setTimeout("_CacheImageTimeout();",TIMEOUT_IMAGE);
	} else {
		_gImageCached = false;
		_StartCacheVideo();
	}
}

function _StartCacheVideo()
{	
	AcuLog("_StartCacheVideo:" + _gCacheMgr.mVideos.length);
	_gVideoCached 	= true;
	
	if(_gCacheMgr.mVideos.length > 0){		
		_GetObjById("wmpCache").URL = AcuGetBasePath() + _gCacheMgr.mVideos[0].mFile;
		setTimeout("_CacheVideoTimeout();",TIMEOUT_IMAGE);
	} else {		
		_gVideoCached = false;
		AcuFinishCacheTimout();
	}	
}

function _OnImageLoad(nIndex)
{
	AcuLog("_OnImageLoad:" + nIndex + ",AcuIsCaching()=" + AcuIsCaching());
	if(!AcuIsCaching() || !_gImageCached) return;
	
	_gCachedImageCount++;
	SetCacheProgress(_GetCacheProgress());
	AcuLog("_OnImageLoad->_IsCacheImageFinished():" + _IsCacheImageFinished());
	if(_IsCacheFinished()){
		AcuFinishCacheTimout();
	} else {
		if(_IsCacheImageFinished()){
			_gImageCached = false;
			_StartCacheVideo();
		}
	}
}

function _CacheImageTimeout()
{
	AcuLog("_CacheImageTimeout:");
	if(!AcuIsCaching() || !_gImageCached) return;
	
	_gCachedImageCount = _gCacheMgr.mImages.length;
	SetCacheProgress(_GetCacheProgress());	
	if(_IsCacheFinished()){
		AcuFinishCacheTimout();
	} else {
		_gImageCached = false;
		_StartCacheVideo();
	}
}

function _CacheVideoTimeout()
{
	AcuLog("_CacheImageTimeout:");
	if(!AcuIsCaching() || !_gVideoCached) return;
	
	_gCachedImageCount = _gCacheMgr.mImages.length + _gCacheMgr.mVideos.length;
	SetCacheProgress(_GetCacheProgress());
	
	AcuFinishCacheTimout();
}

function _CacheTimeout()
{
	AcuLog("_CacheImageTimeout:");
	if(!AcuIsCaching()) return;
	
	_gCachedImageCount = _gCacheMgr.getCount();
	SetCacheProgress(_GetCacheProgress());
	
	AcuFinishCacheTimout();
}

function _IsCacheFinished()
{
	var bRet = false;
	var nCachedCount = _gCachedImageCount + _gCachedVideoCount;
	var nCount = _gCacheMgr.getCount();
	AcuLog("_IsCacheFinished: total(" + nCount + ") current(" + nCachedCount + ")");
	if(nCount>0){
		if(nCachedCount<nCount){
			bRet = false;
		} else {
			bRet = true;
		}			
	} else {
		bRet = true;
	}
	return bRet;
}

function _IsCacheImageFinished()
{
	var bRet = false;
	var nCachedCount = _gCachedImageCount;
	var nCount = _gCacheMgr.mImages.length;
	AcuLog("_IsCacheImageFinished: nCachedCount=" + nCachedCount + ", nCount=" + nCount);
	if(nCount>0){
		if(nCachedCount<nCount){
			bRet = false;
		} else {
			bRet = true;
		}			
	} else {
		bRet = true;
	}
	return bRet;
}

function _IsCacheVideoFinished()
{
	var bRet = false;
	var nCachedCount = _gCachedVideoCount;
	var nCount = _gCacheMgr.mVideos.length;
	AcuLog("_IsCacheVideoFinished: nCachedCount=" + nCachedCount + ", nCount=" + nCount);
	if(nCount>0){
		if(nCachedCount<nCount){
			bRet = false;
		} else {
			bRet = true;
		}			
	} else {
		bRet = true;
	}
	return bRet;
}

function _GetCacheProgress()
{
	var nRet = 0;
	var nCachedCount = _gCachedImageCount + _gCachedVideoCount;
	var nCount = _gCacheMgr.getCount();
	AcuLog("_GetCacheProgress: nCachedCount=" + nCachedCount + ", nCount=" + nCount);
	if(nCount>0){
		if(nCachedCount<nCount){
			var sTemp = "" + (100*nCachedCount)/nCount;
			nRet = sTemp.substring(0,2);
		} else {
			nRet = 100;
		}			
	} else {
		nRet = 100;
	}
	return nRet;
}

// cache info object
function CCacheItem(nId,nType,sFile)
{
	this.mId 	= nId;
	this.mType 	= nType;
	this.mFile 	= sFile;
	this.mbCached = false;	
	this.mTimerId = 0;
}

function CCacheMgr()
{
	this.mCaching = false;
	this.mImages = new Array();
	this.mVideos = new Array();
	this.mSlides = new Array();
	
	this.addImage = function (item){
		this.mImages[this.mImages.length] = item;
	}
	this.addVideo = function (item){
		this.mVideos[this.mVideos.length] = item;
	}
	this.addSlide = function (item){
		this.mSlides[this.mSlides.length] = item;
	}
	
	this.getCount = function (){
		return this.mImages.length+this.mVideos.length;
	}
	
	this.getCacheImageHtml = function(){
		var sRet = "";
		var nLen = this.mImages.length;
		for(var i=0;i<nLen;i++){
			sRet += "<img style='visibility: hidden' src='" + AcuGetBasePath() + this.mImages[i].mFile + "' onload='_OnImageLoad(" + i + ")' width=0 height=0>" + "\n";
		}
		return sRet;
	}
}




////////////////**********************************************/////////////
/* multi language module
*/
////////////////**********************************************/////////////


function CLangMsg(){
	var obj = navigator.userLanguage || navigator.language;	

	this.mBrowserLang = obj.toLowerCase();
	this.mCurrLang	= this.mBrowserLang;
	this.mSelectedLang = "";
	this.mXml		= null;	
	this.mXMLDoc	= null;
	this.mDefaultLang = "";
	this.mCallback	= "";
	this.mLangChangedCallback = "";
	this.mMsgIdArray= new Array();
	this.mMsgArray	= new Array();
}

CLangMsg.prototype.clear = function()
{
	this.mMsgIdArray= new Array();
	this.mMsgArray	= new Array();
}

CLangMsg.prototype.addMsg = function(sId, sValue)
{
	if(!this.hasMsg()){
		this.mMsgIdArray[this.mMsgIdArray.length] = sId;
		this.mMsgArray[this.mMsgArray.length] = sValue;
	}
}

CLangMsg.prototype.getMsg = function(sId)
{
	var sRet = "";
	if(this.mXml){
		sRet = "msg("+sId+")";
		for(var i=0;i<this.mMsgIdArray.length;i++){
			if(sId==this.mMsgIdArray[i]){
				sRet = this.mMsgArray[i];
				break;
			}
		}
	} else {
		sRet = "msg not init:" + sId;
	}
	return sRet;
}

CLangMsg.prototype.hasMsg = function(sId)
{
	var bRet = false;
	for(var i=0;i<this.mMsgIdArray.length;i++){
		if(sId==this.mMsgIdArray[i]){
			bRet = true;
			break;
		}
	}
	return bRet;
}

CLangMsg.prototype.getOptionHtml = function()
{
	var sRet = "";	
	var objXML = _gLangMsg.mXml;
	if(!objXML) return sRet;
	var nodeLang, nodeLangList;
	var sTemp, sValue;
	var sSelectLang = AcuGetCurrentLang();
	nodeLangList = objXML.selectNodes("/AcuLang/Languages/Language");
	
	sRet = "<select id=selectLang name=selectLang onchange='AcuOnSelectLangChange()'>"
	for(var i=0;i<nodeLangList.length;i++){
		nodeLang = nodeLangList[i];
		sTemp = nodeLang.getAttribute("id");
		sValue= nodeLang.getAttribute("value");
		if(sSelectLang == sTemp){
			sRet += "<option value='" + sTemp +  "' selected>" + sValue + "</option>";
		} else {
			sRet += "<option value='" + sTemp +  "'>" + sValue + "</option>";
		}
	}
	sRet += "</select>"
	return sRet;
}
CLangMsg.prototype.getOptionHtmlFF = function()
{
	var sRet = "";
	
	var XMLDoc = _gLangMsg.mXMLDoc;
	if(!XMLDoc) return sRet;
	
	var rootNode = XMLDoc.getElementsByTagName("AcuLang")[0];
	var sSelectLang = AcuGetCurrentLang();
	
	var langsNode = rootNode.getElementsByTagName("Languages")[0];
	var langNode = langsNode.getElementsByTagName("Language");
	sRet = "<select id=selectLang name=selectLang onchange='AcuOnSelectLangChangeFF()'>";
	for (var i = 0; i < langNode.length; i++)
	{
		if(sSelectLang == langNode[i].getAttribute("id")){
			sRet += "<option value='" + langNode[i].getAttribute("id") +  "' selected>" + langNode[i].getAttribute("value") + "</option>";
		} else {
			sRet += "<option value='" + langNode[i].getAttribute("id") +  "'>" + langNode[i].getAttribute("value") + "</option>";
		}
	}
	sRet += "</select>"
	
	return sRet;
}
CLangMsg.prototype.setCurrentLang = function(sLang)
{
	var objXML = this.mXml;
	if(!objXML) return;
	
	var nodeLang, nodeMsg;
	var nodeLangList, nodeMsgList;
	var selectLang = "";
	var sTemp;
	
	
	nodeLang = objXML.selectSingleNode("/AcuLang/Languages/Language[@id=\"" + sLang + "\"]");
	if(nodeLang){
		nodeLang = objXML.selectSingleNode("/AcuLang/LangMsg[@Id=\"" + sLang + "\"]");
		if(nodeLang){
			selectLang = sLang;
		}
	}
	
	if(selectLang.length<=0){
		selectLang = this.mDefaultLang;
	}
	
	//alert(sLang + " selected:" + selectLang);
	this.mCurrLang	= selectLang;
	nodeLang = objXML.selectSingleNode("/AcuLang/LangMsg[@Id=\"" + selectLang + "\"]");
	if(nodeLang){
		nodeMsgList = nodeLang.selectNodes("Msg");
		_gLangMsg.clear();
		for(var i=0;i<nodeMsgList.length;i++){
			nodeMsg = nodeMsgList[i];
			_gLangMsg.addMsg(nodeMsg.getAttribute("Id"), nodeMsg.nodeTypedValue);
		}
	}
}
CLangMsg.prototype.setCurrentLangFF = function(sLang)
{
	var XMLDoc = this.mXMLDoc;
	if(!XMLDoc) return;
	
	AcuLog("Enter CLangMsg.setCurrentLang");
	var rootNode = XMLDoc.getElementsByTagName("AcuLang")[0];
	var selectLang = "";
	
	var langsNode = rootNode.getElementsByTagName("Languages")[0];
	var langNode = langsNode.getElementsByTagName("Language");
	for (var i = 0; i < langNode.length; i++)
	{
		if (langNode[i].getAttribute("id") == sLang)
		{
			var langmsgNode = rootNode.getElementsByTagName("LangMsg");
			for (var j = 0; j < langmsgNode.length; j++)
			{
				if (langmsgNode[j].getAttribute("Id") == sLang)
				{
					selectLang = sLang;
					
					//if found then quit the inner loop
					break;
				}
			}
			
			//if found then quit the outer loop
			break;
		}
	}
	
	if(selectLang.length<=0){
		selectLang = this.mDefaultLang;
	}
	
	AcuLog("wanted lang:" + sLang + " selected:" + selectLang);
	this.clear();
	this.mCurrLang	= selectLang;
	var langmsgNode = rootNode.getElementsByTagName("LangMsg");
	AcuLog(langmsgNode.length);
	for (var i = 0; i < langmsgNode.length; i++)
	{
		//searh the message nodes for the selected language
		if (langmsgNode[i].getAttribute("Id") == selectLang)
		{
			//add message to message array using a loop
			var msgNode = langmsgNode[i].getElementsByTagName("Msg");
			AcuLog("msgNode.length" + msgNode.length);
			for (var j = 0; j < msgNode.length; j++)
			{
				if (msgNode[j].firstChild) {
					var sMsg = msgNode[j].firstChild.nodeValue;
					if (sMsg.length > 0) {
						_gLangMsg.addMsg(msgNode[j].getAttribute("Id"), sMsg);	
					}
				}
			}
			
			//if found then quit the outer loop
			break;
		}
	}
	
	AcuLog("language message loaded");
	//return true;
	//AcuLog("language message array length:" + _gLangMsg.mMsgArray.length);
}
	
var _gLangMsg;

function AcuSetLangChangedCallback(s1)
{
	_gLangMsg.mLangChangedCallback = s1;
}

function AcuGetSelectedLang()
{
	return _gLangMsg.mSelectedLang;
}

function AcuLangChangeUI(doc)
{
	//replace span tag
	var tagArray = new Array("span","td","div","p","input","img","option");
	var tagName;
	var list, item;
	for(var i=0;i<tagArray.length;i++){
		tagName = tagArray[i];
		list = doc.getElementsByTagName(tagName);
		if(list && list.length){
			for(var j=0;j<list.length;j++){
				item = list[j];				
				if(item.getAttribute("autoLang")=="1"){					
					if(item.getAttribute("langId") && item.getAttribute("langId")!="undefined"){
						if(item.type + "".toLowerCase() == "button" || item.type + "".toLowerCase() == "submit") {
							item.value = AcuGetMsg(item.getAttribute("langId"));
						} else {
							eval(processMultiBrowser('item.innerText = AcuGetMsg(item.getAttribute("langId"))'));
						}						
					}
					if(item.getAttribute("titleId") && item.getAttribute("titleId")!="undefined"){
						item.title = AcuGetMsg(item.getAttribute("titleId"));
					}
				}
			}
		}
	}
}

function AcuSetDefaultLang()
{
	var objXML = _gLangMsg.mXml;
	if(!objXML) return;	
	
	var nodeLang;
	var selectLang = "";
	
	nodeLang = objXML.selectSingleNode("/AcuLang/Languages");
	_gLangMsg.mDefaultLang = nodeLang.getAttribute("Default");
	
	nodeLang = objXML.selectSingleNode("/AcuLang/Locations/L[@Id=\"" + _gLangMsg.mBrowserLang + "\"]");
	if(nodeLang){
		selectLang = nodeLang.getAttribute("LId");
	}
		
	if(selectLang.length<=0){
		selectLang = _gLangMsg.mDefaultLang;
	}
	_gLangMsg.mCurrLang	= selectLang;	
	_gLangMsg.mSelectedLang = selectLang;
		
	return AcuSetCurrentLang(selectLang);
}
function AcuSetDefaultLangFF()
{	
	var XMLDoc = _gLangMsg.mXMLDoc;
	if(!XMLDoc) {
		AcuLog("XMLDoc is not xml document");
		return;
	}
	
	var rootNode = XMLDoc.getElementsByTagName("AcuLang")[0];
	var langNode = rootNode.getElementsByTagName("Languages")[0];
	var selectLang = "";
	_gLangMsg.mDefaultLang = langNode.getAttribute("Default");
	var locationNode = rootNode.getElementsByTagName("Locations")[0];
	var LNode = locationNode.getElementsByTagName("L");
	for (var i = 0; i < LNode.length; i++)
	{
		if (LNode[i].getAttribute("Id") == _gLangMsg.mBrowserLang)
		{
			selectLang = LNode[i].getAttribute("LId");	
		}
	}
		
	if(selectLang.length<=0){
		selectLang = _gLangMsg.mDefaultLang;
	}
	_gLangMsg.mCurrLang	= selectLang;	
	_gLangMsg.mSelectedLang = selectLang;	
		
	AcuSetCurrentLangFF(selectLang);	
}

function AcuGetDefaultLang()
{
	return _gLangMsg.mDefaultLang;
}

function AcuSetCurrentLang(sLang)
{
	return _gLangMsg.setCurrentLang(sLang);
}
function AcuSetCurrentLangFF(sLang)
{
	return _gLangMsg.setCurrentLangFF(sLang);
}

function AcuGetCurrentLang()
{
	return _gLangMsg.mCurrLang;
}

function AcuGetMsg(sId)
{
	return _gLangMsg.getMsg(sId);
}

function AcuLoadLangMsg(sUrl,sCallback)
{
	_gLangMsg = new CLangMsg();
	var objXML;
	
	if (window.XMLHttpRequest && !IsIE()){
		objXML = new XMLHttpRequest();
		_gLangMsg.mXml = objXML;		
   	_gLangMsg.mCallback = sCallback + "FF";
		objXML.onreadystatechange = AcuOnLangMsgLoadStatusChangeFF;
		if ( !AcuIsLocalPlayback() ) {
			objXML.open("GET",_gSysInfo.getBasePathFF()+sUrl, true);		
		} else {
			objXML.open("GET",sUrl, true);		
		}
		objXML.send(null);
			
	} else if (window.ActiveXObject){		
		objXML = new ActiveXObject("Microsoft.XMLDOM");
		objXML.resolveExternals = false;
	  _gLangMsg.mXml = objXML; 
	  _gLangMsg.mCallback = sCallback;
		objXML.onreadystatechange = AcuOnLangMsgLoadStatusChange
		objXML.async = true;
		objXML.load(sUrl);		
	}
	
}

function AcuOnLangMsgLoadStatusChange()
{
	var objXML = _gLangMsg.mXml;
	if (objXML.readyState == 4) {
		var sCallback = _gLangMsg.mCallback;		
		if (objXML.parseError.errorCode != 0){
			sCallback = sCallback + "(false)";
		} else {
			sCallback = sCallback + "(true)";			
		}
		// exe callback function
		eval(sCallback);
	}
}
function AcuOnLangMsgLoadStatusChangeFF()
{
	var objXML = _gLangMsg.mXml; 	

	if (objXML.readyState == 4) {
		var sCallback = _gLangMsg.mCallback;
		if (objXML.status == 200 || objXML.status == 0){
			_gLangMsg.mXMLDoc = objXML.responseXML;
			sCallback = sCallback + "(true)";
		} else {
			sCallback = sCallback + "(false)";
		}
		eval(sCallback);
	}
}
function AcuCreatOptionList()
{
	var panelSelect = _GetObjById("selectLangPanel");
	if(panelSelect){
		panelSelect.innerHTML = _gLangMsg.getOptionHtml();
	}
}
function AcuCreatOptionListFF()
{
	var panelSelect = _GetObjById("selectLangPanel");
	if(panelSelect){
		panelSelect.innerHTML = _gLangMsg.getOptionHtmlFF();
	}
}

function AcuOnSelectLangChange()
{	
	_gLangMsg.mSelectedLang = _GetObjById("selectLang").value;
	AcuSetCurrentLang(_gLangMsg.mSelectedLang);
	AcuLangChangeUI(document);
	AcuLangChangeUI(window.frames["panelSlidesInfo"].document);
	// exe callback function
	var sCallback = _gLangMsg.mLangChangedCallback;	
	if(sCallback.length>0){
		sCallback = sCallback + "('" + _gLangMsg.mSelectedLang + "')";
		eval(sCallback);
	}	
}
function AcuOnSelectLangChangeFF()
{	
	_gLangMsg.mSelectedLang = _GetObjById("selectLang").value;
	AcuSetCurrentLangFF(_gLangMsg.mSelectedLang);	
	AcuLangChangeUI(document);
	AcuLangChangeUI(window.frames["panelSlidesInfo"].document);
	// exe callback function
	var sCallback = _gLangMsg.mLangChangedCallback;	
	if(sCallback.length>0){
		sCallback = sCallback + "('" + _gLangMsg.mSelectedLang + "')";
		eval(sCallback);
	}	
}

////////////////**********************************************/////////////
/* SLV event module
*/
////////////////**********************************************/////////////
var InternalNavNone = 0;
var InternalNavPrevios = 1;
var InternalNavNext = 2;
var InternalNavFirst = 3;
var InternalNavLast = 4;
var InternalNavFile = 5;
var InternalNavSldViewed = 6;

function OnSLVInternalNavigate(nType, sFileName)
{
	var sId = "";
	switch(parseInt(nType)){
		case InternalNavPrevios:
			sId = AcuGetPrevSlideId();
			break;
		case InternalNavNext:
			sId = AcuGetNextSlideId();
			break;
		case InternalNavFirst:
			sId = AcuGetFirstSlideId();
			break;
		case InternalNavLast:
			sId = AcuGetLastSlideId();
			break;
		case InternalNavFile:
			sId = AcuGetSlideIdByFileName(sFileName);
			break;
		case InternalNavSldViewed:
			sId = AcuGetLastViewedSlideId();
			break;
	}
	if(sId.length>0){
		AcuLog("OnSLVInternalNavigate: find the slide: " + sId);
		AcuOnTocClick(sId);
	}
}

// Generate object by javascript
// add by Haitao Xu
// 2006.09.19
function CJSObject() {
	this.mAttrName = new Array();
	this.mAttrValue = new Array();
	this.mAttrNameNoValue = new Array();
	this.mParamName = new Array();
	this.mParamValue = new Array();
	this.SetAttr = function(sAttrName, sAttrValue) {
		this.mAttrName[this.mAttrName.length] = sAttrName;
		this.mAttrValue[this.mAttrValue.length] = sAttrValue;
	}
	this.SetAttrNoValue = function(sAttrName) {
		this.mAttrNameNoValue[this.mAttrNameNoValue.length] = sAttrName;
	}
	this.SetParam = function(sParamName, sParamValue) {
		this.mParamName[this.mParamName.length] = sParamName;
		this.mParamValue[this.mParamValue.length] = sParamValue;
	}
	this.GetObjectHTML = function() {
		var sRet = "";
		
		sRet += "<";
		sRet += "ob";
		sRet += "je";
		sRet += "ct";
		for (var i = 0; i < this.mAttrName.length; i++) {
			sRet += " " + this.mAttrName[i] + "=\"" + this.mAttrValue[i] + "\"";
		}
		for (var i = 0; i < this.mAttrNameNoValue.length; i++) {
			sRet += " " + this.mAttrNameNoValue[i];
		}
		sRet += "\">\r\n";
		for (var i = 0; i < this.mParamName.length; i++) {
			sRet += "\t<";
			sRet += "pa";
			sRet += "ram";
			sRet += " name=\"" + this.mParamName[i];
			sRet += "\" value=\"" + this.mParamValue[i];
			sRet += "\">\r\n";
		}
		sRet += "</";
		sRet += "obj";
		sRet += "e";
		sRet += "ct";
		sRet += ">\r\n";
		
		return sRet;				
	}
}
