/* menuDropdown.js - implements a dropdown menu based on a HTML list
 * Author: Dave Lindquist (http://www.gazingus.org)
 * Modified by: Nicolas Lesbats (nicolas lesbats at laposte net)
 * Version: 0.1b (2004-03-11)
 */

var maxWidth = 50;
/* maximum width of the submenus (in 'em' units) */

var borderBox  = false;
var horizontal = new Array();
var menuTop    = new Array();
var menuHeight = new Array();
var menuLeft   = new Array();
var menuWidth  = new Array();

window.onload = function() { loadMenu(); }

function loadMenu2() {
  if (!document.getElementById) return;
  var i = 0, j, root, submenus, node, li, link, division;
  while (true) {
    root = document.getElementById("menuList" + (i + 1));
    if (root == null)
      break;
    submenus = root.getElementsByTagName("ul");
    division = root.parentNode;

    if (document.createElement) {
      /* Win/IE5-6 trick: makes the whole width of the submenus clickable
       */
      for (j = 0; j < submenus.length; j++) {
        node = submenus.item(j);
        if (node.className == "menu" && node.getElementsByTagName("ul").length == 0) {
          li = document.createElement("li");
          node.appendChild(li);
          li.style.position = "absolute";
          li.style.visibility = "hidden";
        }
      }
      /* checks whether the 'width' property applies to the border box or
       * the content box of an element
       */
      if (i == 0) {
        li.style.display = "block";
        li.style.padding = "0";
        li.style.width   = "2px";
        li.style.border  = "1px solid";
        if (li.offsetWidth == 2)
          borderBox = true;
      }
    }

    initializeMenu(root, division, i);

    for (j = 0; j < submenus.length; j++) {
      node = submenus.item(j);
      if (node.className == "menu") {
        link = node.previousSibling;
        while (link != null) {
          if (link.className == "actuator") {
            initializeSubmenu(node, link, root, division);
            node.set();
            break;
          }
          link = link.previousSibling;
        }
      }
    }
    i++;
  }
}

function loadMenu()
{
	if (!document.getElementById) return;
	var menus = new Array();
	var j = 0;
	
    menus[j++] = document.getElementById("mainMenu");
    menus[j++] = document.getElementById("mainMenuMembreV");
    menus[j++] = document.getElementById("mainMenuMembreH");
	
	if(menus[0] == null && menus[1] == null && menus[2] == null)
		return;

    for( j=0 ; j<menus.length ; j++ )
    {
	    if(menus[j] != null)
	    {
		    var menuElt = menus[j].getElementsByTagName('li');
			
			
			for(var i=0 ; i<menuElt.length; i++)
			{
				if(menuElt[i].className == "go_submenu")
				{
					menuElt[i].onmouseover = function () { 
						this.getElementsByTagName("ul")[0].style.visibility="visible";
					}
					
					menuElt[i].onmouseout = function () { 
						this.getElementsByTagName("ul")[0].style.visibility="hidden";
					}
				}
			}
		}
    }
}

function initializeMenu(root, div, index) {

  horizontal[index] = menuIsHorizontal(root);
  menuTop[index]    = div.offsetTop;
  menuHeight[index] = div.offsetHeight;
  menuLeft[index]   = div.offsetLeft;
  menuWidth[index]  = div.offsetWidth;

  div.horizontal = function() {
    return horizontal[index];
  }

  div.checkMove = function() {
    if (this.hasMoved()) this.resetMenu();
  }

  div.hasMoved = function() {
    if (menuTop[index]    == this.offsetTop    &&
        menuHeight[index] == this.offsetHeight &&
        menuLeft[index]   == this.offsetLeft   &&
        menuWidth[index]  == this.offsetWidth)
      return false;
    return true;
  }

  div.resetMenu = function() {
    horizontal[index] = menuIsHorizontal(root);
    menuTop[index]    = this.offsetTop;
    menuHeight[index] = this.offsetHeight;
    menuLeft[index]   = this.offsetLeft;
    menuWidth[index]  = this.offsetWidth;

    var submenus = root.getElementsByTagName("ul");
    for (var j = 0; j < submenus.length; j++) {
      var node = submenus.item(j);
      if (node.className == "menu") {
        node.style.right = "";
        node.style.left  = "";
        if (!window.opera)
          node.style.width = "";
        node.set();
      }
    }
  }
}

function menuIsHorizontal(root) {
  var first = firstElement(root, "LI");
  if (first != null) {
    var second = first.nextSibling;
    while (second != null) {
      if (second.tagName == "LI") {
        first  = firstElement(first,  "A");
        second = firstElement(second, "A");
        if (first != null && second != null)
          if (first.offsetLeft == second.offsetLeft)
            return false;
        return true;
      }
      second = second.nextSibling;
    }
  }
  return true;
}

function initializeSubmenu(menu, actuator, root, div) {

  var parent = menu.parentNode;

  parent.onmouseover = function() {
    div.checkMove();
    menu.style.visibility = "visible";
  }

  actuator.onfocus = function() {
    div.checkMove();
    menu.style.visibility = "visible";
  }

  parent.onmouseout = function() {
    menu.style.visibility = "";
  }

  var tags = menu.getElementsByTagName("a");
  var link = tags.item(tags.length - 1);
  if (!link.onblur)
    link.onblur = function() {
      var node = link.parentNode.parentNode;
      while (node != menu) {
        node.style.visibility = "";
        node = node.parentNode.parentNode;
      }
      menu.style.visibility = "";
    }

  if (parent.parentNode == root) {
    menu.set = function() {
      setLocation1(this, actuator, root, div);
    }
  } else {
    menu.set = function() {
      setLocation2(this, actuator, div);
    }
  }
}

function setLocation1(menu, actuator, root, div) {
  var first = firstElement(menu, "LI");
  if (first != null)
    if (first.offsetParent == menu)
      setWidth(menu);
  if (div.horizontal()) {
    if (actuator.offsetParent == menu.offsetParent) {
      menu.style.left = actuator.offsetLeft + "px";
      menu.style.top  = actuator.offsetTop  + actuator.offsetHeight + "px";
    } else {
      /* happens in Win/IE5-6 when some ancestors are 'static' and have their
       * 'width' or 'height' different than 'auto' */
      var parent = actuator.offsetParent;
      var top  = 0;
      var left = 0;
      while (parent != menu.offsetParent && parent != null) {
        top  = top  + parent.offsetTop;
        left = left + parent.offsetLeft;
        parent = parent.offsetParent;
      }
      menu.style.left = left + actuator.offsetLeft + "px";
      menu.style.top  = top  + actuator.offsetTop  + actuator.offsetHeight + "px";
    }
  } else {
    menu.style.top = actuator.offsetTop + "px";
    menu.style.left = (div.offsetWidth + actuator.offsetWidth) / 2 + "px";
  }
}

function setLocation2(menu, actuator, div) {
  if (menu.offsetParent != document.body)
    setWidth(menu);
  menu.style.top = actuator.offsetTop + "px";
  menu.style.left = actuator.offsetWidth + "px";
}

function setWidth(menu) {
  menu.style.right = - maxWidth + "em";
  var width  = 0;
  var height = 0;
  var items = menu.getElementsByTagName("a");
  for (var i = 0; i < items.length; i++) {
    var link = items.item(i);
    if (link.parentNode.parentNode == menu) {
      height = height + link.offsetHeight;
      if (link.offsetWidth > width)
        width = link.offsetWidth;
    }
  }
  if (borderBox)
    width = width + (menu.offsetHeight - height);
  menu.style.width = width + "px";
}

function firstElement(node, name) {
  var first = node.firstChild;
  while (first != null) {
    if (first.tagName == name)
      return first;
    first = first.nextSibling;
  }
  return null;
}
/*
function cacherSelectBox(menuactif)
{


}*/





//Script ouvrant une popup centrée pour afficher un message concernant la méthode de résiliation
function popup() 
{
 var wi = "365";
 var hg = "350";
 window.open("http://www.cinezime.fr/private/demande_resiliation.php?motif=resilier","popupResiliation","width="+wi+",height="+hg+",top="+(window.screen.height-hg)/2+",left="+(window.screen.width-wi)/2+",toolbar=no,location=no, directories=no,status=no,scrollbars=no,resizable=1");
}


//Script ouvrant une popup centrée si l'abonné en Pack essaie de déclencher une demande alors qu'il n'a pas 20 films dans sa liste
function popup2() 
{
 var wi = "365";
 var hg = "280";
 window.open("http://www.cinezime.fr/private/alerte_nb_films_insuffisant_pack.php","alerte","width="+wi+",height="+hg+",top="+(window.screen.height-hg)/2+",left="+(window.screen.width-wi)/2+",toolbar=no,location=no, directories=no,status=no,scrollbars=no,resizable=1");
}


//Script ouvrant une popup centrée si l'abonné se loggue alors qu'il n'a pas 20 films dans sa liste
function popup3() 
{
 var wi = "365";
 var hg = "280";
 window.open("http://www.cinezime.fr/private/alerte_nb_films_insuffisant_abo.php","alerte","width="+wi+",height="+hg+",top="+(window.screen.height-hg)/2+",left="+(window.screen.width-wi)/2+",toolbar=no,location=no, directories=no,status=no,scrollbars=no,resizable=1");
}


//Script ouvrant une popup centrée pour afficher un message concernant la méthode de mise en sommeil du compte d'un abonné
function popup4() 
  {
 var wi = "365";
 var hg = "350";
 window.open("http://www.cinezime.fr/private/demande_resiliation.php?motif=suspendre","popupResiliation","width="+wi+",height="+hg+",top="+(window.screen.height-hg)/2+",left="+(window.screen.width-wi)/2+",toolbar=no,location=no, directories=no,status=no,scrollbars=no,resizable=1");
}


//Script ouvrant une popup centrée pour afficher un message concernant la relance d'un abonnement
function popup5() 
{
 var wi = "380";
 var hg = "380";
 window.open("http://www.cinezime.fr/private/demande_resiliation.php?motif=relancer","popupResiliation","width="+wi+",height="+hg+",top="+(window.screen.height-hg)/2+",left="+(window.screen.width-wi)/2+",toolbar=no,location=no, directories=no,status=no,scrollbars=no,resizable=1");
}

//Script ouvrant une popup centrée pour afficher un message concernant la deresiliation d'un abonnement
function popup6() 
{
 var wi = "380";
 var hg = "380";
 window.open("http://www.cinezime.fr/private/demande_resiliation.php?motif=deresilier","popupResiliation","width="+wi+",height="+hg+",top="+(window.screen.height-hg)/2+",left="+(window.screen.width-wi)/2+",toolbar=no,location=no, directories=no,status=no,scrollbars=no,resizable=1");
}

//Script ouvrant une popup centrée pour afficher un flash sur comment ca marche
function popup7() 
{
 var wi = "400";
 var hg = "260";
 window.open("http://www.cinezime.fr/flash_ccm.php","popupFlash","width="+wi+",height="+hg+",top="+(window.screen.height-hg)/2+",left="+(window.screen.width-wi)/2+",toolbar=no,location=no, directories=no,status=no,scrollbars=no,resizable=0");
}

//Script ouvrant une popup centrée pour afficher les infos de paiement pour les inscriptions payees en cheques
function popup8(numdossier,lst_cheque) 
{
 var wi = "500";
 var hg = "600";
 window.open("http://www.cinezime.fr/inscription_recapitulatif.php?num_dossier="+numdossier+"&lst_cheque="+lst_cheque,"popupInscription","width="+wi+",height="+hg+",top="+(window.screen.height-hg)/2+",left="+(window.screen.width-wi)/2+",toolbar=no,location=no, directories=no,status=no,scrollbars=no,resizable=0");
}

//Script ouvrant une popup centrée pour afficher les infos de paiement pour les packs rachetes par cheque
function popup9(numdossier,lst_cheque,id_offre,id_abonnement) 
{
 var wi = "500";
 var hg = "600";
 window.open("http://www.cinezime.fr/inscription_recapitulatif.php?id_abonnement="+id_abonnement+"&id_offre="+id_offre+"&num_dossier="+numdossier+"&lst_cheque="+lst_cheque,"popupInscription","width="+wi+",height="+hg+",top="+(window.screen.height-hg)/2+",left="+(window.screen.width-wi)/2+",toolbar=no,location=no, directories=no,status=no,scrollbars=no,resizable=0");
}

//Script ouvrant une popup centrée pour recueillir les adresses email des prospect de la promo Noel 2005
function popup10() 
{
 var wi = "200";
 var hg = "135";
 window.open("http://www.cinezime.fr/images/pub/saintvalentin2006/noel2005.php","popupValentin2005","width="+wi+",height="+hg+",top="+(window.screen.height-hg)/2+",left="+(window.screen.width-wi)/2+",toolbar=no,location=no, directories=no,status=0,scrollbars=no,resizable=0");
}

//Script ouvrant une popup centrée pour recueillir les adresses email des prospect de la promo Noel 2005
function popup_ajout_film(id_oeuvre,num_edition,mode) 
{
 var wi = "420";
 var hg = "480";
 window.open("http://www.cinezime.fr/private/confirmation_ajout_film.php?id_oeuvre="+id_oeuvre+"&num_edition="+num_edition+"&mode="+mode,"Confirmation_Ajout_Film","width="+wi+",height="+hg+",top="+(window.screen.height-hg)/2+",left="+(window.screen.width-wi)/2+",toolbar=no,location=no, directories=no,status=0,scrollbars=no,resizable=0");
}

//Script ouvrant une popup centrée pour la suppression des demandes
function popup_suppr_demande(id_demande,titre,priorite) 
{
 var wi = "420";
 var hg = "250";
 window.open("http://www.cinezime.fr/private/confirmation_suppr_demande.php?id_demande="+id_demande+"&titre="+titre+"&priorite="+priorite,"Confirmation_Suppression_demande","width="+wi+",height="+hg+",top="+(window.screen.height-hg)/2+",left="+(window.screen.width-wi)/2+",toolbar=no,location=no, directories=no,status=0,scrollbars=no,resizable=0");
}

//Script ouvrant une popup centrée pour informé l'abonnée pack selon le cas
function popup_demande_DVD_pack(type) 
{
 var wi = "420";
 var hg = "250";
 if(type=='encours')
  window.open("http://www.cinezime.fr/private/alerte_dvd_envoi_encours_pack.php","Envoi_de_DVD","width="+wi+",height="+hg+",top="+(window.screen.height-hg)/2+",left="+(window.screen.width-wi)/2+",toolbar=no,location=no, directories=no,status=0,scrollbars=no,resizable=0");
 else
  window.open("http://www.cinezime.fr/private/alerte_dvd_pack_vide.php","Pack_vide","width="+wi+",height="+hg+",top="+(window.screen.height-hg)/2+",left="+(window.screen.width-wi)/2+",toolbar=no,location=no, directories=no,status=0,scrollbars=no,resizable=0");
}

// script lancant un appel ajax pour ajouter un film à sa liste de demande
function ajoute_demande(url, link_elem_id)
{
	var ajax= new PFW_AJAX(url);
	ajax.default_action_OK= ajax.action_OK;
	ajax.link_elem_id= link_elem_id;
	ajax.action_OK= function()
	{
		this.default_action_OK();
		var error= this.getResponse().getXML_content().getElementsByTagName('error');
		if(error && error[0] && error[0].firstChild.nodeValue.length>0)
		{
			alert(error[0].firstChild.nodeValue);
		}
		// tourne l'image à off
		var img_off= this.getResponse().getXML_content().getElementsByTagName('img_off');
		if(img_off && img_off[0] && img_off[0].firstChild.nodeValue.length>0)
		{
			var img= document.getElementById(img_off[0].firstChild.nodeValue)
			if(img)
				img.src= 'http://www.cinezime.fr/images/liste/bouton/louer_off.gif';
		}
		// passe la classe à off
		if(this.link_elem_id)
		{
			var link= document.getElementById(this.link_elem_id);
			var cl= link.className;
			if(cl.substring(cl.length-3, cl.length)=='_On')
			{
				link.className= cl.substring(0, cl.length-3)+"_Off";
			}
		}
	}
	ajax.HTTPrequest();
		
}// Vérifie si un Email est correct
function IsEmail(email)
{
	var saisie,saisie1,saisie2,saisie3;
	saisie = email.indexOf("@");
	if (saisie!=(-1))
	{
  			longueur = email.length;
  			saisie1 = email.substring(saisie+1,longueur);
  			saisie2 = saisie1.indexOf(".");
  			longueur = saisie1.length;
  			saisie3 = saisie1.substring(saisie2+1,longueur);
  			if (saisie2==(-1)) return false;
  			else
  			{
     			if (saisie3 == "") return false;
     			else return true;
  			}
	}
	else return false;
}
	
	
// Vérifie si une chaine ne contient que des nombres
function IsInteger(NumStr)
{
	var regEx=/^[0-9]+$/;
	var ret=false;
	if (regEx.test(NumStr)) ret=true;
	return ret;
}


