//--------------------------------------------- CLASSES
var Stream = function()
{
	//----------------------------------- PROPERTIES
	//private
	var privateStreams = 
	{
		TVA:
		{
			url: "http://207.253.121.82/TVAStream",
			adTag: "http://ad.doubleclick.net/adi/can.fr.canoe.tv/live;subz1=vosemissions;sz=300x250",
			name: "TVA",
			show: null,
			description: "Notez que l'horaire est irr&eacute;gulier et que la diffusion peut &ecirc;tre interrompue.",
			subaccount: "cnotvaprod-network-live",
			reportsuite: "cnotvaprod,cnocanoeglobalprod"
		}
	};
	
	var streams = 
	{
		/*LCN: 
		{
			url: "http://207.253.121.82/LCN",
			adTag: "http://ad.doubleclick.net/adi/can.fr.canoe.tv/live;subz1=lcn;sz=300x250",
			name: "LCN",
			description: "LCN vous offre de l'actualit&eacute; en continu 24 h sur 24 h 7 jours sur 7. Toujours &agrave; l'aff&ucirc;t de la nouvelle, LCN c'est votre r&eacute;f&eacute;rence pour &ecirc;tre bien inform&eacute;.",
			subaccount: "cnolcnprod-lcn-live",
			reportsuite: "cnolcnprod,cnocanoeglobalprod"
		},*/
		
		LCN2: 
		{
			url: "http://mfile.akamai.com/41068/live/reflector:56102.asx?bkup=32561&prop=n",
			adTag: "http://ad.doubleclick.net/adi/can.fr.canoe.tv/live;subz1=lcn2;sz=300x250",
			name: "LCN2",
			description: "Avec LCN 2, vous devenez t&eacute;moin de l'action l&agrave; o&ugrave; cela se d&eacute;roule, au moment o&ugrave; cela se produit. Notez que l'horaire est irr&eacute;gulier et que la diffusion peut &ecirc;tre interrompue.",
			subaccount: "cnolcnprod-lcn-live",
			reportsuite: "cnolcnprod,cnocanoeglobalprod"
		},
		
		/*ARGENT: 
		{
			url: "http://207.253.121.82/tvaargent",
			adTag: "http://ad.doubleclick.net/adi/can.fr.canoe.tv/live;subz1=largent;sz=300x250",
			name: "ARGENT",
			description: "Le canal Argent vous pr&eacute;sente tout ce qui touche de pr&egrave;s ou de loin aux finances, &agrave; l'&eacute;conomie et aux march&eacute;s en plus de vous aider &agrave; comprendre les enjeux &eacute;conomiques quotidiens.",
			subaccount: "cnoargentprod-money-live",
			reportsuite: "cnoargentprod,cnocanoeglobalprod"
		},*/
		
		SHOPPINGTVA: 
		{
			url: "http://www.shoppingtva.ca/TVAShoppingPublic/Live-Video-Feeds.asx",
			adTag: "http://ad.doubleclick.net/adi/can.fr.canoe.tv/live;subz1=shoppingtva;sz=300x250",
			name: "Shopping TVA",
			description: "Nos experts et fournisseurs viennent chaque jour en studio pour montrer et d&eacute;montrer leurs produits.",
			subaccount: "cnotvaprod-network-live",
			reportsuite: "cnotvaprod,cnocanoeglobalprod"
		}
	};
	
	//public
	this.streamURL;
	//-----------------------------------
	
	
	//----------------------------------- METHODS
	//private
	var checkTVASchedule = function()
	{
		var time = new Date();
		var hours = time.getHours();
		var minutes = time.getMinutes();
	
		for(var segment in horaire)
		{
			var show = horaire[segment];
			for(var j = 0; j < show.length; j++)
			{
				var showStart = show[j]['start'].split(':');
				var showEnd = show[j]['end'].split(':');
				
				if((hours > showStart[0] && hours < showEnd[0]) || ((hours == showStart[0] && minutes > showStart[1]) || (hours == showEnd[0] && minutes < showEnd[1])))
				{
					privateStreams.TVA.show = segment;
					streams.TVA = privateStreams.TVA;
					return true;
				}
			}
		}
		
		return false;
	};
	
	var setStreamURL = function()
	{
		if(streams[getStreamType()]) streamURL = streams[getStreamType()].url;
		else if(privateStreams[getStreamType()] && checkTVASchedule()) streamURL = privateStreams[getStreamType()].url;
		else if(privateStreams[getStreamType()] && !checkTVASchedule()) alert("Il n'y a aucune mission  l'affiche pour l'instant, veuillez revenir plus tard.");
		else throw new Error("This stream type does not exist");
		
		checkTVASchedule();
	}();
	
	
	//public
	this.getURL = function()
	{
		return streamURL;
	};
	
	this.getAdTag = function()
	{
		var adTag;
		if(streams[getStreamType()]) return streams[getStreamType()].adTag;
		else if(privateStreams[getStreamType()]) return privateStreams[getStreamType()].adTag;
		else throw new Error("That stream type hasn't been defined anywhere");
	}
	
	this.getStreamNames = function()
	{
		var streamNames = new Array();
		for(var stream in streams)
		{
			streamNames.push(streams[stream].name);
		}
		return streamNames;
	};
	
	this.getStreamTitle = function()
	{
		if(streams[getStreamType()].name) return streams[getStreamType()].name;
		else if(privateStreams[getStreamType()] && privateStreams[getStreamType()].name) return privateStreams[getStreamType()].name;
		else return "";
	};
	
	this.getStreamShow = function()
	{
		if(streams[getStreamType()].show) return streams[getStreamType()].show;
		else return null;
	};
	
	this.getStreamDescription = function()
	{
		if(streams[getStreamType()].description) return streams[getStreamType()].description;
		else if(privateStreams[getStreamType()] && privateStreams[getStreamType()].description) return privateStreams[getStreamType()].description;
		else return "";
	};
	
	this.getStreamSubaccount = function()
	{
		if(streams[getStreamType()].subaccount) return streams[getStreamType()].subaccount;
		else if(privateStreams[getStreamType()] && privateStreams[getStreamType()].subaccount) return privateStreams[getStreamType()].subaccount;
		else return "";
	};
		
	this.getStreamReportsuite = function()
	{
		if(streams[getStreamType()].reportsuite) return streams[getStreamType()].reportsuite;
		else if(privateStreams[getStreamType()] && privateStreams[getStreamType()].reportsuite) return privateStreams[getStreamType()].reportsuite;
		else return "";
	};
	//-----------------------------------
}	

