var PlayerObj;

var videoplayerIntervalId;
var initFlashComInterval;
var PlayerRetryCount = 0;
var timerIntervalId = 0;


var arrFlashParams = new Array();

function WindowOnloadInitFlashObject()
{  
    
    try{
        var PlaceholderObj = document.getElementById('flashObjPlaceHolder')
        WriteFlashPlayer(PlaceholderObj, flashId, flashWidth, flashHeight, arrFlashParams);
        PlayerObj =  document.getElementById(videoId);
        videoplayerIntervalId = setInterval('initPlayerObj()',100);                   
        initFlashComInterval = setInterval('initFlashCommunikation()',500);    
    }
    catch(e){}  
} 

//////////////////
// OnPageLoader //
//////////////////
try{
    addLoadEvent(WindowOnloadInitFlashObject);
}
catch(e)
{}

function initPlayerObj(){    
    if(PlayerObj!=document.getElementById(videoId)){                
        PlayerObj = document.getElementById(videoId);
    }else{
        
        clearInterval(videoplayerIntervalId);
    }    
    PlayerRetryCount++;
    if (PlayerRetryCount>100){
        clearInterval(videoplayerIntervalId);
    }   
}

function initFlashCommunikation(){
    clearInterval(initFlashComInterval);
    
    // FLASH FORM HACK
    // alert(document.forms);
    window.myFlash = document.forms[0].myFlash; 
}

function addFlashParam(paramName, value){    
    var obj = new Object();
    obj.paramname = paramName;
    obj.paramvalue = value;
    arrFlashParams.push(obj);
}

function WriteFlashPlayer(PlaceholderObj, id, width, height, params)
{

    var HtmlString = '';
    HtmlString +=   '<object id="'+id+'" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,0,0"' +
                    'width="'+ width +'" height="'+ height +'" align="middle" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" name="'+ id +'">';
         
    var embedStr = '';   
    for (var i=0; i<params.length; i++)
    {
         HtmlString +=   '<PARAM NAME="'+ params[i].paramname +'" VALUE="'+ params[i].paramvalue +'">';      
         embedStr += params[i].paramname + "=\"" + params[i].paramvalue + "\" ";
//         alert(params[i].paramname + '#' + params[i].paramvalue);
    }
	                    
    HtmlString +=   '<embed ' + embedStr + 'width="320" height="100%" name="dynamic_height_browser" align="middle"' +
                    'type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" />' +    
                    
                    '</OBJECT>';
                    
    PlaceholderObj.innerHTML = HtmlString;
}

///////////////////////////////////
// Funktion som kaldes fra flash //
///////////////////////////////////
function doPlay(args){    
    var param;
	param = args.split(";");				
	flashEDL = new Array();			
	PlayEDL('0', 1, param[0], param[1], unescape(param[2]));	    
}	

function SwapVideo(args){

  

    if (timerIntervalId == 0){
        timerIntervalId = setInterval("UpdateTime()",100);
    }
	      
    var param;
	param = args.split(";");			   		    
	PlayUrl(unescape(param[0]),0)
}



function PlayUrl(Url,counter)
{
    if(PlayerObj)
    {
        PlayerObj.Url = Url
    }
    else
    {
        if(counter<20)
        {
            counter +=1 
            setTimeout('PlayUrl(\''+Url+'\','+counter+')',300)
        }
        else
        {
            alert('PLAYuRL eRROR')
        }
    }
}

function doAlert(args){	
    alert(args);        
}

function PlayAll(args){	
    preparePlayAll(args);       
}

function doPause(args){	
   Pause();   
   PlayerObj.controls.currentPosition = (parseFloat(args)/25);    
}

function doStepFrameFF(args){    
  frameStepFF(args);   
}

function doStepFrameREW(args){	
  frameStepREW(args);   
}

function doFastRewind(args){	
  Pause();
  FastReverse();   
}

function doFastForward(args){	
  Pause();
  FastForward();   
}

// Denne funktion opdaterer tidskoden inde i flash filen
function UpdateTime(){																			
    var _state = PlayerObj.PlayState;	
    if (_state == 2 || _state == 1 ||_state == 0 || _state == 3)
    {    
	    document.myFlash.SetVariable("video_ctrl_mc.varTimer", SecToMMSSFF(PlayerObj.controls.currentPosition));	
    }	
}