// Cette fonction vérifie le format JJ/MM/AAAA saisi et la validité de la date.
// Le séparateur est défini dans la variable separateur
function CheckDate(d) 
{
  var amin=1850; // année mini
  var amax=2500; // année maxi
  var separateur="/"; // separateur entre jour/mois/annee
  var j=(d.substring(0,2));
  var m=(d.substring(3,5));
  var a=(d.substring(6));
  var ok=1;
  if ( ((isNaN(j))||(j<1)||(j>31)) && (ok==1) ) {
     alert("Le jour n'est pas correct."); ok=0;
  }
  if ( ((isNaN(m))||(m<1)||(m>12)) && (ok==1) ) {
     alert("Le mois n'est pas correct."); ok=0;
  }
  if ( ((isNaN(a))||(a<amin)||(a>amax)) && (ok==1) ) {
     alert("L'année n'est pas correcte."); ok=0;
  }
  if ( ((d.substring(2,3)!=separateur)||(d.substring(5,6)!=separateur)) && (ok==1) ) {
     alert("Les séparateurs doivent être des "+separateur); ok=0;
  }
  if (ok==1) {
     var d2=new Date(a,m-1,j);
     j2=d2.getDate();
     m2=d2.getMonth()+1;
     a2=d2.getYear();
     if (a2<=100) {a2=1900+a2}
     if ( (j!=j2)||(m!=m2)||(a!=a2) ) {
        alert("La date "+d+" n'existe pas !");
        ok=0;
     }
 ok=d2;
  }
  return ok;
}
			
			
// Cette fonction retourne une chaîne de type :
//  "15 ans et 6 mois"		
function tjs_age(dt) 
{
	var d=CheckDate(dt)
	var m=new Date()
	var age=""; var age_a=0;var age_m=0;
	if (d!=0) 
	{
		if (d.getTime()>m.getTime()) 
		{
				alert('Votre date de naissance est supérieure à la date du jour.');
		return false;
		}	
		var checkDate=new Date();
		checkDate.setDate(d.getDate());
		checkDate.setMonth(d.getMonth());
		checkDate.setFullYear(d.getFullYear()+18);	
	} 
	else 
	{
		alert('Veuillez saisir une Date valide au format : jj/mm/aaaa');
		return false;
	}
	if (checkDate.getTime()>m.getTime())
	{
		alert("Vous devez être majeur pour accéder pour accéder à cette partie du site !");
		return false;
	}
	else
	{
		return true;
	}
}
function EcrireCookie(nom, valeur)
{
	var argv=EcrireCookie.arguments;
	var argc=EcrireCookie.arguments.length;
	var expires=(argc > 2) ? argv[2] : null;
	var path=(argc > 3) ? argv[3] : null;
	var domain=(argc > 4) ? argv[4] : null;
	var secure=(argc > 5) ? argv[5] : false;
	document.cookie=nom+"="+escape(valeur)+
	((expires==null) ? "" : ("; expires="+expires.toGMTString()))+
	((path==null) ? "" : ("; path="+path))+
	((domain==null) ? "" : ("; domain="+domain))+
	((secure==true) ? "; secure" : "");
}

function getCookieVal(offset)
{
	var endstr=document.cookie.indexOf (";", offset);
	if (endstr==-1) endstr=document.cookie.length;
	return unescape(document.cookie.substring(offset, endstr));
}

function LireCookie(nom)
{
	var arg=nom+"=";
	var alen=arg.length;
	var clen=document.cookie.length;
	var i=0;
	while (i<clen)
	{
		var j=i+alen;
		if (document.cookie.substring(i, j)==arg) return getCookieVal(j);
		i=document.cookie.indexOf(" ",i)+1;
		if (i==0) break;
	}
	return null;
}
/**
 * SWFObject v1.5: Flash Player detection and embed - http://blog.deconcept.com/swfobject/
 *
 * SWFObject is (c) 2007 Geoff Stearns and is released under the MIT License:
 * http://www.opensource.org/licenses/mit-license.php
 *
 */
if(typeof deconcept=="undefined"){var deconcept=new Object();}if(typeof deconcept.util=="undefined"){deconcept.util=new Object();}if(typeof deconcept.SWFObjectUtil=="undefined"){deconcept.SWFObjectUtil=new Object();}deconcept.SWFObject=function(_1,id,w,h,_5,c,_7,_8,_9,_a){if(!document.getElementById){return;}this.DETECT_KEY=_a?_a:"detectflash";this.skipDetect=deconcept.util.getRequestParameter(this.DETECT_KEY);this.params=new Object();this.variables=new Object();this.attributes=new Array();if(_1){this.setAttribute("swf",_1);}if(id){this.setAttribute("id",id);}if(w){this.setAttribute("width",w);}if(h){this.setAttribute("height",h);}if(_5){this.setAttribute("version",new deconcept.PlayerVersion(_5.toString().split(".")));}this.installedVer=deconcept.SWFObjectUtil.getPlayerVersion();if(!window.opera&&document.all&&this.installedVer.major>7){deconcept.SWFObject.doPrepUnload=true;}if(c){this.addParam("bgcolor",c);}var q=_7?_7:"high";this.addParam("quality",q);this.setAttribute("useExpressInstall",false);this.setAttribute("doExpressInstall",false);var _c=(_8)?_8:window.location;this.setAttribute("xiRedirectUrl",_c);this.setAttribute("redirectUrl","");if(_9){this.setAttribute("redirectUrl",_9);}};deconcept.SWFObject.prototype={useExpressInstall:function(_d){this.xiSWFPath=!_d?"expressinstall.swf":_d;this.setAttribute("useExpressInstall",true);},setAttribute:function(_e,_f){this.attributes[_e]=_f;},getAttribute:function(_10){return this.attributes[_10];},addParam:function(_11,_12){this.params[_11]=_12;},getParams:function(){return this.params;},addVariable:function(_13,_14){this.variables[_13]=_14;},getVariable:function(_15){return this.variables[_15];},getVariables:function(){return this.variables;},getVariablePairs:function(){var _16=new Array();var key;var _18=this.getVariables();for(key in _18){_16[_16.length]=key+"="+_18[key];}return _16;},getSWFHTML:function(){var _19="";if(navigator.plugins&&navigator.mimeTypes&&navigator.mimeTypes.length){if(this.getAttribute("doExpressInstall")){this.addVariable("MMplayerType","PlugIn");this.setAttribute("swf",this.xiSWFPath);}_19="<embed type=\"application/x-shockwave-flash\" src=\""+this.getAttribute("swf")+"\" width=\""+this.getAttribute("width")+"\" height=\""+this.getAttribute("height")+"\" style=\""+this.getAttribute("style")+"\"";_19+=" id=\""+this.getAttribute("id")+"\" name=\""+this.getAttribute("id")+"\" ";var _1a=this.getParams();for(var key in _1a){_19+=[key]+"=\""+_1a[key]+"\" ";}var _1c=this.getVariablePairs().join("&");if(_1c.length>0){_19+="flashvars=\""+_1c+"\"";}_19+="/>";}else{if(this.getAttribute("doExpressInstall")){this.addVariable("MMplayerType","ActiveX");this.setAttribute("swf",this.xiSWFPath);}_19="<object id=\""+this.getAttribute("id")+"\" classid=\"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000\" width=\""+this.getAttribute("width")+"\" height=\""+this.getAttribute("height")+"\" style=\""+this.getAttribute("style")+"\">";_19+="<param name=\"movie\" value=\""+this.getAttribute("swf")+"\" />";var _1d=this.getParams();for(var key in _1d){_19+="<param name=\""+key+"\" value=\""+_1d[key]+"\" />";}var _1f=this.getVariablePairs().join("&");if(_1f.length>0){_19+="<param name=\"flashvars\" value=\""+_1f+"\" />";}_19+="</object>";}return _19;},write:function(_20){if(this.getAttribute("useExpressInstall")){var _21=new deconcept.PlayerVersion([6,0,65]);if(this.installedVer.versionIsValid(_21)&&!this.installedVer.versionIsValid(this.getAttribute("version"))){this.setAttribute("doExpressInstall",true);this.addVariable("MMredirectURL",escape(this.getAttribute("xiRedirectUrl")));document.title=document.title.slice(0,47)+" - Flash Player Installation";this.addVariable("MMdoctitle",document.title);}}if(this.skipDetect||this.getAttribute("doExpressInstall")||this.installedVer.versionIsValid(this.getAttribute("version"))){var n=(typeof _20=="string")?document.getElementById(_20):_20;n.innerHTML=this.getSWFHTML();return true;}else{if(this.getAttribute("redirectUrl")!=""){document.location.replace(this.getAttribute("redirectUrl"));}}return false;}};deconcept.SWFObjectUtil.getPlayerVersion=function(){var _23=new deconcept.PlayerVersion([0,0,0]);if(navigator.plugins&&navigator.mimeTypes.length){var x=navigator.plugins["Shockwave Flash"];if(x&&x.description){_23=new deconcept.PlayerVersion(x.description.replace(/([a-zA-Z]|\s)+/,"").replace(/(\s+r|\s+b[0-9]+)/,".").split("."));}}else{if(navigator.userAgent&&navigator.userAgent.indexOf("Windows CE")>=0){var axo=1;var _26=3;while(axo){try{_26++;axo=new ActiveXObject("ShockwaveFlash.ShockwaveFlash."+_26);_23=new deconcept.PlayerVersion([_26,0,0]);}catch(e){axo=null;}}}else{try{var axo=new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7");}catch(e){try{var axo=new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6");_23=new deconcept.PlayerVersion([6,0,21]);axo.AllowScriptAccess="always";}catch(e){if(_23.major==6){return _23;}}try{axo=new ActiveXObject("ShockwaveFlash.ShockwaveFlash");}catch(e){}}if(axo!=null){_23=new deconcept.PlayerVersion(axo.GetVariable("$version").split(" ")[1].split(","));}}}return _23;};deconcept.PlayerVersion=function(_29){this.major=_29[0]!=null?parseInt(_29[0]):0;this.minor=_29[1]!=null?parseInt(_29[1]):0;this.rev=_29[2]!=null?parseInt(_29[2]):0;};deconcept.PlayerVersion.prototype.versionIsValid=function(fv){if(this.major<fv.major){return false;}if(this.major>fv.major){return true;}if(this.minor<fv.minor){return false;}if(this.minor>fv.minor){return true;}if(this.rev<fv.rev){return false;}return true;};deconcept.util={getRequestParameter:function(_2b){var q=document.location.search||document.location.hash;if(_2b==null){return q;}if(q){var _2d=q.substring(1).split("&");for(var i=0;i<_2d.length;i++){if(_2d[i].substring(0,_2d[i].indexOf("="))==_2b){return _2d[i].substring((_2d[i].indexOf("=")+1));}}}return "";}};deconcept.SWFObjectUtil.cleanupSWFs=function(){var _2f=document.getElementsByTagName("OBJECT");for(var i=_2f.length-1;i>=0;i--){_2f[i].style.display="none";for(var x in _2f[i]){if(typeof _2f[i][x]=="function"){_2f[i][x]=function(){};}}}};if(deconcept.SWFObject.doPrepUnload){if(!deconcept.unloadSet){deconcept.SWFObjectUtil.prepUnload=function(){__flash_unloadHandler=function(){};__flash_savedUnloadHandler=function(){};window.attachEvent("onunload",deconcept.SWFObjectUtil.cleanupSWFs);};window.attachEvent("onbeforeunload",deconcept.SWFObjectUtil.prepUnload);deconcept.unloadSet=true;}}if(!document.getElementById&&document.all){document.getElementById=function(id){return document.all[id];};}var getQueryParamValue=deconcept.util.getRequestParameter;var FlashObject=deconcept.SWFObject;var SWFObject=deconcept.SWFObject;
var oSwfObject;

function init_player(url_libs, url_file, id_target, domain )
{
	switch( domain )
	{
		case 'VODX':
			var width = 250;
			var height = 200;
			var configFile = url_libs + 'configVODX.xml';
			break;
		case 'LocafilmX':
			var width = 350;
			var height = 300;
			var configFile = url_libs + 'configLocafilmX.xml';
			break;
		case 'Locafilm':
			var width = 360;
			var height = 288;
			var configFile = url_libs + 'configLocafilm.xml';
			break;
	}
	
	swfObject = new SWFObject(url_libs + 'mediaplayer.swf', 'flvPlayerObject', width, height, "0");
	swfObject.addParam('allowscriptaccess','always');
	swfObject.addParam('allowfullscreen','true');
	swfObject.addParam('wmode','opaque');
	
	swfObject.addVariable('config', configFile);
	
	swfObject.addVariable("file", url_file);

	swfObject.write(id_target);
}

function playerReady(obj) {
	var id = obj['id'];
	var version = obj['version'];
	var client = obj['client'];
	oSwfObject = document.getElementById(id);
};

function playerChangeVolume(volume)
{
	if( oSwfObject != null )
	{
		oSwfObject.sendEvent("VOLUME",volume);
	}
}



function flash_home(graph_path,lien1,lien2,nb_films)
{
	document.write('<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,29,0" width="382" height="237">');
		document.write('<param name="movie" value="' + graph_path + 'ccm_accueil/accueil.swf">');
		document.write('<param name="quality" value="high">');
		document.write('<param name="wmode" value="transparent">');
		document.write('<param name="loop" value="false" />');
		document.write('<param name="flashvars" value="nb_films=' + nb_films + '&lien1=' + lien1 + '&lien2=' + lien2 + '">');
		document.write('<embed src="' + graph_path + 'ccm_accueil/accueil.swf" flashvars="nb_films=' + nb_films + '&lien1=' + lien1 + '&lien2=' + lien2 + '" quality="high" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" width="382" height="237" wmode="transparent" loop="false"></embed>');
	document.write('</object>');		
}

function flash_bandeau(graph_path,nb)
{
	document.write('<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,0,0" width="650" height="56">');
		document.write('<param name="movie" value="' + graph_path + 'alertes/650x56.swf" />');
		document.write('<param name="loop" value="false" />');
		document.write('<param name="menu" value="false" />');
		document.write('<param name="quality" value="best" />');
		document.write('<param name="bgcolor" value="#ffffff" />');
		document.write('<param name="flashvars" value="nb_films=' + nb + '">');
		document.write('<param name="wmode" value="transparent">');
		document.write('<embed src="' + graph_path + 'alertes/650x56.swf" loop="false" menu="false" quality="best" bgcolor="#ffffff" width="650" height="56" flashvars="nb_films=' + nb + '" type="application/x-shockwave-flash" wmode="transparent" pluginspage="http://www.macromedia.com/go/getflashplayer" />');
	document.write('</object>');	
}

function flash_inscr(graph_path,flash_image_promo,flash_texte_promo)
{
	document.write('<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,0,0" width="647" height="130" id="anim_promo" align="middle">');
		document.write('<param name="allowScriptAccess" value="sameDomain" />');
		document.write('<param name="movie" value="'+ graph_path +'inscription/anim_promo_petit.swf" />');
		document.write('<param name="quality" value="best" />');
		document.write('<param name="bgcolor" value="#ffffff" />');
		document.write('<param name="menu" value="flase" />');
		document.write('<param name="wmode" value="transparent">');
		document.write('<param name="flashvars" value="image=' + flash_image_promo + '&texte1=' + flash_texte_promo +'" />');
		document.write('<embed src="'+ graph_path +'inscription/anim_promo_petit.swf" quality="best" flashvars="image=' + flash_image_promo + '&texte1=' + flash_texte_promo + '" menu="false" bgcolor="#ffffff" width="647" height="130" name="anim_promo" align="middle" wmode="transparent" allowScriptAccess="sameDomain" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" />');
	document.write('</object>');
}

function flash_promo(graph_path,img_part,texte)
{
  	if (img_part != '')
  	{
		document.write('<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,0,0" width="780" height="186" id="anim_promo" align="middle">'); 
		    document.write('<param name="allowScriptAccess" value="sameDomain" />');
		    document.write('<param name="movie" value="' + graph_path + '7jours/anim_promo.swf" />'); 
		    document.write('<param name="quality" value="best" />');
		    document.write('<param name="bgcolor" value="#ffffff" />');
		    document.write('<param name="menu" value="false" />');
			document.write('<param name="wmode" value="transparent">');
			document.write('<param name="flashvars" value="image=' + img_part + '&texte1=' + texte + '" />');
			document.write('<embed src="' + graph_path + '7jours/anim_promo.swf" flashvars="image=' + img_part + '&texte1=' + texte + '" quality="best" menu="false" bgcolor="#ffffff" width="780" height="186" name="anim_promo3" align="middle" wmode="transparent" allowScriptAccess="sameDomain" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" />');
		document.write('</object>');
	}
	else
	{
		document.write('<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,0,0" width="780" height="186" id="anim_promo" align="middle">'); 
		    document.write('<param name="allowScriptAccess" value="sameDomain" />');
		    document.write('<param name="movie" value="' + graph_path + '7jours/anim_promo.swf" />'); 
		    document.write('<param name="quality" value="best" />');
		    document.write('<param name="bgcolor" value="#ffffff" />');
		    document.write('<param name="menu" value="false" />');
			document.write('<param name="wmode" value="transparent">');
			document.write('<param name="flashvars" value="texte1=' + texte + '" />');
			document.write('<embed src="' + graph_path + '7jours/anim_promo.swf" flashvars="texte1=' + texte + '" quality="best" menu="false" bgcolor="#ffffff" width="780" height="186" name="anim_promo3" align="middle" wmode="transparent" allowScriptAccess="sameDomain" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" />');
		document.write('</object>');
	}
}
/*****************
 * Classe permettant de gérer simplement un popin
 * 
 * v1.3 : Christophe Dolivet le 2009/03/20
 * 
 *------  
 * v1.3: 2009/03/20 : correctif de la methode set_style pour support de IE8 (et meilleur support navigateur de façon générale) et ajout du callback onBeforeClose
 * v1.2: 2007/10/18 : ajout de l'option 'modal'
 * v1.1: ajout du déplacement du popin 
 * v1.0: 1ère release  
 * 
 * Testé sous IE 6, IE7, IE8, Firefox 2, Opera 9 et Safari 2 avec ou sans Doctype 
 *
 * exemple d'utlisation:
 * 		var pop= new PFW_Popin();
 * 		var params= new Object();
 * 		params['contenu']= "bouh";  
 * 		if(pop.open("mon_id", params))					// le popin est affiché ici et contient bouh
 * 			pop.set_moving_element("id_element");		// facultatif, défini l'element ayant comme id "id_element", comme étant un élément permettant de déplacer le popin
 * 		pop.close();     
 *****************/
 

