// JavaScript Document



// UI Main Objects

var mediaPlaying = false;
var currentSpeaker = null;
var trackInterval = null;
var relPos = 0;
var innerPos = 0;
function ajaxLog(message){
	//alert('logging to server');
	if((message) && (message !="undefined"))
	agent.call('_ajax.php','alog',null,message);
	else return(true);
	}
function Presentations(){
	this.Open = function(){
		if(this.Count()>=arguments[0] && arguments[0]>0){
			this.GetItem(arguments[0]);
			this.Current().Open();
			
			}
			else return(false);
		}
	this.UserOpen = function(){
		if((PresentationList.Current().getProperty('status')==4 )|| (Webcast.getProperty('status')>2)){
			this.Open(arguments[0]);
			}
		else return(false);
		}
	this.OpenNext = function(){
		if(this.getPointer()<(this.Count()-1)){
			this.Next();
			//alert('setting presentation to next?');
			this.Current().Open();
			}
		else return(false);
		}
	this.OpenPrevious = function(){
			if(this.getPointer()>0){
				this.Previous();
				this.Current().Open();
			}
		else return(false);

		}
	}
Presentations.prototype = new ObjectList();
var PresentationList = new Presentations();
var Events = new ObjectList();
var Webcast = new Item();
	/*Webcast.setProperty('width',320);
	Webcast.setProperty('height',240);
*/
function UI(){
	this.init = initUI;

	function initUI(){
		this.setProperty('currentspeakerinfofield','speakertitleField');
		/*this.setProperty('',null);
		this.setProperty('',null);
		this.setProperty('',null);
		this.setProperty('',null);
		*/
		}
}
UI.prototype = new Item();

var UI = new UI();
	UI.init();

function ErrorHandler(){
	this.listLength = null;
	this.autoprint = false;
	this.ajaxlogger = function(message){
	if((message) && (message !="undefined"))
	agent.call('_ajax.php','alog',null,message);
	else return(true);
	}
	this.Add = function(){
		var newItem = this.Insert();
		newItem.setProperty('message',arguments[0]);
		if(this.autoprint) this.Print();
	
		if(arguments[1] && arguments[1]>3 ) this.ajaxlogger(arguments[0] + ' - Error severity:'+arguments[1]);
		}
	this.Print = function(){
		if(this.target && this.Count())
		addTD(this.target,this.Current().getProperty('message'),'BEGINNING');
		if(this.listLength != null)
		this.Trim(this.listLength);
		}
	this.PrintAll = function(){
		this.First();
		if(!this.isEmpty())
			do{
				this.Print();
				}while(this.Next());
		}
	this.Trim = function(){
		trimTable(this.target,arguments[0]);
		}
	}
ErrorHandler.prototype = new ObjectList();
statusmessages = new ErrorHandler();
statusmessages.target = 'statusmessagetable';
statusmessages.listLength = 10;
statusmessages.autoprint = true;
	
var errors = new ErrorHandler();
errors.target = 'errortable';
errors.autoprint = true;