var Player = function()
{
	if (navigator.platform.toUpperCase().indexOf("MAC") !== -1) 
	{
		var playerHTML = '<param name="Filename" value="' + LiveStream.getURL() + '">';
		playerHTML += '<param name="autostart" value="true">';
		playerHTML += '<param name="ShowControls" value="true">';
		playerHTML += '<param name="ShowStatusBar" value="false">';
		playerHTML += '<param name="ShowDisplay" value="false"> ';
		playerHTML += '<param name="SendPlayStateChangeEvents" value="True">';
		playerHTML += '<embed ';
		playerHTML += 'src="' + LiveStream.getURL() + '" ';
		playerHTML += 'name="MediaPlayer" ';
		playerHTML += 'width="486" ';
		playerHTML += 'height="412" ';
		playerHTML += 'ShowControls="0" ';
		playerHTML += 'ShowStatusBar="0" ';
		playerHTML += 'ShowDisplay="0" ';
		playerHTML += 'SendPlayStateChangeEvents="true" ';
		playerHTML += 'autostart="1"> ';
		playerHTML += '</embed> ';
	}
	else
	{
		//-------------------------- Clement's code
		var playerHTML = ''
		if(-1 != navigator.userAgent.indexOf("MSIE"))
		{
			playerHTML += '<object id="MediaPlayer" width="486" height="450" classid="CLSID:6BF52A52-394A-11d3-B153-00C04F79FAA6" standby="Loading Windows Media Player components...">';
		}
		else if(-1 != navigator.userAgent.indexOf("Firefox"))
		{
			playerHTML += '<object id="MediaPlayer" width="486" height="450" type="video/x-ms-asf" 									standby="Loading Windows Media Player components...">';
		}
			playerHTML += '<param name="url" value="' + LiveStream.getURL() + '">';
			playerHTML += '<param name="autostart" value="true">';
			playerHTML += '<param name="ShowControls" value="true">';
			playerHTML += '<param name="ShowStatusBar" value="false">';
			playerHTML += '<param name="ShowDisplay" value="false"> ';
			playerHTML += '<param name="SendPlayStateChangeEvents" value="true">';
			playerHTML += '<embed ';
		if(-1 != navigator.userAgent.indexOf("MSIE"))
		{
			playerHTML += 'type="video/x-ms-asf" ';	
		}
			playerHTML += 'src="' + LiveStream.getURL() + '" ';
			playerHTML += 'name="MediaPlayer" ';
			playerHTML += 'width="486" ';
			playerHTML += 'height="412" ';
			playerHTML += 'ShowControls="0" ';
			playerHTML += 'ShowStatusBar="0" ';
			playerHTML += 'ShowDisplay="0" ';
			playerHTML += 'SendPlayStateChangeEvents="true" ';
			playerHTML += 'autostart="1"> ';
			playerHTML += '</embed> ';
			playerHTML += '</object>';
		if(-1 != navigator.userAgent.indexOf("Firefox"))
		{
			if(navigator.oscpu && document.getElementsByClassName)
			{
				var Player=document.getElementById("MediaPlayer");
			}
		}
		//--------------------------
	}

	
	this.getPlayerCode = function()
	{	
		return playerHTML;
	}
}