//--- récupération d'informations sur les navigateurs
PFW_popin_nav= new Object();	// variable contenant des infos sur les navigateurs
if((PFW_popin_nav['isIE'] = (navigator.appName == "Microsoft Internet Explorer")))
	PFW_popin_nav['isIE']= navigator.userAgent.replace(/^.*?MSIE ([0-9\.]*).*$/, "$1");
	
if(PFW_popin_nav['isOpera'] = (navigator.userAgent.indexOf('Opera') != -1)){	
	PFW_popin_nav['isOpera']= navigator.userAgent.replace(/^.*?Opera.*?([0-9\.]+).*$/i, "$1");
	PFW_popin_nav['isIE']= false;	
}
PFW_popin_nav['isSafari'] = (navigator.userAgent.indexOf('Safari') != -1)

 
/**
 * constructeur
 */    
function PFW_Popin(){
	this.style_node	= false;
	this.id			= false;
	this.a_params	= new Array();
}



PFW_Popin.prototype= {
	
	/****
	 * fonction a appeler pour afficher le popin
	 * 
	 * @id:	id de l'element qui sera créé
	 * @params: tableau de paramètres pour l'affichage du popin. Ce tableau est facultatif
	 * 		-params['contenu']: le contenu html qui sera affiché dans le popin à l'affichage
	 * 		-params['bg_color']: couleur du fond recouvrant la page
	 * 		-params['bg_opacity']: un chiffre entre 0 et 1 indicant le degré d'opacité du fond qui recouvre la page
	 * 		-params['style']: une chaine de css qui peut etre associée au popin (eg: div.popin{border: solid black 1px;} )
	 * 		-params['width']: spécifie une largeur pour le popin
	 * 		-params['height']: spécifie une hauteur pour le popin
	 * 		-params['class']: spécifie une class pouvant être associée au popin
	 * 		-params['modal']: défini si le popin est modal ou pas (modal par défaut) 
	 * 		-params['onBeforeClose']: function a appeler juste avant la fermeture du popin
	 **/	 	
	open: function(id, params)
	{	
		// on créé le popin s'il n'y a pas déjà un element dans la page avec cet ID
		if(document.getElementById(id))
			return false;

		this.id= id;
		if(!params)
			params= new Array();
		this.a_params	= params;
		
		// ajout du style du popin
		style="div.popin_background {top: 0px; left: 0px; width:100%; height:100%; position: fixed; z-index: 999998;";
		if(params["bg_color"])
			style+="background-color: "+ params["bg_color"] +";";
		if(params["bg_opacity"])
			style+="opacity: "+ params["bg_opacity"] +"; -moz-opacity: "+ params["bg_opacity"] +"; filter:alpha(opacity="+ params["bg_opacity"]*100 +"); -khtml-opacity: "+ params["bg_opacity"] +"; ";
		style+="} ";
		style+="div.popin_contenu { background-color: #FFFFFF; display: block; position: fixed; top: 50%; left: 50%; overflow: auto; z-index: 999999;}";
	
		// cache le fond pour le mode modal
		if(params["modal"]!="undefined" && params["modal"]==false)
			style+= " div.popin_background { display: none; } ";
		
		if(params["style"])
			style+= params["style"];
	
		this.set_style(style);
			
		// création du popin
		var background= document.createElement("div");
		background.id= "background_"+id;
		background.className= "popin_background";
		document.body.appendChild(background);
		
		var contenu= document.createElement("div");
		contenu.id= id;
		var class_contenu= "popin_contenu";
		if(params["class"])
			class_contenu+=" "+params["class"];
		contenu.className= class_contenu;
		document.body.appendChild(contenu);	
		
		contenu.decal_x=0;
		contenu.decal_y=0;
		
		if(params["contenu"])
			contenu.innerHTML= params["contenu"];
		if(params["width"])
			contenu.style.width= params["width"];
		if(params["height"])
			contenu.style.height= params["height"];
			
		
		// positionnement du popup
		contenu.style.marginLeft= (-contenu.offsetWidth/2)+"px";
		contenu.style.marginTop= (-contenu.offsetHeight/2)+"px";

		// pour IE il faut mettre le popin en position absolute pour la suite des opérations si c'est IE <7 ou qu'il n'y pas pas de compat mode (dtd)
		if(PFW_popin_nav['isIE'] && (PFW_popin_nav['isIE']<7 || document.compatMode!= "CSS1Compat") )
		{
			PFW_Popin.prototype.static_display= false;
			background.style.position= "absolute";	
			contenu.style.position= "absolute";
		}
		else
			PFW_Popin.prototype.static_display= true;
		
		// appel de la boucle gèrant la position et les dimension du popin 
		PFW_Popin.prototype.correct_popin_pos(this.id);
		
		return true;
	}
	
	/**
	 * fonction publique pouvant être appelée après que le contenu du popin ai été changé, 
	 * pour que le repositionnement du popin soit immédiat 
	 */	 	
	,refreshDisplay: function()
	{
		this.correct_popin_pos(this.id);
	}

	
	/**
	 * fonction private ou static gérant le repositionement du popin au cas ou son contenu est modifié
	 * 
	 * @id: id du popin à fournir dans le cas d'un appel static		 
	 */	 	
	,refresh_static_size: function(id)
	{
		
		if(!id)
			id= this.id;
		if(id)
		{
			if(contenu= document.getElementById(id))
			{		
				if(typeof(PFW_Popin.prototype.currently_moving_popin_id)=="undefined" || PFW_Popin.prototype.currently_moving_popin_id!=id)	
					PFW_Popin.prototype.set_margin(contenu, (-contenu.offsetWidth/2), (-contenu.offsetHeight/2));
			}
		}
	}
	
	/**
	 * fonction statique retournant les dimensions de la fenetre
	 */	
	,get_window_size: function()
	{
		var win_w,win_h;
		
		if(PFW_popin_nav['isSafari'])	// Safari
		{
			win_h= window.innerHeight;
			win_w= window.innerWidth;
		}
		else if (document.documentElement && document.documentElement.clientHeight && (PFW_popin_nav['isIE'] || (document.compatMode && document.compatMode== "CSS1Compat" && !PFW_popin_nav['isOpera'])))
			// Explorer 6 ou Firefox in Strict Mode
		{
			win_w = document.documentElement.clientWidth;
			win_h = document.documentElement.clientHeight;
		}
		else if (document.body) // other 
		{
			win_w = document.body.clientWidth;
			win_h = document.body.clientHeight;
		}
		
		return {'w': win_w, 'h': win_h};
	}
	
	/**
	 * fonction statique gérant les marges du contenu du popin avec le déplacement du popin
	 */	
	,set_margin: function(elem, marginLeft, marginTop)
	{
		// récupère les dimension de la fenetre
		var win_size= PFW_Popin.prototype.get_window_size();
		var win_w= win_size['w'];
		var win_h= win_size['h'];
		
		// vérifie qu'on sort pas en haut de l'ecran
		var new_decal_y= Math.max(elem.decal_y, -(win_h-elem.offsetHeight)/2);
		// vérifie qu'on sort pas en bas de l'ecran
		new_decal_y= Math.min(new_decal_y, (win_h-elem.offsetHeight)/2);
		if(new_decal_y!=elem.decal_y)
			elem.decal_y= new_decal_y;
		
		
		// vérifie qu'on sort pas à gauche de l'ecran		
		var new_decal_x= Math.max(elem.decal_x, -(win_w-elem.offsetWidth)/2);
		// vérifie qu'on sort pas à droite de l'ecran
		new_decal_x= Math.min(new_decal_x, (win_w-elem.offsetWidth)/2);	
		if(new_decal_x!=elem.decal_x)
			elem.decal_x= new_decal_x;
		
		// corrige les marges pour le cas ou le navigateur ne supporte pas la position static	
		if(PFW_Popin.prototype.static_display== false )
		{
			var html = document.getElementsByTagName("html")[0];
			marginTop+= html.scrollTop + document.body.scrollTop;
			marginLeft+= html.scrollLeft + document.body.scrollLeft;
		}
			
		elem.style.marginTop= (marginTop+new_decal_y)+"px";
		elem.style.marginLeft= (marginLeft+new_decal_x)+"px";
	}
	
	/**
	 * fonction statique de correction de position
	 */	 	
	,correct_popin_pos: function(id)
	{

		if(contenu= document.getElementById(id))
		{
			// pour IE il faut mettre le popin en position absolute pour la suite des opérations si c'est IE <7 ou qu'il n'y pas pas de compat mode (dtd)
			if(PFW_Popin.prototype.static_display== false )
			{
				if(background= document.getElementById("background_"+id))
				{
					var html = document.getElementsByTagName("html")[0];
					var height= (html.clientHeight==0)?document.body.clientHeight:html.clientHeight;
					var width= (html.clientWidth==0)?document.body.clientWidth:html.clientWidth;
					
					background.style.height= height+"px";
					background.style.width= width+"px";
					background.style.top= (html.scrollTop + document.body.scrollTop) +"px";
					background.style.left= (html.scrollLeft + document.body.scrollLeft) +"px";
					
					
					contenu.style.top= (height/2)+"px";
					contenu.style.left= (width/2)+"px";
			
					if(typeof(PFW_Popin.prototype.currently_moving_popin_id)=="undefined" || PFW_Popin.prototype.currently_moving_popin_id!=id)	
						PFW_Popin.prototype.set_margin(contenu, ( - (contenu.offsetWidth/2)), (- (contenu.offsetHeight/2)));
				}
			}
			else
			{
				PFW_Popin.prototype.refresh_static_size(id);
			}
			
			//------------ vérif que les dimensions du contenu ne sont pas plus grandes que l'ecran --------------
			
			// récupère les dimension de la fenetre
			var win_size= PFW_Popin.prototype.get_window_size();
			var win_w= win_size['w'];
			var win_h= win_size['h'];
			
			
			
			// vérifie la hauteur
			var curr_h= contenu.scrollHeight;
			var prev_h= contenu.getAttribute('previous_height');
			var modif_h_en_cours= contenu.getAttribute('modif_h_en_cours');
	
			if(modif_h_en_cours=="oui")
			{
				if(prev_h<=win_h)
					contenu.setAttribute('modif_h_en_cours', 'non');
				contenu.style.height= Math.min(win_h, prev_h)+"px";
			}		
			else if(curr_h>win_h)
			{
				contenu.setAttribute('previous_height', curr_h);
				contenu.setAttribute('modif_h_en_cours', 'oui');
				contenu.style.height= win_h+"px";
			}
			// vérifie la largeur
			var curr_w= contenu.scrollWidth;
			var prev_w= contenu.getAttribute('previous_width');
			var modif_w_en_cours= contenu.getAttribute('modif_w_en_cours');
			
			if(modif_w_en_cours=="oui")
			{
				if(prev_w<=win_w)
					contenu.setAttribute('modif_w_en_cours', 'non');
				contenu.style.width= Math.min(win_w, prev_w)+"px";
			}		
			else if(curr_w>win_w)
			{
				contenu.setAttribute('previous_width', curr_w);
				contenu.setAttribute('modif_w_en_cours', 'oui');
				contenu.style.width= win_w+"px";
			}
			//-------------------------------------------------------------------------------
			
			setTimeout("PFW_Popin.prototype.correct_popin_pos('"+id+"')", 50);
		}
	}
	
	/**
	 * fonction définissant via le DOM le style utilisé par ce popin
	 */	 	
	,set_style: function(style)
	{
		// Si une feuille de style n'a pas encore étées crée pour le style du popin, on créé une feuille de style dans le DOM
		if(!this.style_node)
		{
			var new_style = document.createElement("style");
			new_style.type="text/css";
			new_style.media="all";
			
			var head= document.getElementsByTagName("head")[0];
			this.style_node= head.appendChild(new_style);
		}
		
		// met à jour le style
		if( this.style_node.styleSheet ) // IE
		{
			this.style_node.styleSheet.cssText = style;
		}
		else
		{ // W3C
			// supprime l'ancien style
			while( this.style_node.firstChild ) {
				this.style_node.removeChild( this.style_node.firstChild );
			}
			this.style_node.appendChild( document.createTextNode( style ) );
		}
	}
	
	
	/***
	 * fonction fermant le popin
	 */	 	
	,close: function()
	{
		if( contenu= document.getElementById(this.id))
		{
			// on s'occupe du callback onbeforeclose
			if( this.a_params['onBeforeClose'] )
			{
				try {
					this.a_params['onBeforeClose']();
				} catch (e) {}
			}
			
			document.body.removeChild(contenu);
			// remove elements
			if(background= document.getElementById("background_"+this.id))
				document.body.removeChild(background);
		
			// on supprime les iframes potentiellement contenues ds le popin (les iframes sont mal supprimées ds les navigateurs sinon)
			frame_tab= contenu.getElementsByTagName("iframe");
			for(var i=0; i<frame_tab.length; i++)
			{
				try {
					var name= frame_tab[i].getAttribute("name");
					delete window.frames[name];
				} catch (e) {}
			}
			this.set_style("");
			this.id= false;
		}
	}

	
	/*********************************************/
	/*******   Moving popin functions  ***********/
	/*********************************************/
	
	
	/**
	 * define the id of the element that will allow to move the popin
	 */	 	
	,set_moving_element: function(id) {
		if(elem= document.getElementById(id))
		{
			elem.popin_id= this.id;
			elem.onmousedown= PFW_Popin.prototype.start_move;
			elem.onmouseover= function (){elem.style.cursor= "move"; };
			elem.onmouseout= function (){elem.style.cursor= "auto"; };
		}
	}
	
	/**
	 * static function called when the mousedown event is called on the movable element
	 */	 	
	,start_move: function(e)
	{
		if(!e)
			e= event;
		
		// retrieve the popin id
		var node= (e.target || e.srcElement);
		while(node.parentNode && !node.popin_id)
			node= node.parentNode;
		
		id= node.popin_id;
		
		// set a static attribute for retriving the popin while moving mouse
		PFW_Popin.prototype.currently_moving_popin_id= id;
			
		var mouse_x= PFW_Popin.prototype.getMouseX(e);
		var mouse_y= PFW_Popin.prototype.getMouseY(e);
		
		var move_elem= document.getElementById(id);
		
		move_elem.start_mouse_x = mouse_x;
		move_elem.start_mouse_y = mouse_y;
		move_elem.start_decal_x = move_elem.decal_x;
		move_elem.start_decal_y = move_elem.decal_y;
		
		document.onmousemove= function(e){
			if(!e)
				e= event;
			var mouse_x= PFW_Popin.prototype.getMouseX(e);
			var mouse_y= PFW_Popin.prototype.getMouseY(e);
			
			var move_elem= document.getElementById(PFW_Popin.prototype.currently_moving_popin_id);
			
			move_elem.decal_y= parseInt(parseInt(move_elem.start_decal_y) + mouse_y - parseInt(move_elem.start_mouse_y));
			move_elem.decal_x= parseInt(parseInt(move_elem.start_decal_x) + mouse_x - parseInt(move_elem.start_mouse_x));
			
			PFW_Popin.prototype.set_margin(move_elem, (-move_elem.offsetWidth/2), (-move_elem.offsetHeight/2));

			return false;
		};
			
		document.onmouseup= function(e) {
			document.onmousemove= "";
			document.onmouseup= "";
			PFW_Popin.prototype.currently_moving_popin_id="";		
			return false;
		};
		
		return false;
	}
	
	/**
	 * retrieve mouse coordinates
	 */	 	
	,getMouseX: function (e){
	
		if(e!=null && typeof(e.pageX)!="undefined"){
			return e.pageX;
		}else{
			return (e!=null?e.x:event.x)+ document.documentElement.scrollLeft;
		}
	}
	
	/**
	 * retrieve mouse coordinates
	 */	
	,getMouseY: function(e){
		if(e!=null && typeof(e.pageY)!="undefined"){
			return e.pageY;
		}else{
			return (e!=null?e.y:event.y)+ document.documentElement.scrollTop;
		}
	}
};

var locafilm_www_Popin = new PFW_Popin();