function SlideControl(){
	this.enlargeSlide = enlargeSlide;
	this.preloadImage = new Image();
	this.slides 	= new ObjectList();
	this.init 		= initSlideControl;
	this.setSlide 	= setSlide;
	this.getSlide 	= getSlide;
	this.checkForChange = checkForChange;
	this.Change 	= change;
	this.Hide 		= hide;
	this.Show 		= show;
	this.SetOpacity = setOpacity;	
	this.Next 		= getNextSlide;
	this.Previous 	= getPreviousSlide;
	this.NextSlide  = openNextSlide;
	this.PreviousSlide = openPreviousSlide;
	this.Open 			= openSlideSet;
	this.OpenCurrent	= OpenCurrentSlide;
	this.setHTMLContent = setHTMLSlide;
	//this.displayHTMLSlide = openHTMLSlide;
	//this.displayImageSlide = openImage;
	function enlargeSlide(){
		window.open(baseURL+'viewpicture.php?pid='+PresentationList.Current().getProperty('slides').Current().getProperty('id'), 'Enlargement','status=no,location=no,menubar=no,toolbar=no,scrollbars=yes,resizable=no');
		}
	function checkForChange(n){
		var found=-1;
		var newtime = parseInt(n);
		newtime = parseInt(newtime*10);
		var sc = PresentationList.Current().getProperty('slidechanges');
		if(!sc.IsEmpty()){
			sc.First();
			do	{
				if(newtime >=parseInt(sc.Current().getProperty('time'))) found = sc.Current().getProperty('number');
				//statusmessages.Add('comparing '+sc.Current().getProperty('time')+' to '+newtime+'('+n+')');
				}while(sc.Next());
			}
			else statusmessages.Add('No slide changes set for current presentation');
		if(found >0)  this.setSlide(found);
		}	
	function change(){
		jobqueue.addJob('SlideControl.Hide()',true,20,50);
		jobqueue.addJob('SlideControl.OpenCurrent()',true,1);
		jobqueue.addJob('SlideControl.Show()',true,20,50);	
		}
	function openNextSlide(){
		if(this.Next())
		this.Change();
		}
	function setSlide(slide){
		if(this.getSlide(slide))
			this.Change();
	//	else statusmessages.Add('getSlide returned false for slide ' + slide + ' - slide already set');
		}
	function openPreviousSlide(){
		if(this.Previous())
			this.Change();
		}	

	function initSlideControl(){
		this.setProperty('visibility','hidden');
		this.setProperty('opacity',100);
		this.setProperty('stepping',10);
		this.setProperty('imageobjectID','imageField');
		this.setProperty('slideHTMLcontainerID','slideHTMLcontainer');
		this.setProperty('objectID',this.getProperty('imageobjectID'));
		this.setProperty('slidetextContainer','slidetextcontainer');
		this.setProperty('slidenumberContainer','slidenumbercontainer');
		if(!PresentationList.IsEmpty())	{
			if(Webcast.getProperty('currentslide')<PresentationList.Current().getProperty('slides').Count())
				this.setSlide(Webcast.getProperty('currentslide'));
			else this.OpenCurrent();
			this.setSlide(Webcast.getProperty('currentslide'));
			//statusmessages.Add('setting slide '+Webcast.getProperty('currentslide'));
			}
		else statusmessages.Add('no presentations found',4);
		if(Webcast.getProperty('status')<4){
			//hide slide controls
			if(getElement('slideControlsNext')) getElement('slideControlsNext').style.display='none';
			if(getElement('slideControlsPrevious')) getElement('slideControlsPrevious').style.display='none';
			}
		}
	function getSlide(snumber){
		var currentSlideSet = PresentationList.Current().getProperty('slides');
		if(!currentSlideSet.IsEmpty()){
			if(PresentationList.getPointer() != this.getProperty('currentPresentation')){
				statusmessages.Add('Slidecontrol notice - Presentation has changed');
				this.setProperty('currentPresentation',PresentationList.getPointer());
				return(currentSlideSet.GetItem(snumber));
				}
			if(snumber == parseInt(currentSlideSet.getPointer())+1){
				return(false);
				}
			else return(currentSlideSet.GetItem(snumber));
			}
		else{
			currentSlideSet.getSlideList();
			return(false);		
			}
		}
		
	function getNextSlide(){	
		var currentSlideSet = PresentationList.Current().getProperty('slides');
		if(!currentSlideSet.IsEmpty()){
			if(currentSlideSet.getPointer() < currentSlideSet.Count()-1){
				return(currentSlideSet.Next());
			}
			else return(false);
		}
		else return(false);
		}
	
	function getPreviousSlide(){
		var currentSlideSet = PresentationList.Current().getProperty('slides');
		if(!currentSlideSet.IsEmpty()){
			if(currentSlideSet.getPointer() > 0){
				return(currentSlideSet.Previous());	
			}
			else return(false);
		}
		else return(false);
		}
	
	function OpenCurrentSlide(){
		var slideList = PresentationList.Current().getProperty('slides');
		statusmessages.Add('Opening slide '+ parseInt(slideList.getPointer()+1)+' / '+slideList.Count());
		if(PresentationList.Current().getProperty('slidechanges').IsEmpty()) PresentationList.Current().getSlideChanges();
		if(slideList.Count()>0){

			/*Change Slide*/
			var Slide = slideList.Current();
			var slideImageElement 	= this.getProperty('imageobjectID'); 
			var slideHTMLElement 	= this.getProperty('slideHTMLcontainerID');
		//	alert(Slide.getProperty('type'));
			if(Slide.getProperty('type') == 'image'){
				this.setProperty('objectID',this.getProperty('imageobjectID'));
				//Hide HTML if necessary, display image field.
				if(slideHTMLElement != -1)getElement(slideHTMLElement).style.display='none';
				if(slideImageElement ==-1 ){ //generate error
					return(false);
					}
				else {
					getElement(slideImageElement).style.display = 'block';
					getElement(slideImageElement).width = Webcast.getProperty('slidewidth');
					//alert('displaying image '+Slide.getProperty('url')+', field display is set to: '+getElement(slideImageElement).style.display);
					getElement(slideImageElement).src = Slide.getProperty('url');	
					}//no errors
				}//End image slide
			else if(Slide.getProperty('type') == 'html'){
				this.setProperty('objectID',this.getProperty('slideHTMLcontainerID'));
				//Display HTML slide
				if(slideImageElement != -1)getElement(slideImageElement).style.display='none';
				if(slideHTMLElement ==-1 ){ //generate error
					return(false);
					}
				else {
					getElement(slideHTMLElement).style.display='block';
					getElement(slideHTMLElement).width=Webcast.getProperty('slidewidth');
					//alert('displaying HTML '+Slide.getProperty('id')+', field display is set to: '+getElement(slideHTMLElement).style.display);
					getHTMLSlide();
					}
				}//end html slide
			else statusmessages.Add('undefined slide type:'+ Slide.getProperty('type'));
			if(slideList.Next()){
				/*Pre-load next slide*/
				if(Slide.getProperty('type') == 'image')
					this.preloadImage.src = Slide.getProperty('url');
				slideList.Previous();
				}
			if(this.getProperty('slidetextContainer')!=null && this.getProperty('slidetextContainer')!=-1 ){
				//Display slide infotext if any + container available.
				if(getElement(this.getProperty('slidetextContainer'))){
				   getElement(this.getProperty('slidetextContainer')).innerHTML = Slide.getProperty('text')!=-1 ? Slide.getProperty('text') : '';
				   }
				  else errors.Add('no container found for slide text');
				}
			if(this.getProperty('slidenumberContainer')!=null && this.getProperty('slidenumberContainer')!=-1 ){
				//Display slide number if container available
				if(getElement(this.getProperty('slidenumberContainer'))){
				   getElement(this.getProperty('slidenumberContainer')).innerHTML = (parseInt(slideList.getPointer()+1)) + ' / ' + slideList.Count();
				   }						  
				  else errors.Add('no container found for slide number');
				}
			}//if there are slides
		else return(false);
		}
	function setHTMLSlide(content){
	getElement(this.getProperty('slideHTMLcontainerID')).innerHTML = content;
	}
	function hide(){
		// Hide current slide 
		if(this.getProperty('opacity')>0){
			//alert(this.getProperty('opacity'));
			this.setProperty('opacity',(this.getProperty('opacity')-this.getProperty('stepping')));
			this.SetOpacity(this.getProperty('objectID'),this.getProperty('opacity'));
			return(false);
		}
		else return(true);
	}
	function show(){
		//Show current slide
		if(this.getProperty('opacity')<100){
			this.setProperty('opacity',(this.getProperty('opacity')+this.getProperty('stepping')));
			this.SetOpacity(this.getProperty('objectID'),this.getProperty('opacity'));
			return(false);
		}
		else return(true);
		}

	function setOpacity(obj, opacity) {
		//Set object opacity
		if(obj==-1) return(false);
	 obj = getElement(obj);
	  opacity = (opacity == 100)?99.999:opacity;
	  
	  // IE/Win
	  obj.style.filter = "alpha(opacity:"+opacity+")";
	  
	  // Safari<1.2, Konqueror
	  obj.style.KHTMLOpacity = opacity/100;
	  
	  // Older Mozilla and Firefox
	  obj.style.MozOpacity = opacity/100;
	  
	  // Safari 1.2, newer Firefox and Mozilla, CSS3
	  obj.style.opacity = opacity/100;
	}
}
SlideControl.prototype = new Item();

