// -------------------------------------------------------------------
// WMP_Ad_Player
// -------------------------------------------------------------------
// Copyright GestionPub
// Jérôme Quintard / Nathan Nau
// -------------------------------------------------------------------
// Pré requis :
// -------------------------------------------------------------------
// Fonctionne avec les versions 6.4 et 10 du SDK
// Ne fonctionne qu'avec IE PC à partir de la version 4
// Ne fonctionne qu'en mode bouton visible
// Par mesure de précaution le player doit encadré par un TD ou un DIV
// Ne supporte qu'un seul lecteur dans la page !
// -------------------------------------------------------------------
// REL		07/06/2006		Beta Initial				1.00b  
// ADD		08/06/2006		StartMode					1.01b
// -------------------------------------------------------------------

// Pub du début
var Ad_Pre_BgColor 		= '#FFFFFF';
var Ad_Pre_GP_Id		= 0
var Ad_Pre_GP_Width		= 300
var Ad_Pre_GP_Height	= 250

// Pub à la fin
var Ad_Post_BgColor 	= Ad_Pre_BgColor;
var Ad_Post_GP_Id		= Ad_Pre_GP_Id;
var Ad_Post_GP_Width	= Ad_Pre_GP_Width;
var Ad_Post_GP_Height	= Ad_Pre_GP_Height;

var Legend_Show			= true;
var Legend_Title1		= 'Lecture dans <b><$NBSECONDE$></b> <$LIBELLESECONDE$>';
var Legend_Title2 		= 'Cliquez sur <b>play</b> pour jouer la vidéo';
var Legend_Title3		= 'Lecture de la vidéo';
var Legend_Title4		= 'Chargement de la vidéo en cours';
var Legend_BgColor 		= '#000000';
var Legend_Height		= 16;

// Normalement...
// Pour WMP 6.4 Alignment = 1, Style = Aucun, Position = 0, ExtraPos = 0
// Pour WMP 10  Alignment = 0, Style = padding-left:15px; padding-top:1px; color: #7BA6FF; font-family: arial; font-size: 11px, Position = 1, ExtraPos = 1

var Legend_Alignment 	= 1;  // 0:Gauche, 1:Centre, 2:Droite
var Legend_Style		= 'padding-left:15px; padding-top:1px; color: #7BA6FF; font-family: arial; font-size: 11px'; // Styles supplémentaires à ajouter
var Legend_Position 	= 0;  // 0:En haut 1:En bas
var Legend_ExtraPos 	= 1;  // 0:Cache la barre de chargement de WMP10

// Tempo avant l'affichage de la vidéo
var Tempo				= 5;
var BufferCheck			= 3000;
var StartMode			= 1;  // 0:Buffer, 1:Tempo

// -------------------------------------------------------------------
// Détection du navigateur
// -------------------------------------------------------------------

var DOM = (document.getElementById) ? true : false;
var IE4 = (document.all && !DOM) ? true : false;
var IE  = (document.all) ? true : false;
var OP  = (window.opera) ? true : false;
var MAC = (navigator.appVersion.indexOf("Mac") != -1) ? true : false;

var Run 	 			= 0;
var WaitHandler			= 0
var Elapsed	 			= 0; 	   // La v1 ne supporte qu'un seul player
var PlayedOnce 			= false;   // par page. Ces éléments sont globaux
var FinishedBuffering 	= false;
var BufferCompleted 	= false;
var DontPlayAgain 		= false;

function detectWMP() {
	// On récupère la collection des WMP
	if ((IE || IE4) && !OP && !MAC) { 
		var WMPs = enumerateWMP();

		// On attends que la collection se remplisse (chargement de la page)
		if (WMPs.length==0){
			if (Run == 0) Run = setInterval('detectWMP()', 500);
			return;
		} else if (Run != 0) clearInterval(Run);
		for (var i=0;i<WMPs.length;i++) processWMP(WMPs[i]);
	}
}