//--------------------------------------
// Fonction permettant d'afficher un popin contenant la reponse d'un objet AJAX
//--------------------------------------
function affiche_popin(url, personnalite)
{
	if(personnalite == undefined)
	{
		personnalite = true;
	}
	
	if( personnalite == true )
	{
		var str_class = "";
	}
	else
	{
		var str_class = 'class="popin_alternatif"';
	}
	
	var affiche_popin = new PFW_AJAX(url);
	
	var entete = '<table id="locafilm_www_Popin_table">';
		entete += '<tr>';
			entete += '<td id="popin_coin_HG">&nbsp;</td>';
			entete += '<td id="popin_bande_H" ' + str_class + '>&nbsp;</td>';
			entete += '<td id="popin_coin_HD" onclick="locafilm_www_Popin.close();" style="font-weight:bold;cursor:pointer;">&nbsp;</td>';
		entete += '</tr>';
		entete += '<tr>';		
			entete += '<td id="popin_bande_G" ' + str_class + '>&nbsp;</td>';
			entete += '<td id="popin_conteneur" ' + str_class + '>';
			entete += '<div id="contenu_locafilm_www_Popin" ' + str_class + '></div></td>';
			entete += '<td id="popin_bande_D" ' + str_class + '>&nbsp;</td>';
		entete += '</tr>';
		entete += '<tr>';
			entete += '<td id="popin_coin_BG" ' + str_class + '>&nbsp;</td>';
			entete += '<td id="popin_bande_B" ' + str_class + '>&nbsp;</td>';
			entete += '<td id="popin_coin_BD">&nbsp;</td>';
		entete += '</tr>';
	entete += '</table>';

	
	affiche_popin.setResponseType("xml");
	
	affiche_popin.action_OK=function()
	{
		var params= new Object();
		var inputs;
		
		// on n'affiche le popin qu'a la condition que l'on ait quelque chose a y inserer
		var tab_HTML_content = this.getResponse().getHTML_content();
		if (tab_HTML_content != false)
		{
			params["bg_opacity"]=0.4;
			params["bg_color"]="#000";
			params['contenu']= entete;  
			params["style"]= "select {visibility:visible !important;visibility: hidden;} ";
			locafilm_www_Popin.open("locafilm_www_Popin", params);
			
			var tab_HTML_content = this.getResponse().getHTML_content();
			if (tab_HTML_content != false)
			{
				for (var i=0; i<tab_HTML_content.length; i++)
				{
					document.getElementById(tab_HTML_content[i].id).innerHTML = tab_HTML_content[i].html;
				}
			}
			
			//On donne le focus au premier input de type text du popin
			var inputs = document.getElementById('locafilm_www_Popin').getElementsByTagName('input');
			if(inputs.length > 0)
			{
				var i=0;
				while(i < inputs.length && inputs[i].type != 'text')
				{
					i++;
				}
				if(i < inputs.length)
				{
					inputs[i].focus();
				}
			}
			
			locafilm_www_Popin.refreshDisplay();
		}
		
		//parsing du xml s'il existe
		var xml_content = this.getResponse().getXML_content();
		
		if(xml_content)
		{
			//Doit-on ou non fermer la popin
			var fermeture = xml_content.firstChild.getElementsByTagName('close_popin');
			if(fermeture.length == 1)
			{
				if(fermeture[0].getAttribute('close') == "oui")
				{
					locafilm_www_Popin.close();
				}
			}
			
			//Recherche d'eventuelle(s) fonction à déclencher sur le retour d'AJAX
			var fonctions = xml_content.firstChild.getElementsByTagName('fonction');
			if(fonctions.length > 0)
			{
				for(var i=0; i < fonctions.length; i++)
				{
					var str = fonctions[i].firstChild.nodeValue;
					if(str == false)
					{
						str = fonctions[i].firstChild.nodeValue
					}
					eval(str);
				}
			}
		}
	}
	affiche_popin.action_ERREUR=function()
	{
		//alert(this.getResponse().getError_message());
	}
	affiche_popin.HTTPrequest();	
}

//--------------------------------------
// Fonction permettant d'agir sur les popins
// url : url de la ressource a appeler sur le serveur
// id : id de l'objet devant recevoir la reponse AJAX
// id_form : id du formulaire à soumettre dans le cas du passage de l'etat form vers save
//--------------------------------------
function modif_contenu_popin(url,id_form)
{
	var obj_ajax = new PFW_AJAX(url);
	if(id_form != false)
	{
		obj_ajax.setParametres(PFW_getQueryString(id_form));
	}
	
	obj_ajax.action_OK = function()
	{
		var tab_HTML_content = this.getResponse().getHTML_content();
		if (tab_HTML_content != false)
		{
			//Remplissage des id demandé avec les contenus correspondants
			for (var i=0; i<tab_HTML_content.length; i++)
			{
				if(document.getElementById(tab_HTML_content[i].id).nodeName != 'TEXTAREA')
				{
					document.getElementById(tab_HTML_content[i].id).innerHTML = tab_HTML_content[i].html;
				}
				else
				{
					document.getElementById(tab_HTML_content[i].id).value = tab_HTML_content[i].html;
				}
			}
		}
			
		//On donne le focus au premier input de type text du popin
		var inputs = document.getElementById('locafilm_www_Popin').getElementsByTagName('input');
		if(inputs.length > 0)
		{
			var i=0;
			while(i < inputs.length && inputs[i].type != 'text')
			{
				i++;
			}
			if(i < inputs.length)
			{
				inputs[i].focus();
			}
		}
		
		//parsing du xml s'il existe
		var xml_content = this.getResponse().getXML_content();
		
		if(xml_content)
		{
			//Doit-on ou non fermer la popin
			var fermeture = xml_content.firstChild.getElementsByTagName('close_popin');
			if(fermeture.length == 1)
			{
				if(fermeture[0].getAttribute('close') == "oui")
				{
					locafilm_www_Popin.close();
				}
			}
			
			//Recherche d'eventuelle(s) fonction à déclencher sur le retour d'AJAX
			var fonctions = xml_content.firstChild.getElementsByTagName('fonction');
			if(fonctions.length > 0)
			{
				for(var i=0; i < fonctions.length; i++)
				{
					var str = fonctions[i].firstChild.nodeValue;
					if(str == false)
					{
						str = fonctions[i].firstChild.nodeValue
					}
					eval(str);
				}
			}
		}
		
		locafilm_www_Popin.refreshDisplay();
	}
	obj_ajax.HTTPrequest();
}


//--------------------------------------
// Fonction permettant d'agir sur les popins
// ROOT_URI : url de base sur le serveur
//--------------------------------------
function valid_paiement(ROOT_URI) 
{
	var loadRequest = new PFW_AJAX( ROOT_URI + 'private/vod_paiement_demande_httprequest.php');
									 
	loadRequest.setResponseType('xml');
									 
	loadRequest.action_debut_ATTENTE = function()	
	{
		document.getElementById('popin_cadre_interne').innerHTML = document.getElementById('attente').innerHTML;
	}
	 
	loadRequest.action_OK = function()	
	{ 

		document.getElementById('popin_cadre_interne').innerHTML = this.getResponse().getHTML_content();
		
		var xml_content = this.getResponse().getXML_content();
		
		if(xml_content)
		{
			//Recherche d'eventuelle(s) fonction à déclencher sur le retour d'AJAX
			var fonctions = xml_content.getElementsByTagName('fonction');

			if(fonctions.length > 0)
			{
				for(var i=0; i < fonctions.length; i++)
				{
					var str = fonctions[i].firstChild.nodeValue;
					if(str == false)
					{
						str = fonctions[i].firstChild.nodeValue
					}
					eval(str);
				}
			}
		}
	}
	
	loadRequest.action_ERREUR = function()
	{ 
		document.getElementById('contenu_locafilm_www_Popin').innerHTML = this.getResponse().getHTML_content();
	}
	 
	loadRequest.HTTPrequest();
}


//--------------------------------------
// Permet de savoir si le telechargement est possibe ou non
// WEBSERVICE_URI est le chemi d'acces au webservices
// retourne true si le download est possible, false sinon
//--------------------------------------
function valid_download( url_base, id_abonnement, id_demande, link ) 
{

	var loadRequest = new PFW_AJAX( url_base + 'libs/validation_download_httpRequest.php');
									 
	loadRequest.setResponseType('xml');
	loadRequest.setParametres("id_abonnement=" + id_abonnement + "&id_demande=" + id_demande);
									 	 
	loadRequest.action_OK = function()	
	{ 
		var xml_content = this.getResponse().getXML_content();
		
		if(xml_content)
		{
			//Recherche d'eventuelle(s) fonction à déclencher sur le retour d'AJAX
			var valid = xml_content.getElementsByTagName('valid');

			if(valid.length > 0)
			{
				if(valid[0].firstChild.nodeValue == 1)
				{
					
					document.location = link.href;
				}
				else
				{
					alert('Vous êtes déjà en train de télécharger ce fichier! \nSi ce n\est pas le cas, veuiller relancer le téléchargement d\ici quelques minutes');
				}
			}
		}
	}
	
		 
	loadRequest.HTTPrequest();
	
	return false;
}

//--------------------------------------
// Permet de conserver une image de la configuration utilisateur au moment du paiement VOD
//--------------------------------------
function save_config_DLP( url_base, config_txt, id_abonnement, id_demande ) 
{

	var loadRequest = new PFW_AJAX( url_base + 'libs/save_config_DLP_httpRequest.php');
									 
	loadRequest.setResponseType('xml');
	loadRequest.setParametres("id_abonnement=" + id_abonnement + "&id_demande=" + id_demande + "&config=" + config_txt);
									 	 
	loadRequest.action_OK = function(){ }

	loadRequest.HTTPrequest();
	
	return false;
}

//--------------------------------------
// Permet l'ouverture du disclaimer
//--------------------------------------
function disclaimer(url)
{
	var affiche_popin = new PFW_AJAX(url + 'libs/popin_disclaimer.php');
	
	affiche_popin.setResponseType("xml");
	
	affiche_popin.action_OK=function()
	{
		var params= new Object();
		var inputs;
		
		// on n'affiche le popin qu'a la condition que l'on ait quelque chose a y inserer
		var tab_HTML_content = this.getResponse().getHTML_content();
		if (tab_HTML_content != false)
		{
			params["bg_opacity"]=0.4;
			params["bg_color"]="#fff";  
			params["style"]= "select {visibility:visible !important;visibility: hidden;} ";
			locafilm_www_Popin.open("locafilm_www_Popin", params);
			
			var tab_HTML_content = this.getResponse().getHTML_content();
			if (tab_HTML_content != false)
			{
				for (var i=0; i<tab_HTML_content.length; i++)
				{
					document.getElementById(tab_HTML_content[i].id).innerHTML = tab_HTML_content[i].html;
				}
			}
			
			//On donne le focus au premier input de type text du popin
			var inputs = document.getElementById('locafilm_www_Popin').getElementsByTagName('input');
			if(inputs.length > 0)
			{
				var i=0;
				while(i < inputs.length && inputs[i].type != 'text')
				{
					i++;
				}
				if(i < inputs.length)
				{
					inputs[i].focus();
				}
			}
			
			locafilm_www_Popin.refreshDisplay();
		}
		
		//parsing du xml s'il existe
		var xml_content = this.getResponse().getXML_content();
	}
	affiche_popin.action_ERREUR=function()
	{
		//alert(this.getResponse().getError_message());
	}
	affiche_popin.HTTPrequest();
}

//--------------------------------------
//Permet l'ouverture de la lightbox funnymel
//--------------------------------------
function lightbox_funnymel(url)
{
	var affiche_popin = new PFW_AJAX(url + 'libs/popin_lightbox_funnymel.php');
	
	affiche_popin.setResponseType("xml");
	
	affiche_popin.action_OK=function()
	{
		var params= new Object();
		var inputs;
		
		// on n'affiche le popin qu'a la condition que l'on ait quelque chose a y inserer
		var tab_HTML_content = this.getResponse().getHTML_content();
		if (tab_HTML_content != false)
		{
			params["bg_opacity"]=0.4;
			params["bg_color"]="#fff";  
			params["style"]= "select {visibility:visible !important;visibility: hidden;} ";
			locafilm_www_Popin.open("locafilm_www_Popin", params);
			
			var tab_HTML_content = this.getResponse().getHTML_content();
			if (tab_HTML_content != false)
			{
				for (var i=0; i<tab_HTML_content.length; i++)
				{
					document.getElementById(tab_HTML_content[i].id).innerHTML = tab_HTML_content[i].html;
				}
			}
			
			locafilm_www_Popin.refreshDisplay();
		}
		
		//parsing du xml s'il existe
		var xml_content = this.getResponse().getXML_content();
	}
	affiche_popin.action_ERREUR=function()
	{
		//alert(this.getResponse().getError_message());
	}
	affiche_popin.HTTPrequest();
}

//Fonction qui instancie un objet XMLHttpRequest en s'adaptant au navigateur du surfeur
function getHTTPObject() 
{
	var xmlhttp=false;
	/*@cc_on @*/
	/*@if (@_jscript_version >= 5)
	// JScript gives us Conditional compilation, we can cope with old IE versions.
	// and security blocked creation of the objects.
	try 
	{
		xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
	} 
	catch (e) 
	{
		try 
	  {
	  	xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
	  } 
	  catch (E) 
	  {
	  	xmlhttp = false;
	  }
	}
	@end @*/
	if (!xmlhttp && typeof XMLHttpRequest!='undefined') 
	{
	  xmlhttp = new XMLHttpRequest();
	}
	return xmlhttp;
}


//Fonction qui effectue une requete HTTP
// - url : l'url du fichier php contenant la requete a executer
// - fonction_nom : le nom de la fonction javascript qui permettra d'interpreter le resultat
// - parametres : une chaine concatenee (ex : nom_var1=valeur1&nom_var2=valeur2) de donnees a passer a la requete
function HttpRequest(url , fonction_nom , parametres , id_champ)
{
	var obj_http = getHTTPObject();
	obj_http.open("POST", url, true);
		if (parametres!='')
		{
			obj_http.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); 
			obj_http.send(parametres);
		}
		else
		{
			obj_http.send(null);			
		}
		
		obj_http.onreadystatechange = function () {reponse=HttpResponse("text",obj_http); if (reponse!=false) fonction_nom(reponse , id_champ);}
}


//Fonction qui effectue une requete HTTP
// - url : l'url du fichier php contenant la requete a executer
// - fonction_nom : le nom de la fonction javascript qui permettra d'interpreter le resultat
// - parametres : une chaine concatenee (ex : nom_var1=valeur1&nom_var2=valeur2) de donnees a passer a la requete
function HttpRequestExtd(url , fonction_nom , parametres , id_champ , type)
{
	var obj_http = getHTTPObject();
	obj_http.open("POST", url, true);
		if (parametres!='')
		{
			obj_http.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); 
			obj_http.send(parametres);
		}
		else
		{
			obj_http.send(null);			
		}
		
		obj_http.onreadystatechange = function () {reponse=HttpResponse(type,obj_http); if (reponse!==false) fonction_nom(reponse , id_champ);}
}


//Fonction qui recoit la reponse a une requete precedemment envoyée
// - type : définit le type de la réponse attendue renvoyée par l'objet XMLHttpRequest (la chaine de résultat, l'etat de l'objet, le code d'erreur ....)
function HttpResponse(type , obj) 
{
	switch (type)
	{
	  case 'readyState':
	    results = obj.readyState;
	  break;
	  
	  case 'text':
	  	if (obj.readyState == 4) 
		{
	  		//on effectue l'equivalent d'un trim() en JS pour supprimer tout caractere special en debut de chaine
	  		results =  obj.responseText.replace(/(^\s*)|(\s*$)/g, "");
	  	}
	  	else
	  	{	
	  		results = false;
	  	}
	  break;
	  
	  case 'xml':
	 	  if (obj.readyState == 4) 
			{
	      results = obj.responseXML;
	    }
	  	else
	  	{	
	  		results = false;
	  	}
	  break;
	  
	  case 'status':
	    results = obj.status;
	  break;
	   
	  case 'onreadystate':
	    results = obj.onreadystate;
	  break;
	  
	  case 'statusText ':
	    results = obj.onreadystate;
	  break;
	  
	}
	return results;
}


//Fonction ne réalisant aucun traitement à appeler lorsque l'on veut réaliser une requete HTTPRequest qui ne doit rien faire en retour
//par ex lorsqu'une requete HTTPRequest va faire un insert en base ou lorsqu'une requete HTTPRequest va modifier une variable de session
function HttpDefaut() 
{

}

//Fonction Javascript appelée automatiquement en réponse à une requete XMLHttpRequest dans le cas default
function DefaultAction(reponse , id_champ)
{
	document.getElementById(id_champ).innerHTML = reponse;
}

//Fonction Javascript appelée automatiquement en réponse à une requete XMLHttpRequest dans le cas default pour un dialogue popup/opener
function DefaultActionOpener(reponse , id_champ)
{
	window.opener.document.getElementById(id_champ).innerHTML = reponse;
	window.close();
}