var SlideControl = new SlideControl();
	SlideControl.init();
	
var ChatControl = new Item();

var PollControl = new Item();

function PlayerControl(){
	this.setMediaSource = function(){
		this.setProperty('mediasource',PresentationList.Current().getProperty('mediasources').Current());
		this.setProperty('currentsourcetype',this.getProperty('mediasource').getProperty('sourcetype'));
		}
	this.toggleFullScreen = function(){
			var t;
		if(getElement('MediaPlayer').player && getElement('MediaPlayer').player != 'undefined'){ 
			t = getElement('MediaPlayer').player;  
			}
		else t = getElement('MediaPlayer');
			if(t.fullScreen) 
				t.fullScreen = false;
			else { 
			alert("Voit poistua kokoruudun tilasta painamalla ESC-painiketta");
			statusmessages.Add('Opening full screen mode');
			t.fullScreen = true;
			}
			
		}
	this.Play = playMedia;
	this.Start = function(){ 
		if(getElement('MediaPlayer')){
		var player = getElement('MediaPlayer');
		if(player.controls) player.controls.play();
		else player.play();
		statusmessages.Add('Playing media');
		}
	};
	this.Stop = function(){ 
	if(getElement('MediaPlayer')){var player = getElement('MediaPlayer');
	if(player.controls) player.controls.stop();
		else player.stop();
		}
	statusmessages.Add('Player stopped.');
	};
	this.Pause = function(){ if(getElement('MediaPlayer')){var player = getElement('MediaPlayer');
		if(player.controls) player.controls.pause();
		else player.pause();
		statusmessages.Add('Player paused.');
		}};
	this.Open = openMedia;
	this.setPosition = setPosition;
	this.SetPosition = setPosition;
	this.SetPositionRelative = setPositionRelative;
	this.SetVolume = function(newVol){
		if(getElement('MediaPlayer')){
			var player = getElement('MediaPlayer');
			if(player.settings) player.settings.volume = parseInt(newVol);
			else {
				player.volume = 50;
				//if(player.volume) player.volume = parseInt(newVol);
			}
		}
		statusmessages.Add('Volume set to '+newVol+'%');
		}
	this.trackState = function(){
		switch(arguments[0]){
			case 3:
			//var	trackInterval = setInterval("PlayerControl.Poll()",1000);
				break;
			case 8:
			case 1:
			//alert(arguments[0]+' - '+parseInt(this.GetPosition(true)/this.GetDuration(true)*100));
				//Display query at the end of the show
				if(parseInt(this.GetPosition(true)/this.GetDuration(true)*100)>=99 ||arguments[0]==8){
					//CreateEndQuery('hoverDivContents'); 
					//statusmessages.Add('Presentation has ended, displaying query.');
					
					}
				break;
			default:
			
				clearInterval(trackInterval);
				break;
			}
		}
	
	this.GetDuration = function(){
		var p = getElement('MediaPlayer');
		var val = 0;
		if(p.currentMedia) val = p.currentMedia.duration;
		else if(p.duration) val = p.duration;
		if(arguments[0]==true)return(val);
		else if(val) return(this._timeformat(val));
		return(val);
		}
	this.GetPosition = function(){
		var p = getElement('MediaPlayer');
		var val = 0;
		if(p.controls) val = p.controls.currentPosition;
		else if(p.currentPosition) val = p.currentPosition;
		if(arguments[0]==true)return(val);
		else if(val) return(this._timeformat(val));
		return(val);
		}
	this.Poll = function(){
		//alert('ping');
		$("#currentVideoLength").html("/ "+this.GetDuration());
//		alert(this.GetDuration());
		$("#currentVideoPosition").html(this.GetPosition());
		if(positionSlider && this.GetDuration()){
			innerPos = parseInt(this.GetPosition(true)/this.GetDuration(true)*100);
			//$("#temp").html(innerPos+ '%');
			if(innerPos != relPos)
				positionSlider.setValue(relPos);
			relPos = innerPos;
			}
		}
	this._timeformat = function(){
		var lengthH = Math.floor(arguments[0]/3600);
		var lengthM = Math.floor((arguments[0] - lengthH*3600)/60);
		if(lengthM < 10) lengthM = '0'+lengthM;
		var lengthS = Math.floor(arguments[0] - 60*(Math.floor(arguments[0]/60)));
			if(lengthS < 10) lengthS = '0'+lengthS;
		return(((lengthH)? lengthH +':' : '') +lengthM+':'+lengthS);
		}
	this.DisplayDuration = function (){
			 playerElement = getElement('MediaPlayer');
				if(playerElement.duration){
					var lengthH = Math.floor(playerElement.duration/3600);
					var lengthM = Math.floor((playerElement.duration - lengthH*3600)/60);
					var lengthS = Math.floor(playerElement.duration - 60*(Math.floor(playerElement.duration/60)));
					if(getElement('currentVideoLength')) {
						
						getElement('currentVideoLength').innerHTML = 'Current video length: '+lengthH+':'+lengthM+':'+lengthS;
					}
					}
			}
		function playMedia(){
			/* Write media player component for selected media source */
			var playerHTML = '';
			var ODFile = '';
			this.setMediaSource();
			if(this.getProperty('width')==-1)
				this.setProperty('width',Webcast.getProperty('videowidth'));
			if(this.getProperty('height')==-1)
				this.setProperty('height',Webcast.getProperty('videoheight'));
			var mSource = this.getProperty('mediasource');
		//NOCUSTOM VIDEO CONTROLS
		this.setProperty('displaycontrols',(PresentationList.Current().getProperty('videocontrols')==1 ? true : false));
		
		//this.setProperty('displaycontrols',false);
		statusmessages.Add('opening media player: '+this.getProperty('width')+' x '+this.getProperty('height') + 'px, format: '+mSource.getProperty('mediaformat')+'.');
		if(mediaPlaying == false || (PresentationList.Current().getProperty('status')==4 )|| (Webcast.getProperty('status')>2)){
			switch(mSource.getProperty('mediaformat')){
				case "wm":
					var WMPlayerHeight = parseInt(this.getProperty('height'));
					if(mSource.getProperty('sourcetype')=='ondemand'){ 
						if((PresentationList.Current().getProperty('ondemandfile')!=-1) && (PresentationList.Current().getProperty('ondemandfile'))){
							ODFile = PresentationList.Current().getProperty('ondemandfile');
						}
						else if(mSource.getProperty('filename')!=-1){ 
							ODFile = mSource.getProperty('filename');
						}
						else{
							ODFile = (parseInt(PresentationList.getPointer())+1) + '.'+ (mSource.getProperty('mediatype')=='audio' ? "wma" :"wmv");
						}
					}
					if((mSource.getProperty('sourcetype')=='ondemand') && (this.getProperty('displaycontrols') == true)) WMPlayerHeight += 71;
					if(SystemEnvironment.getProperty('browsername').toLowerCase().match('firefox')){
						var oSrc = mSource.getProperty('url')+(mSource.getProperty('sourcetype')=='ondemand' ? ODFile :'');
					//	alert(oSrc);
					playerHTML = '<object type="application/x-ms-wmp" data="'+oSrc+'" width="'+this.getProperty('width')+'" border="0" height="'+WMPlayerHeight+'" hspace="0" vspace="0" standby="Loading Microsoft® Windows® Media Player components..." id="MediaPlayer">'+
					'  <param name="URL" value="'+mSource.getProperty('url')+(mSource.getProperty('sourcetype')=='ondemand' ? ODFile :'')+'">';
						}
					else { // Create player for IE
					playerHTML = '<object classid="CLSID:6BF52A52-394A-11d3-B153-00C04F79FAA6" codebase="http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=6,4,5,715" type="application/x-oleobject" width="'+this.getProperty('width')+'" border="0" height="'+WMPlayerHeight+'" hspace="0" vspace="0" standby="Loading Microsoft® Windows® Media Player components..." id="MediaPlayer">'+
					/* WMP 6.4 codebase disabled  :: We should allow use of 6.4 but display normal controls. 
					playerHTML = '<object classid="CLSID:22d6f312-b0f6-11d0-94ab-0080c74c7e95" codebase="http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=6,4,5,715" type="application/x-oleobject" width="'+this.getProperty('width')+'" border="0" height="'+WMPlayerHeight+'" hspace="0" vspace="0" standby="Loading Microsoft® Windows® Media Player components..." id="MediaPlayer">'+
					*/
						'        <param name="FileName" value="'+mSource.getProperty('url')+(mSource.getProperty('sourcetype')=='ondemand' ? ODFile :'')+'">';
					}
					playerHTML += '        <param name="AutoStart" value="true">'+
					'        <param name="AutoRewind" value="true">'+
					'        <param name="Loop" value="false">'+
					'        <param name="TransparentAtStart" value="true">'+
					'        <param name="AnimationatStart" value="false">';
					if((mSource.getProperty('sourcetype')=='ondemand') && (this.getProperty('displaycontrols') == true)) 
						playerHTML+='        <param name="ShowControls" value="true">'+
						'        <param name="ShowAudioControls" value="true">'+
						'        <param name="ShowStatusBar" value="true">'+
								'        <param name="uiMode" value="mini">'+
						'        <param name="ShowTracker" value="true">';
					else playerHTML+='        <param name="ShowControls" value="false">'+
					'        <param name="ShowAudioControls" value="false">'+
					'        <param name="ShowStatusBar" value="false">'+
										'        <param name="uiMode" value="none">'+
					'        <param name="ShowTracker" value="false">';
					playerHTML+='        <param name="autoSize" value="false">'+
					'        <param name="ShowGotoBar" value="false">'+
					'        <param name="ShowDisplay" value="false">'+
					'        <param name="stretchToFit" value="true">'+
					'        <param name="displaySize" value="0">'+
					
					'        <param name="ShowPositionControls" value="false">';
					if((!SystemEnvironment.getProperty('activeXSupport'))&&(SystemEnvironment.getProperty('firefoxWMPPluginSupport')==false)){
						WMPlayerHeight += 71;
					playerHTML += '        <embed type="application/x-mplayer2" id="MediaPlayerEmbed"'+
					'	 pluginspage="http://www.microsoft.com/Windows/Downloads/Contents/Products/MediaPlayer/"'+
					'	 src="'+mSource.getProperty('url')+(mSource.getProperty('sourcetype')=='ondemand' ? ODFile :'')+'"'+
					'	 height='+WMPlayerHeight+
					'	 width='+this.getProperty('width')+
					'	 hspace=0'+
					'	 vspace=0'+
					'	 border=0'+
					'	 autostart=1'+
					'	 transparentatstart=0'+
					'	 animationstart=1';
					if((mSource.getProperty('sourcetype')=='ondemand') && (this.getProperty('displaycontrols') == true))  
					   playerHTML+='	 showcontrols=1'+
						'	 showstatusbar=1'+
						'	 showtracker=1'+
						'	 uimode=mini'+
						'	 showaudiocontrols=1';
					else playerHTML+='	 showcontrols=0'+
						'	 showstatusbar=0'+
						'	 showtracker=0'+
						'	 uimode=none'+
						'	 showaudiocontrols=0';
					playerHTML+='	 showdisplay=0'+
					'	 showpositioncontrols=0'+
					' autosize=0'+
					'	 displaysize=0> </embed>';
					} 
				playerHTML +=	'      </object>';
				//	statusmessages.Add(mSource.getProperty('url')+(mSource.getProperty('sourcetype')=='ondemand' ? (mSource.getProperty('filename')!=-1 ? mSource.getProperty('filename')  : (parseInt(PresentationList.getPointer())+1)) + '.'+ (mSource.getProperty('mediatype')=='audio' ? "wma" :"wmv") :''));
						if(this.getProperty('objectID')!=-1){
							if(getElement(this.getProperty('objectID'))){
								var playerElement = getElement(this.getProperty('objectID'));
								//Write player to UI
								playerElement.innerHTML = playerHTML;
								playerElement.height = WMPlayerHeight;
								playerElement.width = this.getProperty('width');
								if(getElement('slideTD') && getElement('playerContentTD')){
									if(parseInt(getElement('playerContentTD').style.padding)){
									getElement('slideTD').height = parseInt(WMPlayerHeight)+(parseInt(getElement('playerContentTD').style.padding)*2);
//									getElement('slideTD').width = this.getProperty('width');
									statusmessages.Add('slide window height set to'+parseInt(WMPlayerHeight)+'px');
									}
									}
								else statusmessages.Add('unable to fit slide window');
							
								if(getElement('MediaPlayer')){
									getElement('MediaPlayer').InvokeURLs=0;
									getElement('MediaPlayer').URL = mSource.getProperty('url')+(mSource.getProperty('sourcetype')=='ondemand' ? ODFile :'');
									if(!navigator.userAgent.indexOf("IE") == -1) getElement('MediaPlayer').Open(mSource.getProperty('url')+(mSource.getProperty('sourcetype')=='ondemand' ? ODFile :''));
									 }
								//jobqueue.addJob('PlayerControl.DisplayDuration()',false,1,2000);
								}
							
						else errors.Add('could not render media player component, container missing: '+this.getProperty('objectID'));
						}
					break;
				case "real":
					playerHTML+='<table cellpadding="0" cellspacing="0" border="0"><tr><td><OBJECT CLASSID="clsid:CFCDAA03-8BE4-11cf-B84B-0020AFBBCCFA" width='+this.getProperty('width')+' height='+this.getProperty('height')+' hspace="0" vspace="0">'+
					'   <param name="controls" VALUE="imagewindow">'+
					'   <param name="console" VALUE="video">'+
					'	<param name="loop" value="false">'+
					'	<param name="autostart" value="true">'+
					'	<param name="autogotourl" value="false">'+
					'   <param name="src" value="'+mSource.getProperty('url')+(mSource.getProperty('sourcetype')=='ondemand' ? (mSource.getProperty('filename')!=-1 ? mSource.getProperty('filename')  : (parseInt(PresentationList.getPointer())+1)) + '.'+ (mSource.getProperty('mediatype')=='audio' ? "rma" :"rm") :'')+'">'+
					'  <embed scriptcallbacks="onGoToUrl" SRC="'+mSource.getProperty('url')+(mSource.getProperty('sourcetype')=='ondemand' ? (mSource.getProperty('filename')!=-1 ? mSource.getProperty('filename')  : (parseInt(PresentationList.getPointer())+1)) + '.'+ (mSource.getProperty('mediatype')=='audio' ? "rma" :"rm") :'')+'" width='+this.getProperty('width')+'  height='+this.getProperty('height')+' hspace="0" vspace="0" autostart="true" loop="false" type="audio/x-pn-realaudio-plugin" controls="imagewindow" console="video" autogotourl="false" name="rvcontrol"></embed></object></td></tr>';
					if((mSource.getProperty('sourcetype')=='ondemand') && (this.getProperty('displaycontrols') == true)) 
					playerHTML+='<tr><td><object classid="clsid:CFCDAA03-8BE4-11cf-B84B-0020AFBBCCFA" width="'+this.getProperty('width')+'" height="70" hspace="0" vspace="0" id="rvcontrol"><param name="controls" VALUE="ControlPanel,StatusField,PositionField">'+
					'   <param name="console" VALUE="video">'+
					'	<param name="loop" value="true">'+
					'	<param name="autostart" value="true">'+
					'	<param name="autogotourl" value="false">'+
					'   <param name="src" VALUE="'+mSource.getProperty('url')+(mSource.getProperty('sourcetype')=='ondemand' ? (mSource.getProperty('filename')!=-1 ? mSource.getProperty('filename')  : (parseInt(PresentationList.getPointer())+1)) + '.'+ (mSource.getProperty('mediatype')=='audio' ? "rma" :"rm") :'')+'">'+
					'   <embed scriptcallbacks="onGoToUrl" src="'+mSource.getProperty('url')+(mSource.getProperty('sourcetype')=='ondemand' ? (mSource.getProperty('filename')!=-1 ? mSource.getProperty('filename')  : (parseInt(PresentationList.getPointer())+1)) + '.'+ (mSource.getProperty('mediatype')=='audio' ? "rma" :"rm") :'')+'" width="'+this.getProperty('width')+'" height="69" hspace="0" vspace="0" autostart="true" loop="true" type="audio/x-pn-realaudio-plugin" console="video" autogotourl="false">'+
					'	</embed></object></td></tr>';
					playerHTML+='</table>';
					if((mSource.getProperty('sourcetype')=='ondemand') ||(currentShow.presentationStatus=='ondemand') || (this.getProperty('currentsourcetype') == 'ondemand')){
						if(this.getProperty('objectID')!=-1){
							//Write player to UI
							var playerElement = getElement(this.getProperty('objectID'));
							var ob = this.getProperty('objectID');
							$("#"+ob).empty();
							playerElement.innerHTML = playerHTML;
							playerElement.width = this.getProperty('width')+'px';
							var elHeight = parseInt(this.getProperty('height'));
							if((mSource.getProperty('sourcetype')=='ondemand') && (this.getProperty('displaycontrols') == true)) elHeight += 69;
							playerElement.height = elHeight+'px';
							playerElement.valign = 'top';
						//jobQueue.Add
						}
						else errors.Add('could not render media player component, container missing: '+this.getProperty('objectID'));
					}
					break;
				case "flash":
					break;
				case "qt":
					break;
				default:
					alert('Error: Unknown media format('+mSource.getProperty('mediaformat')+'). Could not open the player element.');
					break;
				}
				mediaPlaying = true;
			}
				
			}
		function stopMedia(){
			}
		function openMedia(){
			this.setMediaSource();
			this.Play();
			}
		function setPositionRelative(ipercent){
		if(relPos == ipercent) return(false);
		relPos = ipercent;
		//alert('position:'+ipercent+'%');
		ipercent = parseInt(ipercent);
			if(ipercent >100) ipercent = 100;
			if(ipercent < 0) ipercent = 0;
		if(getElement('MediaPlayer')){
			var playerElement = getElement('MediaPlayer');
			time = parseInt((ipercent / 100)*this.GetDuration(true));
		//	alert(time);
			if(playerElement.controls) playerElement.controls.currentPosition = time;
			else playerElement.currentPosition=time;
			SlideControl.checkForChange(time);
		}
			
		}
		function setPosition(itime){
			vals = itime.split(":");
			if(vals[0]&&vals[0]>0){
			 time = (parseInt(vals[0])*60+parseInt(vals[1]));
			}
			else time=parseInt(vals[0]);
			var playerElement = getElement('MediaPlayer');
			//alert(playerElement);
			//alert(playerElement.duration);
		if(playerElement.duration > time){
				if(playerElement.controls) playerElement.controls.currentPosition = time;
				else playerElement.currentPosition=time;
				SlideControl.checkForChange();
				}
			else alert('Selected Index ('+itime+','+time+' seconds) is beyond the duration of this video('+playerElement.duration+' seconds)');
		}
}
PlayerControl.prototype = new Item();