function enumerateWMP() {
	var Ret = new Array;

	// -------------------------------------------------------------------
	// On énumère les WMP de la page
	// -------------------------------------------------------------------

	if (IE)  { var WMPs = document.getElementsByTagName('object'); }
	if (IE4) { var WMPs = document.all.tags('object') }

	for (var i=0;i<WMPs.length;i++) {
		WMP = WMPs[i] // On prend un WMP de la liste
		
		// On récupère les CLASSID des object
		var H = WMP.outerHTML.toLowerCase() // Code Outer HTML de l'object
		var Cs = { // ClassID des ActiveX de WMP sur IE
			"22D6F312-B0F6-11D0-94AB-0080C74C7E95" : true, // v6.4 SDK
			"6BF52A52-394A-11D3-B153-00C04F79FAA6" : true  // v10 SDK
		};

		var P = H.indexOf('clsid'); // Position du CLSID dans l'object
		if (P != -1) { // Il y a au moins un CLSID dans la page
			P = P+6; // On se déplace pour pas prendre CLSID:
			var C = H.substring(P, P+36).toUpperCase(); // On récupère le CLSID
			if (Cs[C]) {
				// Récupère différentes propriétés de chaque object
				var W = !OP ? WMP.width  : WMP.clientWidth;
				var H = !OP ? WMP.height : WMP.clientHeight;
				var L = getPos(WMP,'X');
				var T = getPos(WMP,'Y');
				var V = typeof(WMP.controls)=='undefined' ? 6.4 : 10;
	
				var Controls  = typeof(WMP['ShowControls'])!='undefined'  ? WMP['ShowControls']  : true;
				var StatusBar = typeof(WMP['ShowStatusBar'])!='undefined' ? WMP['ShowStatusBar'] : false;
				var Display   = typeof(WMP['ShowDisplay'])!='undefined'   ? WMP['ShowDisplay']   : false;
				WMP['AutoStart'] = true; // On oblige l'autostart
				
				// On oblige l'affichage de la fenêtre avec la hauteur Status bar
				if (Legend_ExtraPos && V==10) StatusBar = 1;
				
				var State 	  = WMP.playstate;
				
					// On les mets ensuite dans un tableau
				var Params = new Array(WMP, W, H, L, T, V, Controls, StatusBar, Display, State, i);
				
				// Que l'on inclu dans le résultat
				Ret.push(Params);
			}
		}
	}
	return Ret;
}

function getPos(Ctrl, Axis) {
	var Pos = 0;
	while (Ctrl) { if (Ctrl.tagName == 'BODY') { break; } Pos += (Axis=='X') ? Ctrl.offsetLeft: Ctrl.offsetTop; Ctrl = Ctrl.offsetParent; }
	return Pos;
}

function processWMP(WMPObj) {

	// -------------------------------------------------------------------
	// On insert le code pour chaque WMP trouvé
	// -------------------------------------------------------------------

	var WMP = WMPObj[0];
	var W   = WMPObj[1]; var H = WMPObj[2];
	var L 	= WMPObj[3]; var T = WMPObj[4];
	var V 	= WMPObj[5];
	
	var Controls  	= WMPObj[6];
	var StatusBar 	= WMPObj[7];
	var Display   	= WMPObj[8];
	var AutoStart 	= WMPObj[10];

	var Id		  	= 'adGP_' + WMPObj[11];
	var P   		= 0;
	
	if (!Display && Controls) { // Incompatible avec le panneau Display et les contrôles cachés
		if (StatusBar) { P = 64 } else P = 45;
		
		var Code = ''

		// Positionne la légende en haut
		if (Legend_Show && Legend_Position==0) Code+=getLegendCode(Id,W)
		
		Code += '<div id="' + Id + '_1' + '" style="' +
					'width:' + W + 'px;' +
	           	    'height:' + (H-P-(Legend_Show?Legend_Height:0)) + 'px;' + 
					'background-color:' + Ad_Pre_BgColor + ';' +
					'position:relative;display:none;">' +
					'<table cellpadding="0" cellspacing="0" width="100%" height="100%" align="center" valign="middle">' +
					'<tr align="center" valign="middle"><td align="center" valign="middle">' +
					'<IFRAME SRC="http://fl01.ct2.comclick.com/aff_frame.ct2?id_regie=1&num_editeur=300&num_site=4&num_emplacement=7" WIDTH="300" align="center" valign="middle" HEIGHT="250" MARGINWIDTH="0" MARGINHEIGHT="0" HSPACE="0" VSPACE="0" FRAMEBORDER="0" SCROLLING=no BORDERCOLOR="#000000"></IFRAME>' +
					'</td></tr></table>' +
			   '</div>';
			   
		Code += '<div id="' + Id + '_2' + '" style="' +
					'width:' + W + 'px;' +
	           	    'height:' + (H-P-(Legend_Show?Legend_Height:0)) + 'px;' + 
					'background-color:' + Ad_Post_BgColor + ';' +
					'position:relative;display:none;">' +
					'<table cellpadding="0" cellspacing="0" width="100%" height="100%" align="center" valign="middle">' +
					'<tr align="center" valign="middle"><td align="center" valign="middle">' +
					'<IFRAME SRC="http://fl01.ct2.comclick.com/aff_frame.ct2?id_regie=1&num_editeur=300&num_site=4&num_emplacement=7" WIDTH="300" align="center" valign="middle" HEIGHT="250" MARGINWIDTH="0" MARGINHEIGHT="0" HSPACE="0" VSPACE="0" FRAMEBORDER="0" SCROLLING=no BORDERCOLOR="#000000"></IFRAME>' +
					'</td></tr></table>' +
			   '</div>';

		// Positionne la légende en bas
		if (Legend_Show && Legend_Position==1) Code+=getLegendCode(Id,W)

		WMP.insertAdjacentHTML('beforeBegin', Code);
		getMediaState(); // On récupère l'état courant (positionne la vidéo)
		if (StartMode==0) {
			setInterval('checkBuffer()', BufferCheck);
		} else {
			WaitHandler = setInterval('wait()', 1000); // Mets en attente la lecture
		}
	}
}