/** 
* Transforme un formulaire en un objet Javascript contenant le nom des champs 
* ainsi que pour chacun leur(s) valeur(s). Est prévu pour gérer les champs de type radio ,
* checkbox , listbox (avec choix multiples possibles) en les traitant uniquement
* dans le cas ou au moins une valeur a été spécifiées pour un élément de formulaire.
* Ne traite pas les éléments de type submit , reset ou button.
* 
* @En entree : prend l'id du formulaire a traiter
*
* @Retourne un objet JavaScript avec une propriété pour chaque champ du formulaire à soumettre.
* La valeur de chaque propriété de l'objet est un tableau contenant une ou plusieurs valeurs à soumettre */
function getFormValuesAsMap(id_form) 
{
	var params = new Object();
	var inputs = document.getElementById(id_form).elements;
	
	for (var i=0; i<inputs.length; i++) 
	{
		var input = inputs[i];
		if (input.type == "radio" || input.type == "checkbox") 
		{
			//Cas des radios et checkboxes, ne les traite que s'ils sont checked
			if (input.checked == true) 
			{                
				if (params[input.name] == null) 
				{
					params[input.name] = new Array();
				}
				params[input.name].push(input.value);
			}
		}
		else if (input.type == "select-multiple") 
		{
			//Cas des Select multiple
			for (var j=0; j<input.options.length; j++) 
			{
				if (input.options[j].selected == true) 
				{                    
					if (params[input.name] == null) 
					{
						params[input.name] = new Array();                    
					}
					params[input.name].push(input.options[j].value);
				}
			}
		}
		else if (input.type == "submit" || input.type == "button" || input.type == "reset") 
		{
			//On exclue les submit , reset , button
		}
		else if (input.name != undefined && input.value != undefined) 
		{
			//On traite tous les autres cas : text , hidden , textarea ...
			if (params[input.name] == null) 
			{
				params[input.name] = new Array();            
			}
			params[input.name].push(input.value);
		}
	}   
	return params;
}

/** 
* Retourne la query string contenant tous les champs avec que leur valeur d'un formulaire
* à soumettre.
* Chaque valeur est encodee avant d'etre ajoutée à la query string.
* 
* @En entree : prend l'id du formulaire a traiter
*
* @Retourne une query string  */
function getQueryString(id_form) 
{    
	var params = getFormValuesAsMap(id_form);    
	var queryString = "";    
	for (var name in params) 
	{        
		var values = params[name];        
		for (var i=0; i<values.length; i++) 
		{            
			queryString += "&" + name + "=" + encodeURIComponent(values[i]);        
		}    
	}    
	return queryString;
}
// Cette variable globale est utilisée par le mécanisme de cache de la PFW_Ajax_classe
// Elle permet d'utiliser un système de cache global (non dépendant de l'objet PFW_AJAX instancié) à toute la page jusqu'à son rafraichissement
var PFW_AjaxCache = new Array();

/**
* Constructeur de la classe PFW_AJAX
* @url : l'url du fichier php contenant la requete a executer 
**/
function PFW_AJAX(url)
{
	//***************************
	// Attributs de la classe
	//***************************
	this.xmlhttp 			= false; 
	this.url 				= url;
	this.parametres 		= false;
	this.id_champ 			= false;
	this.submitMethod 		= "post";
	this.Mode 				= "asynchronous";
	this.ResponseType 		= "text";
	this.Response 			= false;
	this.isAjaxMessage		= false;
	this.isIE				= document.all;
	this.CacheMode			= 'inactive';
	this.isResponseInCache	= false;
	//***************************
	
	//***************************
	// Instanciation des Attributs
	//***************************
	/*@cc_on @*/ 
	/*@if (@_jscript_version >= 5) 
	// JScript gives us Conditional compilation, we can cope with old IE versions. 
	// and security blocked creation of the objects. 
	try 
	{ 
		this.xmlhttp = new ActiveXObject("Msxml2.XMLHTTP"); 
	} 
	catch (e) 
	{ 
		try 
		{ 
			this.xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); 
		} 
		catch (E) 
		{ 
			this.xmlhttp = false; 
		} 
	} 
	@end @*/ 
	if (!this.xmlhttp && typeof XMLHttpRequest!='undefined') 
	{ 
		this.xmlhttp = new XMLHttpRequest(); 
	}
	//***************************
}


/**
* Definition des methodes de la classe PFW_AJAX
**/
PFW_AJAX.prototype = 
{
	//***************************
	// Définition des geters
	//***************************
	getUrl : function()
	{	
		return this.url;
	},
	
	getParametres : function()
	{	
		return this.parametres;
	},
	
	getIdChamp : function()
	{	
		return this.id_champ;
	},
	
	getsubmitMethod : function()
	{	
		return this.submitMethod;
	},
	
	getMode : function()
	{	
		return this.Mode;
	},
	
	getResponseType : function()
	{	
		return this.ResponseType;
	},
	
	getResponse : function()
	{	
		return this.Response;
	},
	
	getCacheMode : function()
	{	
		return this.CacheMode;
	},
	
	getFromCache : function()
	{	
		var index;
		var argv = this.getFromCache.arguments;
		
		if (argv.length > 0)
		{
			index = argv[0];
		}
		else
		{
			index = (this.getsubmitMethod() == "post")? this.getUrl()+"?"+this.getParametres() : this.getUrl();
		}
		
		return (PFW_AjaxCache[index]) ? PFW_AjaxCache[index] : false;
	},

	//***************************
	// Définition des seters
	//***************************
	setUrl : function(url)
	{	
		this.url = url;
	},
	
	setParametres : function(parametres)
	{	
		this.parametres = parametres;
	},
	
	setIdChamp : function(id)
	{	
		this.id_champ = id;
	},
	
	setsubmitMethod : function(submitMethod)
	{	
		this.submitMethod = submitMethod;
	},
	
	setMode : function(Mode)
	{	
		this.Mode = Mode;
	},
	
	setResponseType : function(responseType)
	{	
		this.ResponseType = responseType;
	},
	
	setCacheMode : function(mode)
	{	
		this.CacheMode = mode;
	},
		
	addIntoCache : function()
	{	
		var index;
		var argv = this.addIntoCache.arguments;
		
		if (argv.length > 0)
		{
			index = argv[0];
		}
		else
		{
			index = (this.getsubmitMethod() == "post")? this.getUrl()+"?"+this.getParametres() : this.getUrl();
		}
		
		PFW_AjaxCache[index] = (this.getResponse() instanceof PFW_AJAX_Message) ? this.getResponse().getResponseFromServer() : this.getResponse();
	},
	
	/**
	* Fonction qui recoit la reponse a une requete precedemment envoyée 
	**/
	setResponse : function()
	{	
		// 1) Aucune requete n'a été soumise car la réponse se trouve dans le cache
		if ( this.isResponseInCache )
		{
			this.Response = this.getFromCache();
		}
		// 2) On obtient la réponse suite à une requette HTTP au serveur
		else 
		{
			if (this.xmlhttp.readyState == 4) 
			{ 
				if (this.xmlhttp.status == 200) 
				{
					
					// Autodetection d'une réponse XML si le response_type a été laissé à sa valeur par défaut
					// ... alors que la reponse recue est bien de type XML
					if (this.isIE && this.getResponseType() == 'text' && this.xmlhttp.responseXML.firstChild != null)
					{
						this.setResponseType('xml');
					}
					else 
					{
						if (!this.isIE && this.getResponseType() == 'text' && this.xmlhttp.responseXML != null)
						{
							this.setResponseType('xml');
						}
					}

					switch (this.getResponseType()) 
					{ 
						case 'readyState': 
							this.Response = this.xmlhttp.readyState; 
						break; 
						
						case 'text': 
							//on effectue l'equivalent d'un trim() en JS pour supprimer tout caractere special en debut de chaine 
							this.Response = this.xmlhttp.responseText.replace(/(^\s*)|(\s*$)/g, ""); 
							
							// Si le cache est activé, on stocke le retour dans un tableau associatif
							if(this.getCacheMode()=='auto')
							{
								this.addIntoCache();
							}
						break; 
						
						case 'xml': 
							/* test de sécurité firefox multi domaine */
							try {
								this.xmlhttp.responseXML.firstChild.tagName;
								domdoc = this.xmlhttp.responseXML;
							} catch(e) {
								domdoc = (new DOMParser()).parseFromString(this.xmlhttp.responseText,"text/xml");
							}
							
							// On vérifie la présence d'erreur dans la réponse xml
							if (  domdoc==null
							 		|| (domdoc.parseError &&  domdoc.parseError.errorCode !=0)	
							 		|| domdoc.getElementsByTagName('*').length==0
						         	|| domdoc.firstChild.tagName== "parsererror"
						         	|| this.xmlhttp.responseText.replace(/(^\s*)/, "").substr(0,5)!="<"+"?xml"
						    	)
						    // Si la réponse ne peut pas être interprétée comme du XML valide, on la traite comme une chaine de texte ...
						    {
								this.setResponseType('text');
								this.Response = this.xmlhttp.responseText;
							}
							// ... sinon
							else
							{
								//on effectue l'equivalent d'un trim() pour supprimer tout caractere special dans l'arbre xml
								this.Response = PFW_clean(domdoc);
								
								// Si le cache est activé, on stocke le retour dans un tableau associatif
								if(this.getCacheMode()=='auto')
								{
									this.addIntoCache();
								}
							}
						break; 
						
						case 'status': 
							this.Response = this.xmlhttp.status; 
						break; 
						
						case 'onreadystate': 
							this.Response = this.xmlhttp.onreadystate; 
						break; 
						
						case 'statusText ': 
							this.Response = this.xmlhttp.onreadystate; 
						break; 
					}
				}
				else
				{
					return false;
				}
			}
			else
			{
				return false;
			}
		}
		
		// 3) Si j'ai bien obtenu ma reponse (du cache OU du serveur)
		if (this.getResponse())
		{	
			// 3.1) Autodetection d'une réponse XML si le response_type a été laissé à sa valeur par défaut
			// ... alors que la reponse recue est bien de type XML
			if (this.getResponseType() == 'text' && this.Response.firstChild != null)
			{
				this.setResponseType('xml');	
			}
			
			// 3.2) Auto détection d'une trame ajax message dans le cas ou la réponse est de type XML
			if (this.getResponseType() == 'xml')
			{
				if(this.getResponse().getElementsByTagName("message").length > 0 && this.getResponse().getElementsByTagName("message")[0].getAttribute("type") == "PFW_ajax_message")
				{
					this.isAjaxMessage = true;
					this.Response = new PFW_AJAX_Message(this.Response);
				}
			}
		}
		
		// 4) On execute le traitement post Réponse
		this.traitement();
	},
	
	/**
	* Fonction qui effectue une requete HTTP 
	* @cache : active le cache lors de l'envoi de la requete [non obligatoire]
	**/
	HTTPrequest : function()
	{	
		// 1) On s'assure que la fonction pour l'attente lors du traitement n'a pas été désactivée
		if (this.action_debut_ATTENTE != false)
		{
			this.action_debut_ATTENTE();
		}
		
		var cacheActif = false;
		
		// 2) On teste si le cache a été activé dans le mode manual
		if (this.getCacheMode()=='manual')
		{
			var argv = this.HTTPrequest.arguments;
			if (argv.length > 0)
			{
				cacheActif = (argv[0] == true)? true : false;
			}
		}
		
		// 3) Si le cache est activé et qu'on trouve l'url dans le cache
		if ( ( this.getCacheMode()=='auto' || (this.getCacheMode()=='manual' && cacheActif)) && this.getFromCache())
		{
			this.isResponseInCache = true;
			this.setResponse();
		}
		
		// 4) Sinon on realise une requete HTTP
		else
		{
			var mode = (this.Mode == "asynchronous")? true : false;
			
			if (this.submitMethod == 'post')
			{
				this.xmlhttp.open("POST", this.url, mode); 
				if (this.parametres!='') 
				{ 
					this.xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); 
					this.xmlhttp.send(this.parametres); 
				} 
				else 
				{ 
					this.xmlhttp.send(null); 
				} 
				var refToThis = this;
				this.xmlhttp.onreadystatechange = function () {refToThis.setResponse();} 
			}
		}
	},
	
	
	/**
	* Fonction Javascript de traitement de la réponse à une requete XMLHttpRequest
	**/
	traitement : function()
	{ 
		// On s'assure que la fonction pour le traitement de la réponse n'a pas été désactivée
		if (this.action_OK != false)
		{
			switch (this.getResponseType()) 
			{ 
				case 'text': 
					this.action_OK();
				break; 
				
				case 'xml': 
					// 1 - Si la réponse est de type "PFW_ajax_message" ...
					if(this.isAjaxMessage)
					{
						// ... on verifie que le traitement s'est bien déroulé sur le serveur et on appelle action_OK
						if (this.getResponse().getError_code() == "0")
						{
							this.action_OK();
						}
						// ... sinon on appelle action_ERREUR
						else
						{
							this.action_ERREUR();
						}
						// Si j'ai un noeud debug dans le message, j'affiche son contenu
						if (this.getResponse().getDebug() && this.getIdChamp())
						{
							PFW_customInnerHTML(this.getIdChamp() , document.getElementById(this.getIdChamp()).innerHTML + '<fieldset><legend style="color:red;font-weight:bold;">DEBUG</legend>' +this.getResponse().getDebug() + '</fieldset>');
						}
					}
					// 2 - Sinon on appelle la fonction pour le traitement de la réponse
					else
					{
						this.action_OK();
					}
				break; 

				default : 
					this.action_OK();
				break; 
			} 
		}
		
		// On s'assure que la fonction pour l'attente lors du traitement n'a pas été désactivée
		if (this.action_fin_ATTENTE != false)
		{
			this.action_fin_ATTENTE();
		}
	},
	
	
	/**
	* Fonction Javascript appelée automatiquement lors du traitement de la réponse à une requete XMLHttpRequest si celle-ci est OK
	**/
	action_OK : function()
	{ 
		//alert('actionok');
		switch (this.getResponseType()) 
		{ 
			case 'text': 
				PFW_customInnerHTML(this.getIdChamp() , this.getResponse());
			break; 
			
			case 'xml': 	
				if (this.isAjaxMessage)
				{
					if (Number(this.getResponse().getVersion()) < 3)
					{
						PFW_customInnerHTML(this.getIdChamp() , this.getResponse().getHTML_content());
					}
					else
					{
						var tab_HTML_content = this.getResponse().getHTML_content();
						if (tab_HTML_content != false)
						{
							for (var i=0; i<tab_HTML_content.length; i++)
							{
								PFW_customInnerHTML(tab_HTML_content[i].id , tab_HTML_content[i].html);
							}
						}
					}
				}
			break; 
		}
	},
	
	
	/**
	* Fonction Javascript appelée automatiquement lors du traitement de la réponse à une requete XMLHttpRequest en cas d'erreur
	**/
	action_ERREUR : function()
	{ 
			if (this.isAjaxMessage)
			{
				alert("Code Erreur : " + this.getResponse().getError_code() + "\n" + this.getResponse().getError_message());
			}
	},
	
	
	/**
	* Fonction Javascript appelée automatiquement avant l'envoi de la requete HTTP
	**/
	action_debut_ATTENTE : function()
	{ 
	},
	
	
	/**
	* Fonction Javascript appelée automatiquement à la fin du traitement de la réponse à une requete XMLHttpRequest
	**/
	action_fin_ATTENTE : function()
	{ 
	}
}


/***************************************************************************************************/
/***************************************************************************************************/


/**
* Constructeur de la classe PFW_AJAX_Message
* @xml : le code XML genere par la classe AjaxMessage du serveur
**/
function PFW_AJAX_Message(xml)
{
	
	//***************************
	// Attributs de la classe
	//***************************
	
	// Le firstChild d'un objet XML document pour IE (6) est la balise de declaration <xml>
	// pour firefox c'est la racine du xml, en l'occurence <message>
	// on stocke dans xml_message le sous-arbre qui commence à la racine message en fonction du navigateur
	this.xml_message = xml; 
}