var PlayerControl = new PlayerControl();
	PlayerControl.setProperty('objectID','playerField');
	PlayerControl.setProperty('currentsourcetype',null);
	PlayerControl.setProperty('width',null);
	PlayerControl.setProperty('height',null);
	PlayerControl.setProperty('displaycontrols',true);
	PlayerControl.setProperty('mediasource',null);
	
	


function openSlideSet(){
	//statusmessages.Add('opening slide 1 of presentation '+PresentationList.Current().getProperty('showtitle'));
	PresentationList.Current().getProperty('slides').First();
	this.setSlide(Webcast.getProperty('currentslide'));
//	this.setSlide();
	}

function openPresentation(index){
	
	//Opens selected presentation: player,slides,etc
		var sourceToOpen = index ? this.getProperty('mediasources').GetItem(index) : this.getProperty('mediasources').Current();
	//debug	alert('opening presentation '+this.getProperty('showtitle'));
		if(this.getProperty('mediasources').IsEmpty())
			{
			getMediasources();
			return(false);
			}
		if(this.getProperty('mediasources').Count()>1){
			var mSources = this.getProperty('mediasources') ;
			//	alert('opening mediasource '+ (this.getProperty('mediasources').getPointer()+1) +' / ' + this.getProperty('mediasources').Count());
			if(mediatype==null && (!index)){
				//Media type selection ;if mediatype is selected, only sources of selected type were loaded (hopefully)
				var mediaTypes = new Array();
				do	{
					if(!in_array(mSources.Current().getProperty('mediaformat'),mediaTypes))
						mediaTypes.push(mSources.Current().getProperty('mediaformat'));
					}while(mSources.Next());
					mSources.First();
					//Create selection menu
					CreateMediatypeSelector(mediaTypes);
					sourceToOpen = false;
				}
			else if(sourceToOpen.getProperty('mediaformat') != mediatype){
				//try to open source of specified format
				mSources.First();
				var loop = true;
				do	{
					if(mSources.Current().getProperty('mediaformat') == mediatype){
						sourceToOpen = mSources.Current();
						loop = false;
					}
					}while(mSources.Next() && loop == true);
				
			}

			}
		//	return();
		if(sourceToOpen != false){
		if(sourceToOpen.getProperty('url')!=-1){
			PlayerControl.setProperty('src',sourceToOpen.getProperty('url'));
			PlayerControl.setProperty('width',sourceToOpen.getProperty('width'));
			PlayerControl.setProperty('height',sourceToOpen.getProperty('height'));
			PlayerControl.setMediaSource();
			PlayerControl.Play();
			}
		else errors.Add('No media source selected.');
		}
		else errors.Add('No source URLs defined for presentation');
	SlideControl.Open();
	this.displayProperty('speaker','currentspeakertitlefield');
	this.displayProperty('showtitle','playerHeaderTD');
	if((PresentationList.Current().getProperty('status')==4 )|| (Webcast.getProperty('status')>2)){
		$("#chatLink:visible").hide();
		$("#feedbackLink:hidden").show();
		$("#statusDiv").html("On-Demand:");
	}
	else{ $("#statusDiv").html("Live:");
			$("#chatLink:hidden").show();
		$("#feedbackLink:visible").hide();

	}
	Webcast.displayProperty('date','datefield');
	CreateShortPresentationList("agenda");
	
	$('#hoverDiv:visible').fadeOut();
	ajaxSendShowOpened(Webcast.getProperty('id'),PresentationList.Current().getProperty('id'));
	currentSpeaker = PresentationList.Current();
	}