// Send video skift til flash. Send det som en xml streng.
function changeVideo(_title,_assetid,_filename)
{
    //alert(_assetid + " - " + _filename);
    
    if(videoBasePath+''=='undefined')
    {
        videoBasePath = top.videoBasePath
        //videoBasePath = 'http://localhost/grundfos/mediabank/DownloadFile.dwn?usesaveas=false&filename=';
    }
    _title = unescape(_title);
    if (_filename==""){
	    _filename="assetstream.aspx?assetid="+_assetid+"&ident=5&assettype=1";
    }else{
	    _filename = unescape(videoBasePath + _filename);    
	}
    var strXml = "";
    strXml += "<?xml version='1.0' encoding='ISO-8859-1' ?>";
    strXml += "<video>";
    strXml += " <title><![CDATA["+_title+"]]></title>";
    strXml += " <assetid>"+ _assetid +"</assetid>";
    strXml += " <filename><![CDATA["+_filename+"]]></filename>";	
    strXml += "</video>";
    currentpath = _filename;    
    var counter = 0;
   // ObjFlash = setFlashObj();
        setFlashObj(0,strXml)
}
var ObjFlash = null;
function setFlashObj(counter,strXml)
{
    ObjFlash  = document.getElementById('myFlash')
    if(ObjFlash)
    {
        //alert(ObjFlash)
        ObjFlash.setVideo(strXml);
    }
    else
    {
        if(counter>20)
        {
            counter +=1
            setTimeout('setFlashObj('+counter+',strXml)',300);
        }
    }
}

//////////////////////////
var ObjID;
var flashEDL = new Array()

function preparePlayAll(edl)
{
	arrAll = edl.split(";");
	
	arrIn = arrAll[0].split(",");
	arrOut = arrAll[1].split(",");
	arrSource = arrAll[2].split(",");

	// flashEDL = new Array();
	for (i=0;i<arrIn.length;i++)
	{
		flashEDL.push([arrIn[i],arrOut[i],unescape(arrSource[i])]);
	}	
	playNextinEDL();	
}

function playNextinEDL()
{	
	inCut = flashEDL[0][0];
	outCut = flashEDL[0][1];
	videoSource = flashEDL[0][2];
	
	PlayEDL('0',0, inCut, outCut, videoSource);
	flashEDL.shift();
}

function FastForward ()
{	
	PlayerObj.controls.currentPosition = PlayerObj.controls.currentPosition + parseFloat("0.2");
	updateTimeInFlash();
}

function FastReverse()
{
	PlayerObj.controls.currentPosition = PlayerObj.controls.currentPosition - parseFloat("0.2");
	updateTimeInFlash();
}

function updateTimeInFlash(){	
	document.myFlash.SetVariable("video_ctrl_mc.varTimer", SecToMMSSFF(PlayerObj.controls.currentPosition));
}

function Pause()
{
	if (PlayerObj.PlayState == 3)
	{
		PlayerObj.controls.pause();
	}
}

function checkVideoLoaded(Initiated, SingleShot, inCut, outCut, vSource)
{
	if (PlayerObj.PlayState == 3)
	{		
		clearInterval(ObjID);		
		PlayEDL(Initiated, SingleShot, inCut, outCut, vSource);		
	}	

}

function checkVideoLoadedStill(Initiated, SingleShot, inCut, outCut, vSource)
{
	if (PlayerObj.PlayState == 3)
	{		
		clearInterval(ObjID);
		PlayStill(Initiated, SingleShot, inCut, outCut, vSource);		
	}	

}