/**
* Definition des methodes de la classe PFW_AJAX_Message
**/
PFW_AJAX_Message.prototype = 
{
	/**
	* getResponseFromServer
	**/
	getResponseFromServer : function()
	{	
		return this.xml_message;
	},
	
	
	/**
	* getXMLMessage
	**/
	getXMLMessage : function()
	{	
		return (this.xml_message.childNodes[0].nodeName != 'message')? this.xml_message.childNodes[1] : this.xml_message.childNodes[0];
	},
	
	
	/**
	* getVersion
	**/
	getVersion : function()
	{	
		return (this.getXMLMessage().getAttribute("version") != null)? this.getXMLMessage().getAttribute("version") : false;
	},
	
	
	/**
	* getError_code
	**/
	getError_code : function()
	{	
		var return_value;
		
		switch (this.getVersion())
		{
			case "1":
				return_value = (this.getXMLMessage().getElementsByTagName("error_code")[0].firstChild != null)? this.getXMLMessage().getElementsByTagName("error_code")[0].firstChild.nodeValue : false;
			break;
			
			case "2" || "3":
				return_value = (this.getXMLMessage().firstChild.getElementsByTagName("error_code")[0].firstChild != null)? this.getXMLMessage().firstChild.getElementsByTagName("error_code")[0].firstChild.nodeValue : false;
			break;
			
			default:
				return_value = (this.getXMLMessage().getElementsByTagName("error_code")[0].firstChild != null)? this.getXMLMessage().getElementsByTagName("error_code")[0].firstChild.nodeValue : false;
			break;
		}
		
		return return_value;
	},
	
	
	/**
	* getError_message
	**/
	getError_message : function()
	{	
		var noeud_ERRORMESSAGE_content;
		var return_value;
		
		switch (this.getVersion())
		{
			case "1":
				noeud_ERRORMESSAGE_content = (this.getXMLMessage().getElementsByTagName("error_message")[0].firstChild != null)? this.getXMLMessage().getElementsByTagName("error_message")[0] : false;
			break;
			
			case "2" || "3":
				noeud_ERRORMESSAGE_content = (this.getXMLMessage().firstChild.getElementsByTagName("error_message").length > 0)? this.getXMLMessage().firstChild.getElementsByTagName("error_message")[0] : false;
			break;
			
			default:
				noeud_ERRORMESSAGE_content = (this.getXMLMessage().getElementsByTagName("error_message")[0].firstChild != null)? this.getXMLMessage().getElementsByTagName("error_message")[0] : false;
			break;
		}
		
		// On teste que le message contient bien un Debug_content
		if (noeud_ERRORMESSAGE_content)
		{
			return_value = this.getContentNodeAsString(noeud_ERRORMESSAGE_content);
		}
		else
		{
			return_value = false;
		}
		
		return return_value;
	},
	
	
	/**
	* getHTML_content
	**/
	getHTML_content : function()
	{	
		var noeud_HTML_content;
		var return_value = '';
		
		switch (this.getVersion())
		{
			case "1":
				noeud_HTML_content = (this.getXMLMessage().getElementsByTagName("HTML_content").length > 0)? this.getXMLMessage().getElementsByTagName("HTML_content")[0] : false;
			break;
			
			case "2" :
				noeud_HTML_content = (this.getXMLMessage().childNodes[1].getElementsByTagName("HTML_content").length > 0)? this.getXMLMessage().childNodes[1].getElementsByTagName("HTML_content")[0] : false;
			break;
			
			case "3":
				noeud_HTML_content = (this.getXMLMessage().childNodes[1].getElementsByTagName("HTML_content").length > 0)? this.getXMLMessage().childNodes[1].getElementsByTagName("HTML_content") : false;
			break;
			
			default:
				noeud_HTML_content = (this.getXMLMessage().getElementsByTagName("HTML_content").length > 0)? this.getXMLMessage().getElementsByTagName("HTML_content")[0] : false;
			break;
		}
		
		// On teste que le message contient bien un HTML_content
		if (noeud_HTML_content)
		{
			if (Number(this.getVersion()) < 3)
			{
				return_value = this.getContentNodeAsString(noeud_HTML_content);
			}
			else
			{
				var tab_HTML_content = new Array();
				for (var i=0; i<noeud_HTML_content.length; i++)
				{
					tab_HTML_content[i] = {id : noeud_HTML_content[i].getAttribute("id") , html : this.getContentNodeAsString(noeud_HTML_content[i])};
				}
				return_value = tab_HTML_content;
			}
		}
		else
		{
			return_value = false;
		}
		return return_value;
	},
	
	
	/**
	* getXML_content
	**/
	getXML_content : function()
	{	
		var noeud_XML_content;
		var return_value;
		
		switch (this.getVersion())
		{
			case "1":
				noeud_XML_content = (this.getXMLMessage().getElementsByTagName("XML_content").length > 0)? this.getXMLMessage().getElementsByTagName("XML_content")[0] : false;
			break;
			
			case "2" || "3":
				noeud_XML_content = (this.getXMLMessage().childNodes[1].getElementsByTagName("XML_content").length > 0)? this.getXMLMessage().childNodes[1].getElementsByTagName("XML_content")[0] : false;
			break;
			
			default:
				noeud_XML_content = (this.getXMLMessage().getElementsByTagName("XML_content").length > 0)? this.getXMLMessage().getElementsByTagName("XML_content")[0] : false;
			break;
		}
		
		// On teste que le message contient bien un XML_content
		if (noeud_XML_content)
		{
			// 1) On detecte le format du XML : string ou XML
			// On récupère le premier fils du noeud XML_content, on teste son type (3 = text, 1 = xml)
			// Si c'est une string : on essaie de la transformer en objet XML document
			if (noeud_XML_content.firstChild.nodeType == 3)
			{	
				var chaineXML = this.getContentNodeAsString(noeud_XML_content);
				
				// On transforme la chaineXML en objet XML Document
				// code for IE
				if (window.ActiveXObject)
				{
					var return_value = new ActiveXObject("Microsoft.XMLDOM");
					return_value.async = "false";
					// si le xml est mal formé, on retourne false
					if(!return_value.loadXML(chaineXML))
					{
						return_value = false;
					}
				}
				// code for Mozilla, Firefox, Opera, etc.
				else
				{
					var parser=new DOMParser();
					var return_value=parser.parseFromString(chaineXML,"text/xml");
				}
			}
			// 2) Dans le cas XML on renvoie le sous arbre contenu dans XML_content
			else
			{
				return_value = noeud_XML_content;
			}
		}
		else
		{
			return_value = false;
		}
		
		return return_value;
	},
	
	
	/**
	* getDebug
	**/
	getDebug : function()
	{	
		var noeud_DEBUG_content;
		var return_value;
		
		switch (this.getVersion())
		{
			case "1":
				noeud_DEBUG_content = (this.getXMLMessage().getElementsByTagName("debug").length > 0)? this.getXMLMessage().getElementsByTagName("debug")[0] : false;
			break;
			
			case "2" || "3":
				noeud_DEBUG_content = (this.getXMLMessage().firstChild.getElementsByTagName("debug").length > 0)? this.getXMLMessage().firstChild.getElementsByTagName("debug")[0] : false;
			break;
			
			default:
				noeud_DEBUG_content = (this.getXMLMessage().getElementsByTagName("debug").length > 0)? this.getXMLMessage().getElementsByTagName("debug")[0] : false;
			break;
		}
		
		// On teste que le message contient bien un Debug_content
		if (noeud_DEBUG_content)
		{
			return_value = this.getContentNodeAsString(noeud_DEBUG_content);
		}
		else
		{
			return_value = false;
		}
		return return_value;
	},
	
	
	/**
	* getContentNodeAsString
	**/
	getContentNodeAsString : function(node)
	{	
		var return_value = '';
		
		// Pour parer au probleme de Firefox et Opera qui eclatent les contenus de plus de 4ko (ou 32ko pour Opera) dans une collection de noeuds ...
		// ... , on detecte le nombre des noeuds qui stockent les données retournées par le serveur ...
		// ... , si on est en présence d'une collection : on la parcourt en concaténant le contenu de chacun de ses éléments
		// ... , si on est en presence d'un seul noeud, on retourne le contenu de celui-ci
		// ... , si on est en presence d'un noeud vide, on retourne une chaine vide
		if (node.childNodes.length > 1)
		{	
			for(i=0; i< node.childNodes.length; i++)
			{
				return_value += node.childNodes[i].nodeValue;
			}
		}
		else
		{
			if (node.childNodes.length == 1)
			{
				return_value = node.firstChild.nodeValue;
			}
			else
			{
				return_value = "";
			}
		}
		
		return return_value;
	}
}


/***************************************************************************************************/
/***************************************************************************************************/


/** 
* Transforme un formulaire en un objet Javascript contenant le nom des champs 
* ainsi que pour chacun leur(s) valeur(s). Est prévu pour gérer les champs de type radio , 
* checkbox , listbox (avec choix multiples possibles) en les traitant uniquement 
* dans le cas ou au moins une valeur a été spécifiées pour un élément de formulaire. 
* Ne traite pas les éléments de type submit , reset ou button. 
* 
* @En entree : prend l'id du formulaire a traiter 
* 
* @Retourne un objet JavaScript avec une propriété pour chaque champ du formulaire à soumettre. 
* La valeur de chaque propriété de l'objet est un tableau contenant une ou plusieurs valeurs à soumettre 
*/ 
function PFW_getFormValuesAsMap(id_form) 
{ 
	var params = new Object(); 
	var inputs = document.getElementById(id_form).elements; 
	for (var i=0; i<inputs.length; i++) 
	{ 
		var input = inputs[i]; 
		if (input.type == "radio" || input.type == "checkbox") 
		{ 
			//Cas des radios et checkboxes, ne les traite que s'ils sont checked 
			if (input.checked == true) 
			{ 
				if (params[input.name] == null) 
				{ 
					params[input.name] = new Array(); 
				} 
				params[input.name].push(input.value); 
			} 
		} 
		else if (input.type == "select-multiple") 
		{ 
			//Cas des Select multiple 
			for (var j=0; j<input.options.length; j++) 
			{ 
				if (input.options[j].selected == true) 
				{ 
					if (params[input.name] == null) 
					{ 
						params[input.name] = new Array(); 
					} 
					params[input.name].push(input.options[j].value); 
				} 
			} 
		} 
		else if (input.type == "submit" || input.type == "button" || input.type == "reset") 
		{ 
			//On exclue les submit , reset , button 
		} 
		else if (input.name != undefined && input.value != undefined) 
		{ 
			//On traite tous les autres cas : text , hidden , textarea ... 
			if (params[input.name] == null) 
			{ 
				params[input.name] = new Array(); 
			} 
			params[input.name].push(input.value); 
		} 
	} 
	return params; 
} 


/** 
* Retourne la query string contenant tous les champs avec que leur valeur d'un formulaire à soumettre. 
* Chaque valeur est encodee avant d'etre ajoutée à la query string. 
* 
* @En entree : prend l'id du formulaire a traiter 
* 
* @Retourne une query string 
*/ 
function PFW_getQueryString(id_form) 
{ 
	var params = PFW_getFormValuesAsMap(id_form); 
	var queryString = ""; 
	for (var name in params) 
	{ 
		var values = params[name]; 
		for (var i=0; i<values.length; i++) 
		{ 
			queryString += name + "=" + encodeURIComponent(values[i]) + "&"; 
		} 
	} 
	return queryString.substring(0,queryString.length-1);
}

/***************************************************************************************************/
/***************************************************************************************************/

/**
 * Fonction qui supprime les charactères invisibles (de type \n, tabulations...) dans une réponse XML
 */
function PFW_clean(d)
{
	function go(c)
	{
		if(!c.data.replace(/\s/g,''))
			c.parentNode.removeChild(c);
	}
	
	var bal=d.getElementsByTagName('*');

	for(i=0;i<bal.length;i++)
	{
		a=bal[i].previousSibling;
		if(a && a.nodeType==3)
			go(a);
		b=bal[i].nextSibling;
		if(b && b.nodeType==3)
			go(b);
	}
	return d;
}

/***************************************************************************************************/
/***************************************************************************************************/

/**
 * Fonction qui remplace la propriété innerHTML de n'importe quel élément
 * le but étant de pouvoir ajouter des sous éléments à un <table> (<thead>, <tbody>, <tr>, <td>) sous IE
 * (le innerHTML sur un <table> ne fonctionne pas correctement sous IE6)
 */
function PFW_customInnerHTML(id_dest, html)
{
	is_table_content= false;
	var dest= document.getElementById(id_dest);
	
	// Si l'element dont on doit rafraichir le contenu n'est pas present dans la page, on retourne false
	if(!dest)
	{
		return false;
	}
	
	// On detecte le type de balise de l'element dont on doit rafraichir le contenu
	// On recherche une balise de type table pour adapter le comportement de la fonction
	destTagName= dest.tagName.toLowerCase();
	if(destTagName=='table' || destTagName=='tr' || destTagName=='tbody' || destTagName=='thead' || destTagName=='tfoot')
	{
		is_table_content= true;	
	}
	
	// L'element dont on doit rafraichir le contenu est effectivement de type table ...
	if(is_table_content)
	{
		// On récupère le type de la première balise du contenu HTML a insérer
		var res= html.match(/<([a-z]+)/i);
		if(res && res[1])
		{
			balise= res[1];
		}
		// S'il n'y a aucune balise on assimile le cas à celui de la balise TD
		else
		{
			balise= 'td';
		}
			
		var content;
		
		// On recréée une table complète à partir du code HTML a insérer
		if(balise== 'td')
		{
			content='<table way_to_container="yes"><tbody way_to_container="yes"><tr is_searched_container="yes">'+ html +'</tr></tbody></table>';
		}
		else if(balise== 'tr')
		{
			content='<table way_to_container="yes"><tbody is_searched_container="yes">'+ html +'</tbody></table>';
		}
		else
		{
			content='<table is_searched_container="yes">'+ html +'</table>';
		}
		
		// On crée un élément temporaire qui autorise l'usage de innerHTML pour lui insérer via cette méthode, la table recréée précedemment
		// Le but de cette manipulation est d'obtenir une table qui soit parsable en DOM
		var container= document.createElement("div");
		container.innerHTML= content;
	
		// On parcourt desormais en DOM le sous arbre DOM ainsi obtenu à la recherche du contenu que l'on doit insérer
		// (l'équivalent DOM en fait du code html passé à la fonction PFW_customInnerHTML)
		var to_see=container;
		var found= null;
		while(to_see!=null)
		{
			var elem= to_see;
			to_see= null;
			
			for (var i=0;i<elem.childNodes.length;i++)
			{
				// On a trouvé le noeud qui contient notre code html ...
				if(elem.childNodes[i].getAttribute("is_searched_container")=="yes")
				{
					var src= elem.childNodes[i];
					
					// On supprime le contenu de l'element que l'on doit rafraichir
					while(dest.childNodes.length>0)
					{
						dest.removeChild(dest.childNodes[0]);
					}
					// On ajoute dans l'element que l'on doit rafraichir les noeuds DOM du contenu HTML passés à la fonction
					while(src.childNodes.length>0)
					{
						dest.appendChild(src.childNodes[0]);
					}
				}
				// On n'a pas trouvé le noeud qui contient notre code html à ajouter, on poursuit la recherche ...
				else if(elem.childNodes[i].getAttribute("way_to_container")=="yes")
				{
					to_see= elem.childNodes[i];
				}
			}
		}
	}
	// Si le contenu HTML a insérer n'est pas de type table, on utilise la méthode innerHTML classique
	else
	{
		dest.innerHTML= html;
	}
}
//*******************************************************************
// gestion du tri des demandes

var films= new Array();
var div_deplace= false;


// initialise les évenements js pour pouvoir trier les films par drag and drop
function init_films_triables()
{
	films= new Array();
	
	//... récupère la liste des demandes et les tables associées
	liste_div= document.getElementById('liste_films').getElementsByTagName('div');
	for(var j in liste_div)
	{
		if(liste_div[j].id)
		{
			var div= document.getElementById(liste_div[j].id)
			if(div.getAttribute('est_triable') && div.getAttribute('est_triable')=='oui')
			{
				films[films.length]= div;
			}
		}
	}
}

// commence à déplacer la table
function start_deplace_film(e)
{
	init_films_triables();
	if(!e)
		e= event;
	var target= (e.target || e.srcElement);
	var mouse_x= getMouseX(e);
	var mouse_y= getMouseY(e);
	// on note quelle table est déplacée
	div_deplace= target.parentNode;
	// fixe en dur la largeur du div pour qu'elle ne change pas lorsqu'il va sortir du flux
	div_deplace.baseWidth= div_deplace.offsetWidth;
	div_deplace.style.width= div_deplace.offsetWidth+"px";
	
	// rend le div transparent
	set_opacite(div_deplace, 0.5);
	
	// prépare la cadre qui va indiquer la prochaine position 
	var div= document.createElement('div');
	div.id	= 'prochaine_position_film';
	div.style.height= (div_deplace.offsetHeight-4)+"px";
	div.style.width= (div_deplace.offsetWidth-4)+"px";
	div_deplace.prochaine_position= div;
	
	// insert le bloc de remplacement juste au niveau du div
	div_deplace.parentNode.insertBefore(div, div_deplace.nextSibling);
	
	// on sort le div du flux
	div_deplace.style.position= 'absolute';
	
	// note des infos de déplacement pour la table
	
	div_deplace.start_pos_x = mouse_x - calcOffset(div_deplace, 'left');
	div_deplace.start_pos_y = mouse_y - calcOffset(div_deplace, 'top');
	
	div_deplace.target_td= target;
	
	// défini le onmouseup qui correspondera à la fin du déplacement
	document.onmouseup		= fin_deplace_film;
	document.onmousemove	= deplace_film;
	
	// annule l'evenement (évite la selectionne de texte en même temps que la déplacement)
	return false;
}

// déplace la table en fonction des déplacements de la souris
function deplace_film(e)
{
	if(!e)
		e= event;
	var html		= document.body.parentNode;
	var mouse_x		= getMouseX(e);
	var mouse_y		= getMouseY(e);
	
	var new_top		= mouse_y - div_deplace.start_pos_y;
	var new_left	= mouse_x - div_deplace.start_pos_x;
	var max_left	= Math.max(html.scrollWidth, document.body.scrollWidth) - div_deplace.offsetWidth;
	var max_top		= Math.max(html.scrollHeight,document.body.scrollHeight) - div_deplace.offsetHeight;
	//alert(max_top+"\n"+mouse_x + "\n"+ div_deplace.start_pos_x);
	// déplace le div en fonction des déplacements de la souris, sans sortir de la page
	new_top			= Math.max(0, Math.min(new_top, max_top));
	new_left		= Math.max(0, Math.min(new_left, max_left));
	
	div_deplace.style.top= new_top + "px";
	div_deplace.style.left= new_left + "px";	
	
	// s'assure que le div est bien affichée dans la page
	if(new_top - 30 < html.scrollTop)
		html.scrollTop= html.scrollTop - 30;
	else if(new_top + div_deplace.offsetHeight + 30 > html.scrollTop + html.clientHeight)
		html.scrollTop= html.scrollTop + 30;
		
	// on calcule la position du centre du div

	var div= div_deplace.prochaine_position;
	var position_before= null;
	var distance= 99999999;
	
	// cherche le film le plus proche en dessous de celui qu'on déplace
	for(var i in films)
	{
		if(films[i]!=div_deplace)
		{
			var pos_div_y= calcOffset(films[i], 'top');
			// si la table est en dessous de celle qu'on déplace et qu'elle est plus proche que la précedente trouvée
			// alors on note cette table
			if(pos_div_y > new_top && pos_div_y - new_top < distance)
			{
				position_before= films[i];
				distance= pos_div_y - new_top;
			}
		}
	}
	
	if(position_before==null)
		position_before= document.getElementById('liste_js_instructions');
	
	if(div.nextSibling!=position_before)
		div.parentNode.insertBefore(div, position_before);
	
	return false;
}