function selectMediaType(newType){
	mediatype = newType;
	statusmessages.Add('mediatype set to '+ mediatype);
	PresentationList.Current().Open();
	
}
function CreateMediatypeSelector(mediaTypes){
var cType = null;
var cell = null;
var row = null;
var cellHTML = '';
var i = 0;
var currentcol = 0;
var cols = 3;
if(mediaTypes.length){
	if(mediaTypes.length < cols) cols = mediaTypes.length;
	statusmessages.Add(mediaTypes.length+' sources available');
	if(getElement(PlayerControl.getProperty('objectID'))){
		var targetTable = document.createElement('table');
		getElement(PlayerControl.getProperty('objectID')).innerHTML ='';
		if(parseInt(PlayerControl.getProperty('height'))>0)getElement(PlayerControl.getProperty('objectID')).height = PlayerControl.getProperty('height');
		getElement(PlayerControl.getProperty('objectID')).appendChild(targetTable);
		row = targetTable.insertRow(-1);
		cell = row.insertCell('-1');
		cell.colSpan = cols;
		
		cell.innerHTML = 'The selected presentation is available in multiple feeds.<br>Please select which media format You prefer:';
	
		row = targetTable.insertRow(-1);
		while(cType = mediaTypes.pop()){
			cellHTML ='';
			currentcol++;
			if(currentcol>cols){	
				row = targetTable.insertRow(-1);
				currentcol = 1;
			}
			cell = row.insertCell(-1);
			cell.style.padding = '10px';
			if((currentcol < cols) && (cType == mediaTypes.length-1)){
					cell.colSpan = ( cols +1  - currentcol);
			}
			cell.valign='middle';
			cell.align='center';
			switch(cType){
				case "wm":
					cellHTML+='<img border="1" style="border-bottom-color:#000000;" src="images/mime_wmv.gif" border="0" vspace="4" hspace="4" alt ="Windows Media"><br><a href="#" onClick="selectMediaType(\'wm\'); return false;">Windows Media</a>';
					break
				case "real":
					cellHTML+='<img border="1" style="border-bottom-color:#000000;" src="images/mime_rm.gif" border="0" vspace="4" hspace="4" alt ="Real Media"><br><a href="#" onClick="selectMediaType(\'real\'); return false;">Real Media</a>';
					break
				case "qt":
					cellHTML+='<img border="1" style="border-bottom-color:#000000;" src="images/mime_mov.gif" border="0" vspace="4" hspace="4" alt ="Quicktime"><br><a href="#" onClick="selectMediaType(\'qt\'); return false;">Quicktime</a>';
					break
				case "flash":
					cellHTML+='<img border="1" style="border-bottom-color:#000000;" src="images/mime_swf.gif" border="0" vspace="4" hspace="4" alt ="Flash"><br><a href="#" onClick="selectMediaType(\'flash\'); return false;">Flash</a>';
					break
					}
			cell.innerHTML = cellHTML;
			cType = false;
			}
		}
		else return(false);
	}//end if mediatypes	
}//end function 