function checkBuffer() {
	BufferCompleted = true;
	if (DontPlayAgain) return;

	// On vérifie l'état
	setInterval('getMediaState()', 50);

	if (FinishedBuffering) { 
		var WMPs = enumerateWMP();
		for (var i=0;i<WMPs.length;i++) {
			var WMPObj 	  = WMPs[i];
			var WMP		  = WMPObj[0];
			var V 	   	  = WMPObj[5];
			var State  	  = WMPObj[9];

			if ((State != 0 && V==6.4) || ((State !=1) && V==10)) { // Si le décompte est passé
				if (V==6.4) { WMP.play() } else WMP.controls.play(); // On démarre la vidéo
			}
		}
		DontPlayAgain = true;
	}
}

function getLegendCode(Id, W) {
	return '<div id="' + Id + '_3' + '" style="' +
				'width:' + W + 'px;' +
	     	    'height:' + Legend_Height + 'px;' + 
				'background-color:' + Legend_BgColor + ';' +
				'position:relative;display:none;vertical-align:middle;' + Legend_Style + '" ' +
				'align="' + getAlignment(Legend_Alignment) + '">' +
				(StartMode==0 ? Legend_Title4 : setRemain()) +
		   '</div>';
}

function getAlignment(Alignment) {
	switch (Alignment) {
		case 0: return 'left';   break;
		case 1: return 'center'; break;
		case 2: return 'right';  break;
	}
}

function wait() {
	Elapsed+=1
	var WMPs = enumerateWMP();
	for (var i=0;i<WMPs.length;i++) {
		var WMPObj 	  = WMPs[i];
		var WMP		  = WMPObj[0];
		var V 	   	  = WMPObj[5];
		var State  	  = WMPObj[9];
		var Id		  = 'adGP_' + WMPObj[11];

		var Legend 	  = GetId(Id + '_3');

		if (Elapsed < Tempo) Legend.innerHTML = setRemain(Legend.innerHTML); // Affiche le décompte

		if ((Elapsed == Tempo) && ((State != 0 && V==6.4) || ((State !=1) && V==10))) { // Si le décompte est passé
			clearInterval(WaitHandler); // On est à la fin du timer	
			if (V==6.4) { WMP.play() } else WMP.controls.play(); // On démarre la vidéo
			setInterval('getMediaState()', 50); // On vérifie l'état de la lecture
		} else {
			if (V==6.4) { WMP.pause() } else WMP.controls.pause(); // Sinon on mets en pause
		}
	}
}

function GetId(Ctl) {
	return document.getElementById(Ctl)
}

function setRemain() {
	var Remain = Tempo-Elapsed;
	var txt = (Remain!=0) ? Legend_Title1 : Legend_Title3;
	txt = txt.replace('<$NBSECONDE$>', Remain);
	return txt.replace('<$LIBELLESECONDE$>', 'seconde' + (Remain>1?'s':''));
}

function setDisplay(Id, Nb, Display) {
	GetId(Id + '_' + Nb).style.display = (Display==1?'block':'none');
}

function getMediaState() {
	var WMPs = enumerateWMP();

	for (var i=0;i<WMPs.length;i++) {
		var WMPObj 	  = WMPs[i];
		var H 		  = WMPObj[2];
		var V 	   	  = WMPObj[5];
		var StatusBar = WMPObj[7];
		var State  	  = WMPObj[9];
		var Id		  = 'adGP_' + WMPObj[11];
		
		// Si lecture, avance rapide ou arrière rapide
		if ((State == 2 && V==6.4) || (State == 3 && V==10) || State == 4 || State == 5) {
			FinishedBuffering = true;
			PlayedOnce = true;

			setDisplay(Id,1,0);
			setDisplay(Id,2,0);
			setDisplay(Id,3,0);

			WMP.style.height = H;
		} else {
			if (StatusBar) { P = 64 } else P = 45;
			
			if ((((!PlayedOnce && State!=1) || State==6) && V==10) || (!PlayedOnce && State!=0 && V==6.4)) {
				setDisplay(Id,1,1);
				setDisplay(Id,2,0);
			} else {
				setDisplay(Id,1,0);
				setDisplay(Id,2,1);
			}

			setDisplay(Id,3,1);
			GetId(Id + '_3').innerHTML = !PlayedOnce ? (StartMode==0 ? Legend_Title4 : setRemain()):Legend_Title2;

			WMP.style.height = P;
			WMP.style.top 	 = H-P;
		}
	}
}

// On démarre la détection		
//document.body.onload = function() {
	//document.body.onload;
	detectWMP();
//}