// on a fini de déplacer le film
function fin_deplace_film(e)
{
	if(!e)
		e= event;
	var id_demande	= div_deplace.getAttribute('id_demande');
	var id_projet	= div_deplace.id_projet;
	var new_priorite= null;
	var div			= div_deplace.prochaine_position;
	var old_priorite= parseInt(div_deplace.getAttribute('priorite'));
	
	// réinitlise les evenements liés utilisés pour le drag and drop
	document.onmouseup	= '';
	document.onmousemove= '';
	
	// restore la largeur de la table
	div_deplace.style.width= div_deplace.baseWidth;
	
	div.style.height= "0px";
	
	// replace la table dans le flux à la place du bloc de remplacement
	div.parentNode.insertBefore(div_deplace, div);
	// supprime le bloc de remplacement
	div.parentNode.removeChild(div);
	div_deplace.style.position= 'static';
	div_deplace.style.left= 'auto';
	div_deplace.style.top= 'auto';

	// récupère la nouvelle priorité de la table par rapport à la priorité du film le précédant dans la liste
	var prev_film= div_deplace.previousSibling;
	while(prev_film!=null && prev_film.tagName!='DIV')
	{
		prev_film= prev_film.previousSibling;
	}
	
	if(prev_film!=null && prev_film.tagName=='DIV')
	{
		if(!isNaN(parseInt(prev_film.getAttribute('priorite'))))
		{
			new_priorite= parseInt(prev_film.getAttribute('priorite'));
			if(new_priorite<old_priorite)
				new_priorite++;
		}
		else
			new_priorite= 1;
	}
	else
	{
		new_priorite= 1;
	}
	
	// retire la semi-transparence
	set_opacite(div_deplace, 1);

	// lance la maj des données en base (appel ajax) si la priorité est différente
	if(old_priorite!=new_priorite)
		update_priorite(id_demande, new_priorite, old_priorite);
		
	div_deplace		= false;
}


function update_priorite(id_demande, new_priorite)
{
	var base_url= document.getElementById('liste_films').getAttribute('base_url');
	var ajax= new PFW_AJAX(base_url+ "private/change_priorite.php?id_demande="+ id_demande +"&new_priorite="+ new_priorite +"&est_ajax=oui");
	
	ajax.action_fin_ATTENTE= function()
	{
		if(typeof(rafraichi_liste_demandes)!="undefined")
			rafraichi_liste_demandes();
	}
	ajax.HTTPrequest();
	
	
}


//*******************************************************************
// fonctions utilitaires

// change l'opacité d'un élément
function set_opacite(elem, val)
{
	val= Math.min(1, Math.max(0, val));
	elem.style.opacity		= val; 
	elem.style.mozOpacity	= val;
	elem.style.filter		= "alpha(opacity="+(val*100)+")";
	elem.style.khtmlOpacity	= val;	
}

// récupère la position x de la souris
function getMouseX(e)
{
	if(e!=null && typeof(e.pageX)!="undefined"){
		return e.pageX;
	}else{
		return (e!=null?e.x:event.x)+ document.documentElement.scrollLeft;
	}
};

// récupère la position y de la souris
function getMouseY(e)
{
	if(e!=null && typeof(e.pageY)!="undefined"){
		return e.pageY;
	}else{
		return (e!=null?e.y:event.y)+ document.documentElement.scrollTop;
	}
};

// calcule la position de l'element dans la page (top ou left)
function calcOffset(element, direction){
	var offset=0;
	if(direction=='left')
		attribute= 'offsetLeft';
	else
		attribute= 'offsetTop';
	while(element){
		offset+=element[attribute];
		element=element.offsetParent
	}
	return offset;
};
var flashMovie = null

function closeFlash()
{
	var flashContainer = document.getElementById("theFlash");
	
	if( document.getElementById('btn_closeFlash') )
		document.getElementById('btn_closeFlash').style.display="none";
	
	flashMovie = document.theFlashMovie;
	flashContainer.removeChild(flashMovie);
	
	flashContainer.style.display="none";
	
	if(document.getElementById("flash_perdu"))
	{
		document.getElementById("flash_perdu").style.display="block";
	}
	if( document.getElementById('bloc_reopen_flash') )
	{
		document.getElementById('bloc_reopen_flash').style.display="block";
	}
}

function reOpenFlash()
{
	var flashContainer = document.getElementById("theFlash");
	flashContainer.style.display="block";
	document.getElementById("btn_closeFlash").style.display="block";
	
	flashContainer.appendChild(flashMovie);
	
	document.getElementById("flash_perdu").style.display="none";
	if( document.getElementById('bloc_reopen_flash') )
	{
		document.getElementById('bloc_reopen_flash').style.display="none";
	}
}

//v1.7
// Flash Player Version Detection
// Detect Client Browser type
// Copyright 2005-2007 Adobe Systems Incorporated.  All rights reserved.
var isIE  = (navigator.appVersion.indexOf("MSIE") != -1) ? true : false;
var isWin = (navigator.appVersion.toLowerCase().indexOf("win") != -1) ? true : false;
var isOpera = (navigator.userAgent.indexOf("Opera") != -1) ? true : false;

function ControlVersion()
{
	var version;
	var axo;
	var e;

	// NOTE : new ActiveXObject(strFoo) throws an exception if strFoo isn't in the registry

	try {
		// version will be set for 7.X or greater players
		axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7");
		version = axo.GetVariable("$version");
	} catch (e) {
	}

	if (!version)
	{
		try {
			// version will be set for 6.X players only
			axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6");
			
			// installed player is some revision of 6.0
			// GetVariable("$version") crashes for versions 6.0.22 through 6.0.29,
			// so we have to be careful. 
			
			// default to the first public version
			version = "WIN 6,0,21,0";

			// throws if AllowScripAccess does not exist (introduced in 6.0r47)		
			axo.AllowScriptAccess = "always";

			// safe to call for 6.0r47 or greater
			version = axo.GetVariable("$version");

		} catch (e) {
		}
	}

	if (!version)
	{
		try {
			// version will be set for 4.X or 5.X player
			axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.3");
			version = axo.GetVariable("$version");
		} catch (e) {
		}
	}

	if (!version)
	{
		try {
			// version will be set for 3.X player
			axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.3");
			version = "WIN 3,0,18,0";
		} catch (e) {
		}
	}

	if (!version)
	{
		try {
			// version will be set for 2.X player
			axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash");
			version = "WIN 2,0,0,11";
		} catch (e) {
			version = -1;
		}
	}
	
	return version;
}

// JavaScript helper required to detect Flash Player PlugIn version information
function GetSwfVer(){
	// NS/Opera version >= 3 check for Flash plugin in plugin array
	var flashVer = -1;
	
	if (navigator.plugins != null && navigator.plugins.length > 0) {
		if (navigator.plugins["Shockwave Flash 2.0"] || navigator.plugins["Shockwave Flash"]) {
			var swVer2 = navigator.plugins["Shockwave Flash 2.0"] ? " 2.0" : "";
			var flashDescription = navigator.plugins["Shockwave Flash" + swVer2].description;
			var descArray = flashDescription.split(" ");
			var tempArrayMajor = descArray[2].split(".");			
			var versionMajor = tempArrayMajor[0];
			var versionMinor = tempArrayMajor[1];
			var versionRevision = descArray[3];
			if (versionRevision == "") {
				versionRevision = descArray[4];
			}
			if (versionRevision[0] == "d") {
				versionRevision = versionRevision.substring(1);
			} else if (versionRevision[0] == "r") {
				versionRevision = versionRevision.substring(1);
				if (versionRevision.indexOf("d") > 0) {
					versionRevision = versionRevision.substring(0, versionRevision.indexOf("d"));
				}
			}
			var flashVer = versionMajor + "." + versionMinor + "." + versionRevision;
		}
	}
	// MSN/WebTV 2.6 supports Flash 4
	else if (navigator.userAgent.toLowerCase().indexOf("webtv/2.6") != -1) flashVer = 4;
	// WebTV 2.5 supports Flash 3
	else if (navigator.userAgent.toLowerCase().indexOf("webtv/2.5") != -1) flashVer = 3;
	// older WebTV supports Flash 2
	else if (navigator.userAgent.toLowerCase().indexOf("webtv") != -1) flashVer = 2;
	else if ( isIE && isWin && !isOpera ) {
		flashVer = ControlVersion();
	}	
	return flashVer;
}

// When called with reqMajorVer, reqMinorVer, reqRevision returns true if that version or greater is available
function DetectFlashVer(reqMajorVer, reqMinorVer, reqRevision)
{
	versionStr = GetSwfVer();
	if (versionStr == -1 ) {
		return false;
	} else if (versionStr != 0) {
		if(isIE && isWin && !isOpera) {
			// Given "WIN 2,0,0,11"
			tempArray         = versionStr.split(" "); 	// ["WIN", "2,0,0,11"]
			tempString        = tempArray[1];			// "2,0,0,11"
			versionArray      = tempString.split(",");	// ['2', '0', '0', '11']
		} else {
			versionArray      = versionStr.split(".");
		}
		var versionMajor      = versionArray[0];
		var versionMinor      = versionArray[1];
		var versionRevision   = versionArray[2];

        	// is the major.revision >= requested major.revision AND the minor version >= requested minor
		if (versionMajor > parseFloat(reqMajorVer)) {
			return true;
		} else if (versionMajor == parseFloat(reqMajorVer)) {
			if (versionMinor > parseFloat(reqMinorVer))
				return true;
			else if (versionMinor == parseFloat(reqMinorVer)) {
				if (versionRevision >= parseFloat(reqRevision))
					return true;
			}
		}
		return false;
	}
}

function AC_AddExtension(src, ext)
{
  if (src.indexOf('?') != -1)
    return src.replace(/\?/, ext+'?'); 
  else
    return src + ext;
}

function AC_Generateobj(objAttrs, params, embedAttrs) 
{ 
  var str = '';
  if (isIE && isWin && !isOpera)
  {
    str += '<object ';
    for (var i in objAttrs)
    {
      str += i + '="' + objAttrs[i] + '" ';
    }
    str += '>';
    for (var i in params)
    {
      str += '<param name="' + i + '" value="' + params[i] + '" /> ';
    }
    str += '</object>';
  }
  else
  {
    str += '<embed ';
    for (var i in embedAttrs)
    {
      str += i + '="' + embedAttrs[i] + '" ';
    }
    str += '> </embed>';
  }
  
  if (params['IDCible'])
  {
  	document.getElementById(params['IDCible']).innerHTML = str;
  }
  else
  {  
  	document.write(str);
  }
}

function AC_FL_RunContent(){
  var ret = 
    AC_GetArgs
    (  arguments, ".swf", "movie", "clsid:d27cdb6e-ae6d-11cf-96b8-444553540000"
     , "application/x-shockwave-flash"
    );
  AC_Generateobj(ret.objAttrs, ret.params, ret.embedAttrs);
}

function AC_SW_RunContent(){
  var ret = 
    AC_GetArgs
    (  arguments, ".dcr", "src", "clsid:166B1BCA-3F9C-11CF-8075-444553540000"
     , null
    );
  AC_Generateobj(ret.objAttrs, ret.params, ret.embedAttrs);
}

function AC_GetArgs(args, ext, srcParamName, classid, mimeType){
  var ret = new Object();
  ret.embedAttrs = new Object();
  ret.params = new Object();
  ret.objAttrs = new Object();
  for (var i=0; i < args.length; i=i+2){
    var currArg = args[i].toLowerCase();    

    switch (currArg){	
      case "classid":
        break;
      case "pluginspage":
        ret.embedAttrs[args[i]] = args[i+1];
        break;
      case "src":
      case "movie":	
        args[i+1] = AC_AddExtension(args[i+1], ext);
        ret.embedAttrs["src"] = args[i+1];
        ret.params[srcParamName] = args[i+1];
        break;
      case "onafterupdate":
      case "onbeforeupdate":
      case "onblur":
      case "oncellchange":
      case "onclick":
      case "ondblclick":
      case "ondrag":
      case "ondragend":
      case "ondragenter":
      case "ondragleave":
      case "ondragover":
      case "ondrop":
      case "onfinish":
      case "onfocus":
      case "onhelp":
      case "onmousedown":
      case "onmouseup":
      case "onmouseover":
      case "onmousemove":
      case "onmouseout":
      case "onkeypress":
      case "onkeydown":
      case "onkeyup":
      case "onload":
      case "onlosecapture":
      case "onpropertychange":
      case "onreadystatechange":
      case "onrowsdelete":
      case "onrowenter":
      case "onrowexit":
	    case "onrowsinserted":
      case "onstart":
      case "onscroll":
      case "onbeforeeditfocus":
      case "onactivate":
      case "onbeforedeactivate":
      case "ondeactivate":
      case "type":
      case "codebase":
      case "IDCible" :
      case "id":
        ret.objAttrs[args[i]] = args[i+1];
        break;
       
      case "width":
      case "height":
      case "align":
      case "vspace": 
      case "hspace":
      case "class":
      case "title":
      case "accesskey":
      case "name":
      case "tabindex":
        ret.embedAttrs[args[i]] = ret.objAttrs[args[i]] = args[i+1];
        break;	
      default:
        ret.embedAttrs[args[i]] = ret.params[args[i]] = args[i+1];
    }
  }
  ret.objAttrs["classid"] = classid;
  if (mimeType) ret.embedAttrs["type"] = mimeType;
  return ret;
}
/****************************************************/
/* Librairie JS nécéssaire au test de configuration */
/* pour la VOD 										*/
/* Redaction : lsoudade 2007-10-31 - V1 			*/
/* Module : www-V1			 						*/
/****************************************************/


/* Configuration */
var DRM_PARAM_VERSION			= 1;
var DRM_PARAM_SECURITY_VERSION	= 2;


/* Permet de récupérer les informations sur la machine de l'utilisateur */
function checkInfos(strVerif)
{
	var detect = navigator.userAgent.toLowerCase();
	place = detect.indexOf(strVerif) + 1;
	thestring = strVerif;
	return place;
}


/* Fonction retournant le systeme d'exploitation */
function getOS()
{
	var OS;
	
	if (checkInfos('linux')) OS = "Linux";
	else if (checkInfos('x11')) OS = "Unix";
	else if (checkInfos('mac')) OS = "Mac";
	else if (checkInfos('win')) OS = "Windows";
	else OS = "Inconnu";
	
	return OS;
}


/* Fonction retournant le navigateur */
function getBrowser()
{	
	var browser;
	
	if (checkInfos('konqueror')) browser = "Konqueror";
	else if (checkInfos('firefox')) browser = "Firefox";
	else if (checkInfos('safari')) browser = "Safari";
	else if (checkInfos('omniweb')) browser = "OmniWeb";
	else if (checkInfos('opera')) browser = "Opera";
	else if (checkInfos('webtv')) browser = "WebTV";
	else if (checkInfos('icab')) browser = "iCab";
	else if (checkInfos('staroffice')) browser = "Star Office";
	else if (checkInfos('beonex')) browser = "Beonex";
	else if (checkInfos('chimera')) browser = "Chimera";
	else if (checkInfos('netpositive')) browser = "NetPositive";
	else if (checkInfos('phoenix')) browser = "Phoenix";
	else if (checkInfos('skipstone')) browser = "SkipStone";
	else if (checkInfos('msie')) browser = "Internet Explorer";
	else browser = "Inconnu";
	
	return browser;
}


/* Fonction réetournant la version du Lecteur Windows Media */
function getWMPVersion()
{
	var version = "Inconnu";
	
	if (getBrowser() == "Internet Explorer")
	{
		if (document.WMP7.versionInfo.substr(0,document.WMP7.versionInfo.indexOf("."))>=9)
		{
			version = document.WMP7.versionInfo.substr(0,document.WMP7.versionInfo.indexOf("."));
		}
	}
	
	return version;
}


/* Fonction retournant la version du composant DRM s'il est installé */
function getDRMComponent()
{
	return DRM_GetParam(DRM_PARAM_VERSION);
}


/* Fonction retournant la version du composant de sécurité DRM s'il est installé */
function getDRMSecurityComponent()
{
	return DRM_GetParam(DRM_PARAM_SECURITY_VERSION);
}