function events_itemLoadCallback(carousel, state)
{
    for (var i = carousel.first; i <= carousel.last; i++) {
        if (carousel.has(i)) {
            continue;
        }

        if (i > Events.Count()) {
            break;
        }

        carousel.add(i, getEventHTML(i));
    }
	carousel.size(Events.Count());
};
function getEventHTML(pos){

if(Events.GetItem(pos))
return('<a class="EventsItem" href="javascript:" onClick=getCurrentWebcast('+ Events.GetItem(pos).getProperty('id') + ');setEvent('+pos+'); return(false);"><b>' + Events.GetItem(pos).getProperty('name')+'</b></a>');
else return('no event for position '+pos+' :(');
}

function eventsList_initCallback(carousel) {
   

    jQuery('#eventsNext').bind('click', function() {
        carousel.next();
        return false;
    });

    jQuery('#eventsPrev').bind('click', function() {
        carousel.prev();
        return false;
    });
};

function CreateEventList(t){
	
	if(!Events.Count()){
		if(!Events.loaded){
			getWebcastList();
			setTimeout('CreateEventList(\''+t+'\')',1000);
			return(true);
			}
		else return(false);
		}
	else statusmessages.Add('Events found:'+Events.Count());
	Events.First();
	var eDiv = null;
	var dclass = null;
	var aclass = null;
	$("#"+t).empty();
	do{
		currentListItem = Events.Current();
		dclass = 'eventDiv';
		aclass = 'EventsItem';
		if(currentListItem.getProperty('id') ==  Webcast.getProperty('id')){ 
			dclass = 'eventDivActive';
			aclass = 'EventsItemActive';
			$('#eventIndex').empty().append(currentListItem.getProperty('index')+' / '+Events.Count());
			$("#"+t).addOption(Events.Current().getProperty('id'),Events.Current().getProperty('name')).attr('selected','true');
		}
		else $("#"+t).addOption(Events.Current().getProperty('id'),Events.Current().getProperty('name'));
	//	eDiv ='<div class="'+dclass+'"><a class="'+aclass+'" href="javascript:" onClick="getCurrentWebcast('+ Events.Current().getProperty('id') + '); setEvent('+Events.getPointer()+'); return(false);"><b>' + Events.Current().getProperty('name')+'</b></a></div>';
		//'<br>'+((currentListItem.getProperty('description')!=-1) ? currentListItem.getProperty('description') : '')
		i++;
		//$("#"+t).append(eDiv);
		}while(Events.Next());
	
	
}
function CreatePresentationInfo(t){
	var c = PresentationList.Current();
	var a = '';
	$("#"+t).empty();
	$("#"+t).append().load("formattedContent/showdetails.html",setPresentationInfo);
	statusmessages.Add('Displaying presentation info.');
	
}