function PlayEDL(Initiated, SingleShot, inCut, outCut, vSource)
{	
	var strIN, IN, OUT, strAlert;	
	vSource = unescape(vSource);
		
	// Video source Check
	if (PlayerObj.URL.indexOf(vSource) == -1)
	{	
		clearInterval(ObjID);
		PlayerObj.URL = vSource;		
		ObjID = setInterval("checkVideoLoaded('0',"+SingleShot+",'" +inCut+ "','" +outCut+ "','" + escape(vSource) + "')",50);
		return(false);
	}
	
	IN = parseFloat(MMSSFFToFrames(inCut)/25);
	OUT = parseFloat(MMSSFFToFrames(outCut)/25);
			
	CurPos = parseFloat(PlayerObj.controls.currentPosition);
	
	//if no data is given
	if ((IN >= OUT) || (IN < 0) || (OUT == '') || (isNaN(IN)) || (isNaN(OUT))) 
	{
		clearInterval(ObjID);
		return(false);
	}
	
	if (Initiated == '0') {
		clearInterval(ObjID);
		if (IN > 0) {
			strIN = IN.toString();
			strIN = strIN.replace(".",",");
		} else {strIN = '0';}		

		PlayerObj.controls.currentPosition = strIN;
		CurPos = IN;
		PlayerObj.controls.play();
		ObjID = setInterval("PlayEDL('1'," + SingleShot + ",'" +inCut+ "','" +outCut+ "','" + escape(vSource) + "')",50);
	};

	if (CurPos >= OUT) 
	{
	
		// sæt pos til den eksatte out pos
		if (OUT > 0) {
			strOUT = OUT.toString();
			strOUT = strOUT.replace(".",",");
		} else {strOUT = '0';}
		PlayerObj.controls.currentPosition = strOUT;		
	
		Pause();		
		clearInterval(ObjID);
				
		if ((flashEDL.length > 0) && (SingleShot == 0))
		{
			playNextinEDL();
		} else {			
			return(false);
		}		
		
	} else
	{		
		return (false);
	}	
}

function PlayStill(Initiated, SingleShot, inCut, outCut, vSource)
{	
	var strIN, IN, OUT, strAlert;	
	vSource = unescape(vSource);	
	
	// Video source Check
	if (PlayerObj.URL.indexOf(vSource) == -1)
	{	
	    clearInterval(ObjID);
		PlayerObj.URL = vSource;		
		ObjID = setInterval("checkVideoLoadedStill('0',"+SingleShot+",'" +inCut+ "','" +outCut+ "','" + escape(vSource) + "')",50);
		return(false);
	}	
	IN = parseFloat(MMSSFFToFrames(inCut)/25);	
	
	clearInterval(ObjID);
	if (IN > 0) {
		strIN = IN.toString();
		strIN = strIN.replace(".",",");
	} else {strIN = '0';}		

	PlayerObj.controls.currentPosition = strIN;
	updateTimeInFlash();	
	return (false);	
}

function SecToMMSSFF(SecIn)
{
	var HH,MM,SS,FF;
	if (SecIn > 0) 
	{
		HH = Math.floor(SecIn/3600);
		MM = Math.floor((SecIn - HH*3600)/60);
		SS = Math.floor((SecIn - HH*3600)-(MM*60));
		FF = Math.round((SecIn - MM*60 - HH*3600 - SS)/0.04);
		if (FF > 24) { FF = 0;SS+=1;}
		
	} else
	{
		HH=0;MM=0;SS=0;FF=0;
	}
	if (HH < 10) { HH = '0' + HH;}
	if (MM < 10) { MM = '0' + MM;}
	if (SS < 10) { SS = '0' + SS;}
	if (FF < 10) { FF = '0' + FF;}
	return (HH+':'+MM+':'+SS+':'+FF);
}

function MMSSFFToFrames(strTimeCode)
{	
	var intFrames = 0;
	var arrTime;
	arrTime = strTimeCode.split(":");
	intFrames = parseFloat(arrTime)  * 90000;
	intFrames = parseFloat(intFrames) + (parseFloat(arrTime[1]) * 1500);
	intFrames = intFrames + (parseFloat(arrTime[2]) * 25);
	intFrames = intFrames + parseFloat(arrTime[3]);
	return intFrames;	
}

function frameStepFF(stepTime){
	Pause();
	PlayerObj.controls.currentPosition = PlayerObj.controls.currentPosition + parseFloat(stepTime);
	updateTimeInFlash();	
}

function frameStepREW(stepTime){
	Pause();
	PlayerObj.controls.currentPosition = PlayerObj.controls.currentPosition - stepTime;
	updateTimeInFlash();	
}