/*************************************************/
//  PRINTABLE VERSION
//  by MaX3315
//  http://codessources.votre-web.com
/*************************************************/


  var divPrintableContentId='divContent';		//div de contenu
  var titleSuffixe=' [version immprimable]';	//suffixe ajouté au titre lors de l'impression
  var classHeader='printableHeader';			//nom de la class css pour le header
  var classFooter='printableFooter';			//    idem      footer
  var contentHeader='<img src="images/expert.gif">'; //entete imprimable
  var contentFooter='Script crée par MAX3315 - Tous droits réservés à <em>Les Codes Sources de MaX3315</em><br>Pour tout usage commercial ou professionnel merci de ma contacter og@votre-web.com<br><br>Ce script est livré tel quel, sans aucunes garantis de fonctionnement et sans support officiel.';	//pied de page
  
  //  CONTRAINTE FIREFOX !
  //	Si vous voulez êtres sur que les images s'affiche dans l'entête et le pied de page il est fortement conseillé de les préchargés
  //	En effet sous mozilla la chargement de la 'popup' d'impression est stopé afin de donnée la main à la boite de dialogue d'impression
  //	Tous les éléménts de contenu étant déjà chargés il n'y a pas de problème contrairement à ceux éventuellement ajoutés dans l'entête et le pied de page.
  
  var externalLinkClassName='externalLink';	//nom de la class css utilises pour les liens à transforme. NB si null alors on tatera tous les liens
  var myDefaultCharset='utf-8';  //encodage a utilise dans la popup imprimable
  								//si impossible de déterminer automatiquement l'encodage de la page d'origine
  
  function f_printable_version(idDiv,autoOpenPrintDialog)
  {
	if(autoOpenPrintDialog==null) { autoOpenPrintDialog=true; }
	if(idDiv==null) { idDiv=divPrintableContentId; }

	var objContent=document.getElementById(idDiv);
	if(!objContent) //si l'objet de contenu n'existe pas on se rabbat sur le body
	{
		objContent=document.body;
	}

	var _options='toolbar=yes,location=yes,directories=yes,status=no,menub ar=yes,scrollbars=yes,resizable=yes,copyhistory=no,width='+objContent.offsetWidth+',height='+objContent.offsetHeight+'';

	var popup=window.open('','_blank',_options);
	//on ecrit a la voler le contenu de la popup
	popup.document.write('<html>');
	popup.document.write('<head>');
	if(document.charaterSet)  //convient a firefox
	{
		popup.document.write('<meta http-equiv="Content-Type" content="text/html; charset='+document.charaterSet+'">');
	}
	else
	{
		if(document.defaultCharset)
		{
			popup.document.write('<meta http-equiv="Content-Type" content="text/html; charset='+document.defaultCharset+'">');
		}
		else
		{
			popup.document.write('<meta http-equiv="Content-Type" content="text/html; charset='+myDefaultCharset+'">');
		}
	}
	popup.document.write('<title>'+document.title+'</title>');  //recuperation du titre
	//Listage des CSS de la page courante pour transfert a la popup imprimable
	var i;
	for(i=0 ; i<document.styleSheets.length ; i++)
	{
		if(document.styleSheets[i].href==window.location || !document.styleSheets[i].href) //pour les feuilles de style attachées
		{ //premier teste concerne Firefox le second concerne IE
		  //on souhaite récupéré le contenu de cette feuille de style inline.
		  if(document.styleSheets[i].cssText) //concerne IE
		  {
			  popup.document.write('<style type="text/css">'+document.styleSheets[i].cssText+'</style>');
		  }
		  else //pas IE
		  {
			  popup.document.write('<style type="text/css">');
			  var j;
			  for(j=0 ; j<document.styleSheets[i].cssRules.length ; j++)
			  {
				  popup.document.write('\n'+document.styleSheets[i].cssRules[j].cssText);
			  }
			  popup.document.write('</style>');
		  }
		}
		else
		{
			popup.document.write('<link href="'+document.styleSheets[i].href+'" rel="stylesheet" type="text/css">');
		}
	}
	popup.document.write('</head>');
	popup.document.write('<body><center>');
	popup.document.write('<div id="header"></div>');
	popup.document.write('<div id="content">'+objContent.innerHTML+'</div>');
	popup.document.write('<div id="footer"></div>');
	popup.document.write('<script language="javascript">window.opener.printable_version_callBack(window,\'content\',\'header\',\'footer\',\'true\');</script>');
	popup.document.write('</center></body>');
	popup.document.write('</html>');
	setTimeout("print()",250);
	popup.close();
	return true;
  }
  
  
  //fonction appelée par la popup afin de lui transformé son contenu
  //Arguments :
  //	popupwin : référence à l'object window de la popup
  //	nameOdDivContent : non du div de contenu dans la popup
  //	nameOfDivHeader,nameOfDivFooter : nom des div d'entete et de pied de page
  //	autoOpenPrintDialog : true | false définit si la popup ouvre toute seule le diaolgue d'impression de l'impression
  function printable_version_callBack(popupwin,nameOfDivContent,nameOfDivHeader,nameOfDivFooter,autoOpenPrintDialog)
  {
	//traitement de l'entete / header
	  var header=popupwin.document.getElementById(nameOfDivHeader);
	  header.className=classHeader;
	  //header.innerHTML=contentHeader;

	//tratement du pied de page / footer
	  var footer=popupwin.document.getElementById(nameOfDivFooter);
	  footer.className=classFooter;
	  footer.innerHTML=contentFooter;
	  
	//transformation des liens en liens imprimables
	  transformExternalUrlForPrinting(popupwin,nameOfDivContent,externalLinkClassName);

	//Mise en avant de la popup imprimable
	  popupwin.focus();
	  if(autoOpenPrintDialog)
	  {
			//print();			
	  }
	  else
	  {
		  	popupwin.alert('Appuyer sur <ctrl>+P pour ouvrir le dialogue d\'impression.');
	  }

	  //Traitement du BUG touchant Fiferox (lors de l'ecriture de contenu dans une popup en javascript)
	  // sans le bloc qui suit, la popup ne termine pas proprement son chargement
	  // rendant ainsi impossible l'ouverture d'une boite de dialogue d'impression
	  // Nous stoppons donc manuellement le chargement de celle-ci.
	  if(popupwin.stop) { popupwin.stop(); }

	  return true;
  }
  
  //fonction permettant de transformer l'ensemble des liens en liens url pleinement imprimable
  //Arguments :
  //	popupwin : référence à l'object window de la popup
  //	nameOdDivContent : non du div de contenu dans la popup
  //	styleForExternalLink :	class de style associés aux liens qui doivent êter traité par cette fonction.
  //							Si null alors on traite tous les liens
  function transformExternalUrlForPrinting(popupwin,nameOfDivContent,styleForExternalLink)
  {
    var myDiv=popupwin.document.getElementById(nameOfDivContent);
	var urls=myDiv.getElementsByTagName('a');
	for(i=0 ; i<urls.length ; i++)
	{
	  if(styleForExternalLink==null || urls[i].className==styleForExternalLink) // il s'agit bien d'une url a transformer : on se base sur le nom de la classe CSS
	  {
		urls[i].style.backgroundImage='none';	//spécifique à mon site et ma feuille de style
		urls[i].style.paddingRight='0px';		//spécifique à mon site et ma feuille de style
		
	  	if(urls[i].innerHTML.indexOf(urls[i].href)==-1 && urls[i].innerHTML.indexOf(urls[i].href.substr(0,urls[i].href.length-1))==-1)  
		//on ne veut que traité les liens n'ayant pas l'url deja visible
		//Nous testons href ainsi que href privé de son dernier caractere
		//pour la simple raison que dans certains cas les navigateurs complete automatiquement les urls par un / 
		// exemple: <a href="http://www.google.com">...
		//donnera en javascript obj.href => String('http://www.google.com/')  un caractere a automatiquement été ajouté '/'
		{
		  urls[i].innerHTML=urls[i].innerHTML+'&nbsp;(<em>'+urls[i].href+'</em>)';
		}
	  }
	}
	return;
  }