function CreateSearchResults(){
	var n = null;
	var t = null;
	if(arguments[1]) t = arguments[1];
	else t = 'hoverDivContents';
	if(arguments[0]) n = arguments[0];
	$("#"+t).empty().append(arguments[0]);
	//$("#"+t).append().load("formattedContent/searchresults.html",function(){setSearchResults.apply(this,[n]);});
	$('#hoverDiv').fadeIn(); 
	statusmessages.Add('Displaying search results.');
}
	function setSearchResults(){
	}
function CreateEndQuery(t){
	var n = null;
	if(arguments[1]) n = arguments[1];
	$("#"+t).empty();
	$("#"+t).append().load("formattedContent/endquery.html",function(){setQuerySubmit.apply(this,[n]);});
	statusmessages.Add('End query loaded.');
	
}
function setQuerySubmit(next){
	if(next) $("#endQuery").ajaxForm(function(){
											 PresentationList.Open(next);
											 alert('Kiitos vastauksestasi!');
											 $('#hoverDiv:visible').fadeOut();
											 });
	else $("#endQuery").ajaxForm(function(){alert('Kiitos vastauksestasi!');$('#hoverDiv:visible').fadeOut(); });
	$('#hoverDiv:hidden').fadeIn();
	}
function setPresentationInfo(){
	var c = PresentationList.Current();
	var a = '';
	if(c.getProperty('speakerimage')>0)
					 a = '<img vspace="0" hspace="5" src="imagedata/'+c.getProperty('speakerimage')+'_'+presentationThumbnailWidth+'.jpg" width="'+presentationThumbnailWidth+'">';
		$("#detailsSpeakerImage").empty().append(a);
		$("#detailsShowtitle").empty().append((c.getProperty('showtitle')==-1) ? "" : c.getProperty('showtitle'));
		$("#detailsDescription").empty().append((c.getProperty('description')==-1) ? "" : c.getProperty('description'));
		$("#detailsKeywords").empty().append((c.getProperty('keywords')==-1) ? "" : c.getProperty('keywords'));
		
		$("#detailsSlidecount").empty().append(((c.getProperty('slides').Count()) ? "The presentation has "+c.getProperty('slides').Count()+" slide":"") +((c.getProperty('slides').Count()>1)? "s" :""));

}