var Ad = function(pInsertionPoint, pAdTagURL)
{
	this.adTag = pAdTagURL;
	this.interval = 30000; //30 seconds timeout
	this.timeout;
	
	this.createAd = function()
	{
		var date = new Date();
		var timestamp = date.getTime();
		var iframeElem = document.createElement('iframe');
		iframeElem.setAttribute('width', '300');
		iframeElem.setAttribute('height', '250');
		iframeElem.setAttribute('scrolling', 'no');
		iframeElem.setAttribute('frameborder', '0');
		iframeElem.setAttribute('src', this.adTag+";ord="+timestamp);

		try
		{
			document.getElementById(pInsertionPoint).innerHTML = '';
			document.getElementById(pInsertionPoint).appendChild(iframeElem);
		}
		catch(pError)
		{
			console.debug("Couldn't create the big box ad. Error: "+pError);
		}
	};
	
	this.redrawAd = function()
	{
		this.createAd();
		this.timeout = setTimeout("CompanionAd.redrawAd()", this.interval);
	};
	return this;
};

var BannerAd = function(pInsertionPoint, pAdTagURL)
{
	this.adTag = pAdTagURL;
	this.interval = 30000; //30 seconds timeout
	this.timeout;
	
	this.createAd = function()
	{
		var date = new Date();
		var timestamp = date.getTime();
		var iframeElem = document.createElement('iframe');
		iframeElem.setAttribute('width', '728');
		iframeElem.setAttribute('height', '90');
		iframeElem.setAttribute('scrolling', 'no');
		iframeElem.setAttribute('frameborder', '0');
		iframeElem.setAttribute('src', this.adTag+";ord="+timestamp);

		try
		{
			document.getElementById(pInsertionPoint).innerHTML = '';
			document.getElementById(pInsertionPoint).appendChild(iframeElem);
		}
		catch(pError)
		{
			console.debug("Couldn't create the big box ad. Error: "+pError);
		}
	};
	
	this.redrawAd = function()
	{
		this.createAd();
		this.timeout = setTimeout("CompanionBannerAd.redrawAd()", this.interval);
	};
	return this;
};

//---------------------------------------------


//--------------------------------------------- UTLITY FUNCTIONS
function getParams(pURL)
{
	var urlPieces = String(pURL).split('?');
	var params = (urlPieces[1]) ? urlPieces[1].split('&') : new Array();
	return params; 
}

function getStreamType()
{
	var params = getParams(window.location);
	for(var i = 0; i < params.length; i++)
	{
		var keyValuePair = params[i].split('=');
		if(keyValuePair[0] == 'type' && keyValuePair[1]) 
		{
			return keyValuePair[1];
		}
	}
	return;
}

function getRootURL(pURL)
{
	var urlPieces = String(pURL).split('?');
	return urlPieces[0];
}
//---------------------------------------------





//--------------------------------------------- GLOBAL VARS
var LiveStream = new Stream();
var LivePlayer = new Player();
var CompanionAd;
var sMediaPlayer = "#windowsPlayer"; //s = selector
var rootURL = getRootURL(window.location);
//---------------------------------------------


jQuery(document).ready(function()
{
	jQuery(sMediaPlayer).append(LivePlayer.getPlayerCode());
	
	jQuery('#streams').append("<ul></ul>");
	jQuery.each(LiveStream.getStreamNames(), function()
	{
		var param = String(this).toUpperCase().replace(/ /g, '');
		jQuery("ul").append("<li><a href='"+rootURL+"?type="+param+"'>"+this+"</a></li>");
	});
	
	jQuery('#metadata').empty().append("<h1>"+LiveStream.getStreamTitle()+"</h1>");
	jQuery('#metadata').append("<p>"+LiveStream.getStreamDescription()+"</p>");
	
	CompanionAd = new Ad("companion-ad", LiveStream.getAdTag());
	CompanionAd.redrawAd();

	if(getStreamType()=="LCN2") {
		CompanionBannerAd = new BannerAd("superbanner", "http://ad.doubleclick.net/adi/can.fr.canoe.tv/live;sz=728x90;ord=");
		CompanionBannerAd.redrawAd();
	}

});		
	