/* Fonction qui retourne l'objet DRM */ 
function DRM_GetParam(info)
{
	var DRMObj;
	
	try
	{
		var oDrm = DRM_GetObj();
		switch (info)
		{
			case DRM_PARAM_VERSION:
				DRMObj = oDrm.GetDRMVersion();
				break;
			
			case DRM_PARAM_SECURITY_VERSION:
				DRMObj = oDrm.GetDRMSecurityVersion();
				break;
			
			case DRM_PARAM_CLIENTINFO:
				DRMObj = oDrm.GetSystemInfo();
				break;
		}
	}
	catch (e)
	{
	    DRMObj = "Inconnu";
	}		
	
	return DRMObj;
}   


/* Fonction qui retourne l'objet DRM */ 
function DRM_GetObj()
{
	try
	{
		return( createActiveXObject("DRM.GetLicense"));
	}
	catch( e )
	{
        return "Inconnu";
    }		
	return(null);
}


/* Fonction qui invoque un activeX (gestion activeX pour Firefox) */
function createActiveXObject(progID)
{
	try
	{
		if (getBrowser() == "Internet Explorer")
		{
			rcObj = new ActiveXObject(progID);
		}
		else if (getBrowser() == "Firefox")
		{
			rcObj = new GeckoActiveXObject("{A9FC132B-096D-460B-B7D5-1DB0FAE0C062}");			
		}
		else
		{
			
		}
	}
	catch( e )
	{
		rcObj = null;
	}
	return(rcObj);
}


/* Fonction qui initialise le test de configuration */
function initConfigTest()
{
	// Le nom de l'attribut change selon le navigateur
	var attributClass = (document.all) ? "className":"class";
	
	var picto_OS 			= document.getElementById("picto_OS");
	var picto_BROWSER 		= document.getElementById("picto_BROWSER");
	var picto_PLAYER 		= document.getElementById("picto_PLAYER");
	var picto_COMPONENTS 	= document.getElementById("picto_COMPONENTS");

	// Le test n'a pas débuté
	picto_OS.setAttribute(attributClass, "picto_configtest_fleche");
	picto_BROWSER.setAttribute(attributClass, "picto_configtest_fleche");
	picto_PLAYER.setAttribute(attributClass, "picto_configtest_fleche");
	picto_COMPONENTS.setAttribute(attributClass, "picto_configtest_fleche");
	
	document.getElementById("check_OS").innerHTML = "";
	document.getElementById("check_BROWSER").innerHTML = "";
	document.getElementById("check_PLAYER").innerHTML = "";
	document.getElementById("check_COMPONENTS").innerHTML = "";

	loadConfigTest("OS",2000);
	setTimeout('loadConfigTest("BROWSER",2000)',2500);
	setTimeout('loadConfigTest("PLAYER",2000)',5000);
	setTimeout('loadConfigTest("COMPONENTS",2000)',7500);
}


/* Fonction de déroulement du test de la configuration de l'utilisateur */
function loadConfigTest(MOD,udpateState)
{
	// Le nom de l'attribut change selon le navigateur
	var attributClass = (document.all) ? "className":"class";

	// Initialisation des pictos des points à analyser
	var picto = document.getElementById("picto_"+MOD);
	
	// Initialisation de l'analyse des points à analyser
	var check = document.getElementById("check_"+MOD);
	
	// Le test n'a pas débuté
	picto.setAttribute(attributClass, "picto_configtest_fleche");
	
	check.innerHTML = "";
	
	// Démarrage du test
	picto.setAttribute(attributClass, "picto_configtest_check");
	check.innerHTML = " : analyse en cours...";

	setTimeout('UpdateState("'+MOD+'")',udpateState);
}

function UpdateState(MOD)
{
	// Le nom de l'attribut change selon le navigateur
	var attributClass = (document.all) ? "className":"class";

	// Initialisation des pictos des points à analyser
	var picto = document.getElementById("picto_"+MOD);
	
	// Initialisation de l'analyse des points à analyser
	var check = document.getElementById("check_"+MOD);
	
	// Le test n'a pas débuté
	picto.setAttribute(attributClass, "picto_configtest_fleche");

	switch (MOD)
	{
		case 'OS':
			var u_OS = getOS();
			if (u_OS == "Windows")
			{
				picto.setAttribute(attributClass, "picto_configtest_ok");
				check.innerHTML = u_OS+'<br />Vous devez utiliser Windows 2000, Windows XP, ou Windows Vista pour utiliser nos services.';
			}
			else
			{
				picto.setAttribute(attributClass, "picto_configtest_echec");				
				check.innerHTML = u_OS+'<br /><font color="red"><b>Nous sommes désolés mais notre service est compatible avec Windows uniquement.</b></font>';
			}
			break;
		
		case 'BROWSER':
			var u_BROWSER = getBrowser();
			if (u_BROWSER == "Internet Explorer")
			{
				picto.setAttribute(attributClass, "picto_configtest_ok");
				check.innerHTML = u_BROWSER+'<br />Vous devez au minimum utiliser la version 6 d\'Internet Explorer.';
			}
			else if (u_BROWSER == "Firefox")
			{
				picto.setAttribute(attributClass, "picto_configtest_attention");
				check.innerHTML = u_BROWSER+'<br /><b>'+u_BROWSER+' est compatible avec nos services, néanmoins nous vous conseillons d\'utiliser Internet Explorer à partir de la version 6 pour une optimisation totale.</b>';
			}
			else
			{
				picto.setAttribute(attributClass, "picto_configtest_echec");
				check.innerHTML = u_BROWSER+'<br /><font color="red"><b>Nous sommes désolés mais notre service est compatible avec les navigateurs Internet Explorer (à partir de la version 6) et Firefox.</b></font>';
			}
			break;
			
		case 'PLAYER':
			var u_PLAYER = getWMPVersion();
			if (u_PLAYER != "")
			{
				if (u_PLAYER > 9 && u_PLAYER < 11)
				{
					picto.setAttribute(attributClass, "picto_configtest_attention");
					check.innerHTML = u_PLAYER+'<br />Vous utilisez la version '+u_PLAYER+', nous vous recommandons très fortement d\'installer la dernière version.';
				}
				else if (u_PLAYER == 11)
				{
					picto.setAttribute(attributClass, "picto_configtest_ok");
					check.innerHTML = u_PLAYER;
				}
				else
				{
					picto.setAttribute(attributClass, "picto_configtest_echec");
					var u_BROWSER = getBrowser();
					if (u_BROWSER == "Internet Explorer")
					{
						check.innerHTML = u_PLAYER+'<br /><font color="red"><b>Nous n\'avons pas pu trouver votre Lecteur Windows Media. Merci de vérifiez que celui-ci est bien installé sur votre ordinateur.</b></font>';
					}
					else
					{
						check.innerHTML = u_PLAYER+'<br /><font color="red"><b>Impossible de trouver votre Lecteur Windows Media avec le navigateur '+u_BROWSER+'. Merci de refaire ce test en utilisant Internet Explorer.</b></font>';
					}
				}
			}
			else
			{
				picto.setAttribute(attributClass, "picto_configtest_echec");
			}
			break;
			
		case 'COMPONENTS':
			var u_COMPONENT = getDRMComponent();
			var u_SCOMPONENT = getDRMSecurityComponent();			
			check.innerHTML = u_COMPONENT + ' et ' + u_SCOMPONENT;
			if (u_COMPONENT != "Inconnu" && u_SCOMPONENT != "Inconnu")
			{
				picto.setAttribute(attributClass, "picto_configtest_ok");
			}
			else
			{
				picto.setAttribute(attributClass, "picto_configtest_echec");

				var u_BROWSER = getBrowser();
				if (u_BROWSER == "Internet Explorer")
				{
					check.innerHTML = u_COMPONENT+' / '+u_SCOMPONENT+'<br /><font color="red"><b>Le ou les composants requis ne sont pas installés sur votre ordinateur. Afin de pouvoir profiter pleinement de nos services, il est impératif de les installer.</b></font>';
				}
				else
				{
					check.innerHTML = u_COMPONENT+' / '+u_SCOMPONENT+'<br /><font color="red"><b>Impossible de trouver les composants requis avec le navigateur '+u_BROWSER+'. Merci de refaire ce test en utilisant Internet Explorer.</b></font>';
				}
			}
			break;
	}
}


function ConfigTestAfterPaiement(url_base, id_abonnement, id_demande)
{
	var result = '';
	var resultToDB = '';
	
	var u_COMPONENT 	= getDRMComponent();
	var u_SCOMPONENT 	= getDRMSecurityComponent();			
	var u_PLAYER 		= getWMPVersion();
	var u_BROWSER 		= getBrowser();
	var u_OS 			= getOS();
	
	// Verification de l'OS
	if (u_OS != "Windows")
	{
		result += "Nous sommes désolés mais notre service est compatible avec Windows uniquement.";
	}
	
	// Verification du navigateur
	if (u_BROWSER != "Internet Explorer")
	{
		if (u_BROWSER == "Firefox")
		{
			result += "Firefox est compatible avec nos services, néanmoins nous vous conseillons \nd'utiliser Internet Explorer à partir de la version 6 pour une optimisation totale.\n\n";
		}
		else
		{
			result += "Nous sommes désolés mais notre service est compatible avec les navigateurs Internet Explorer (à partir de la version 6) et Firefox.\n\n";
		}
	}

	// Verification du Windows Media Player
	if (u_PLAYER != "")
	{
		if (u_PLAYER >= 9 && u_PLAYER < 11)
		{
			result += "Vous utilisez la version " + u_PLAYER + " de Windows Media Player, \nnous vous recommandons très fortement d'installer la dernière version.\n\n";
			resultToDB += ';WMP ' + u_PLAYER;
		}
		else if (u_PLAYER < 9)
		{
			resultToDB += ';WMP introuvable';
			if (u_BROWSER == "Internet Explorer")
			{
				result += "Nous n'avons pas pu trouver votre Lecteur Windows Media. \nMerci de vérifiez que celui-ci est bien installé sur votre ordinateur.\n\n";
			}
			else
			{
				result += "Impossible de trouver votre Lecteur Windows Media avec le navigateur " + u_BROWSER + ". \nVous pouvez refaire ce test sur la page de fonctionnement en utilisant Internet Explorer.\n\n";
			}
		}
		else
		{
			resultToDB += ';WMP ' + u_PLAYER;
		}
	}
	else
	{
		resultToDB += ';WMP introuvable';
		result += "Nous n'avons pas pu trouver votre Lecteur Windows Media. \nMerci de vérifiez que celui-ci est bien installé sur votre ordinateur.\n\n";
	}

	// Verification des composants DRM
	if (u_COMPONENT == "Inconnu" || u_SCOMPONENT == "Inconnu")
	{
		resultToDB += ';DRM - introuvable';
		if (u_BROWSER == "Internet Explorer")
		{
			result += "Le ou les composants DRM requis ne sont pas installés sur votre ordinateur. \nAfin de pouvoir profiter pleinement de nos services, il est impératif de les installer.\n\n";
		}
		else
		{
			result += "Nous ne pouvons pas detecter avec le navigateur " + u_BROWSER + " les composants DRM requis. \nCependant, si ceux ci sont présent sur votre machine, vous pourrez voir votre film normalement.\n Sinon, nous vous invitons à refaire ce test sur notre page de configuration en utilisant Internet Explorer\n\n";
		}
	}
	else
	{
		resultToDB += ';DRM - ' + u_COMPONENT;
	}	

	
	// Affichage des eventuels messages d'erreurs
	if( result != '' )
	{
		alert(result);
	}

	// Déclenchement d'une requete ajax pour sauvegarder une image de la configuration WMP et DRM de l'utilisateur
	save_config_DLP( url_base, resultToDB, id_abonnement, id_demande );
}
var num_affiche; //stocke le numero de l'oeuvre dont la jaquette est sous la souris
var timer_affichage; //objet destiné a recevoir le timer d'affichage des infos

function getMouseY(e)
{
	if(e!=null && typeof(e.pageY)!="undefined"){
		return e.pageY;
	}else{
		return (e!=null?e.clientY:event.clientY)+ document.documentElement.scrollTop;
	}
};

function affiche_infos_bulle(id_oeuvre, num_edition , ev , chemin)		
{
	num_affiche=id_oeuvre + '_' + num_edition;
	var id = "infos_bulle_" + id_oeuvre + '_' + num_edition;
	
	// on recupere l'evenement
	if (!ev)
	{
		var ev = window.event
	}
		
	// on calcule la distance entre la souris et le haut de la fenetre (coordY)
	// on calcule la distance entre la souris et le haut du document (posy)
	// on calcule la distance entre la souris et le bord gauche du document (posx)
	if(ev!=null && typeof(ev.pageY)!="undefined")
	{
		coordY = ev.pageY - document.documentElement.scrollTop;
		posy = ev.pageY;
		posx = ev.pageX;
	}
	else
	{
   		coordY = (ev!=null?ev.clientY:event.clientY);
   		posy = ev.clientY + document.body.scrollTop + document.documentElement.scrollTop;
   		posx = ev.clientX + document.body.scrollLeft + document.documentElement.scrollLeft;
	}
	
	
	// Si la bulle existe on laffiche
	if (document.getElementById(id))
	{
		timer_affichage=setTimeout("affiche_after_time('"+id+"',"+coordY+","+posy+","+posx+")",500);
	}
	// Sinon on la crée
	else 
	{
		/* On crée le div qui va contenir l'info bulle */
		var div_conteneur = document.createElement("div");
		
		/* On lui met un style */
		div_conteneur.className = "infobulleFilm";
		
		/* On lui met un id unique comprenant l'id_oeuvre */
		div_conteneur.setAttribute("id",id);
		
		/* On l'envoie */
		document.body.appendChild(div_conteneur);
		
		/* On envoie une requete ajax pour récupérer les informations contenues dans l'info bulle, et construire la bulle */
		var loadRequest = new PFW_AJAX(chemin + "libs/infos_bulles_httprequest.php");

		loadRequest.setResponseType("xml");
		loadRequest.setIdChamp(id);
		loadRequest.setParametres("id_oeuvre=" + id_oeuvre + "&num_edition=" + num_edition);
		loadRequest.action_OK = function()	
		{ 		
		  	document.getElementById(this.getIdChamp()).innerHTML = this.getResponse().getHTML_content();
		  	document.getElementById(id).style.visibility="hidden";
		  	if(id_oeuvre+'_'+num_edition==num_affiche)
		  		// on affiche l'info bulle une fois que la jaquette est fini de chargé (element le plus long a chargé) 
		  		document.getElementById('infoBulleJaquette' + num_affiche).onload = function(){affiche_after_time(id,coordY,posy,posx);}
		  	else
		  		document.getElementById(id).style.display="none";
		  	
		  	document.getElementById(id).style.visibility="visible";
		}

		loadRequest.HTTPrequest();
	}	
}

function affiche_after_time(id,coordY,posy,posx)
{
	document.getElementById(id).style.display="block";
	deplaceBulle(id,coordY,posy,posx);
}
/************************************************************/
/************************************************************/
/************************************************************/


/* Fonction qui permet de masquer une info bulle existante */
function cache_infos_bulle(id_oeuvre, num_edition)
{
	num_affiche=null;
	clearTimeout(timer_affichage);
	var id = "infos_bulle_" + id_oeuvre + '_' + num_edition;
	document.getElementById(id).style.display="none";
}


/************************************************************/
/************************************************************/
/************************************************************/


function deplaceBulle(id,coordY,posy,posx)
{
	// On calcule la hauteur du div
	hauteur = document.getElementById(id).offsetHeight;

	// On calcule la taille de la fenétre
	if( typeof( window.innerWidth ) == 'number' ) 
	{
		//Non-IE
		myHeight = window.innerHeight; // hauteur de la fenétre
	} 
	else if( document.documentElement && ( document.documentElement.clientWidth || document.documentElement.clientHeight ) ) 
	{
		//IE 6+ in 'standards compliant mode'
		myHeight = document.documentElement.clientHeight; // hauteur de la fenétre
	} 
	else if( document.body && ( document.body.clientWidth || document.body.clientHeight ) ) 
	{
		//IE 4 compatible
		myHeight = document.body.clientHeight; // hauteur de la fenétre
	}

	// On calcule les coordonnées du coin inférieur gauche de l'info bulle selon IE ou Firefox
	var bas_gauche = coordY + hauteur;
	if (bas_gauche > myHeight)
	{	
		var la = posy - (coordY+hauteur-myHeight)
		document.getElementById(id).style.top= la +"px";
	}
	else
	{
		document.getElementById(id).style.top= posy+"px";
	}
	
	//en ajoutant 67px, on empeche la popin de se trouver sur la jaquette survolée
	document.getElementById(id).style.left= posx+67 +"px";
}


/************************************************************/
/******** POUR L'AFFICHAGE DE L'INFO BULLE OFFRE DVD ********/
/************************************************************/

function affiche_offre_DVD(id , ev , afficher)
{
	coordY = ev!=null?ev.y:event.y;
	posy = ev.clientY + document.body.scrollTop + document.documentElement.scrollTop - 180;
	posx = ev.clientX + document.body.scrollLeft + document.documentElement.scrollLeft - 280;
	deplaceBulle(id,coordY,posy,posx);
	timer_affichage=setTimeout("affiche_after_time('"+id+"',"+coordY+","+posy+","+posx+")",500);
}
function cache_offre_DVD(id)
{
	clearTimeout(timer_affichage);
	document.getElementById(id).style.display="none";
}