function CreateShortPresentationList(t){
	if(PresentationList.IsEmpty()){
		$("#"+t).empty().append("<p>There are no Presentations in the selected Event.</p>");
		return(false);
	}
	var Pres = null;
	var start = 1;
	var eDiv = null;
	var aclass = null;
	var dclass = null;
	$("#"+t).empty();
	var currentIndex = PresentationList.getPointer();	
	for(i = start; i<= PresentationList.Count(); i++){
		 Pres = PresentationList.GetItem(i);
		 if(Pres){
 			dclass = 'presentationlistDiv';
			aclass = 'PresentationsItem';
			 if(i == currentIndex+1){	
				dclass = 'presentationlistDivActive';
				aclass = 'PresentationsItemActive';
				$('#presentationIndex').empty().append(i+' / '+PresentationList.Count());
				}
			eDiv ='<div class="'+dclass+'">- <a class="'+aclass+'" href="javascript:" onClick="PresentationList.UserOpen(' + parseInt(i) + '); return false;">' + Pres.getProperty('showtitle')+'</a></div>';
		
		i++;
		$("#"+t).append(eDiv);
		}
	}
	
	PresentationList.setPointer(currentIndex);

}
function CreatePresentationList(t){
	
	if(PresentationList.IsEmpty()){
		$("#"+t).empty();
		$("#"+t).append("<p>The Presentation List is empty.</p>");
		return(false);
	}
	var currentIndex = PresentationList.getPointer();
	var cell = null;
	var row = null;
	var i =1;
	var j = null;
	
	
	var targetTable = document.createElement('table');
	
	
	targetTable.style.width='550px';
	do{
		currentListItem = PresentationList.Current();
		row = targetTable.insertRow(-1);
		
		//Create cell for presentation image
		cell = row.insertCell(-1);
		if(PresentationList.getPointer == currentIndex){
	//		cell.style.backgroundColor='#cccccc';
		}
		cell.style.width='80px';
		cell.style.height='40px';
		cell.style.verticalAlign='top';
		cell.rowSpan='2';
		cell.align='center';
			if(currentListItem.getProperty('speakerimage')>0){
					cell.innerHTML = '<img vspace="0" hspace="5" src="imagedata/'+currentListItem.getProperty('speakerimage')+'_'+presentationThumbnailWidth+'.jpg" border="1" style="border-color:#252525;" width="'+presentationThumbnailWidth+'">';
					}
			else {
					//	cell.innerHTML = '<img vspace="0" hspace="5" src="images/layout/default_thumbnail.gif" border="3" style="border-color:#252525;" width="40">';
			}
		//cell.innerHTML = 'kuva t&auml;h&auml;n';
		cell = row.insertCell(-1);
		cell.style.width='100px';
		cell.style.color='#acacac';
		cell.style.verticalAlign='top';
		cell.rowSpan='2';
		cell.innerHTML = currentListItem.getProperty('time');
		//Create cell for presentation info
		cell = row.insertCell(-1);
		cell.style.width='500px';
			cell.style.verticalAlign='top';
		if(PresentationList.getPointer == currentIndex){
			//cell.style.backgroundColor='#cccccc';
		}
		cell.innerHTML ='<a class="presentationListItem" href="#" onClick="PresentationList.UserOpen(' + parseInt(PresentationList.getPointer()+1) + '); return false;"><b>' + currentListItem.getProperty('showtitle')+'</b></a>';
		row = targetTable.insertRow(-1);
		cell = row.insertCell(-1);
			cell.style.verticalAlign='top';
		if(PresentationList.getPointer == currentIndex){
			//cell.style.backgroundColor='#cccccc';
		}
		cell.innerHTML =(currentListItem.getProperty('speaker') ? '<font color="#787878">'+ currentListItem.getProperty('speaker') + ((currentListItem.getProperty('speakertitle')) ? (',' +currentListItem.getProperty('speakertitle')) : '') +(currentListItem.getProperty('company')? ',' + currentListItem.getProperty('company') : '' +"</font>"): '');
		i++;
		}while(PresentationList.Next());
	
	PresentationList.setPointer(currentIndex);
	//return(targetTable);
	$("#"+t).empty();
		$("#"+t).append(targetTable);
}
var PresentationListView = new Item();
	PresentationListView.setProperty('objectID','presentationlistcontainer');
var PresentationInfo = new Item();
PresentationInfo.setProperty('objectID','presentationlistcontainer');
var ChannelsView = new Item();
	ChannelsView.setProperty('objectID','channels');
var ChatInputView = new Item();
	ChatInputView.setProperty('objectID','chatInput');
var FeedbackView = new Item();
	FeedbackView.setProperty('objectID','feedbackcontainer');
var MaterialListView = new Item();
	MaterialListView.setProperty('objectID','materials');
	if(getElement(MaterialListView.getProperty('objectID')))
	MaterialListView.setProperty('initialcontent',getElement(MaterialListView.getProperty('objectID')).innerHTML);
	MaterialListView.init = function(){
		 	openMaterialList();
	}
var IndexListView = new Item();
	IndexListView.setProperty('objectID','indexlistcontainer');
	if(getElement(IndexListView.getProperty('objectID')))
	IndexListView.setProperty('initialcontent',getElement(IndexListView.getProperty('objectID')).innerHTML);
	IndexListView.init = function(){
		if(getElement(IndexListView.getProperty('objectID'))){
			if((getElement(IndexListView.getProperty('objectID')).innerHTML == IndexListView.getProperty('initialcontent')) || IndexListView.getProperty('initialcontent')==-1)  
				openIndexList();
			}
		else 	openIndexList();
	}
