/*=======================================================================
	Ce script est cense s occupper de tout ce qui ce rafraichit,
	ceci incluant 
	- les tags pubs correctement encapsulés
		2 tags pubs possibles 
		- o_pub_rm
		_ o_pub_banner
	- le tag estat
	- le tag Gstat
	=======================================================================*/
document.domain='orange.fr';
var adRectMediumTag='o_pub_rm';
var adBannerTag='o_pub_banner'; 
var adTag2Check_ary=new Array(adRectMediumTag,adBannerTag);
var sGstatDivId='o_audience';
var sEstatDivId='o_estat';
var _style='display:none;border:1px solid black;';
var debug=0;
//var window_obj=window;
function o_refresh(params_str){
	// ================================================================================================
	// on rafraichit la pub
	checkFrames(window);
	// ================================================================================================
	// on transforme la chaine recue en tableau de parametres
	var params_ary=new Array();
//	if(!(params_ary=aOe(params_str))){alert('refresh.js::o_refresh---aucun parametre passe renvoi false notamment pour les parametres du tag estat');return false;}
	// ================================================================================================
	// verif des parametres requis/obligatoire
	var aRequired=new Array('serial','pm','gpm');
	for (var i=0;i<aRequired.length;i++){
		var key=aRequired[i];
//		if( !params_ary[key]) { alert('le parametre requis '+key+' n est pas renseigne, rajouter '+key+'=maValeur,');return false;}
	}
	// ================================================================================================
	// comptabilisation de l audience gStat
	if(!params_ary['psup']){params_ary['psup']='';}
	if(!params_ary['path']){params_ary['path']='';}
	if(!params_ary['hst']){params_ary['hst']='';}
	o_audience(params_ary['psup'], params_ary['path'], params_ary['hst']);
	// ================================================================================================
	// Appel a la fonction de comptabilisation de l audience estat
	if(!params_ary['master']){params_ary['master']='';}
	o_estatl(params_ary['serial'],params_ary['master'],params_ary['pm'],params_ary['gpm']); 
	return true;
}
// ================================================================================================
// fonction qui split les arguments qui lui sont passées (issues d une fonction ecrite par Ben et legerement modifiée
// string => hash
function aOe(sOpts) { 
	var aRslt = new Array();
	if ( !(typeof sOpts!='undefined') && (sOpts.indexOf('=')!=-1) ){return false;}
	var aOpts = sOpts.split(',');
	var ptrn = /\s*(\w*)\s*=\s*(.*)\s*/;
	for (var i=0;i<aOpts.length;i++){
		var myPair = aOpts[i];
		ptrn.exec(myPair);
		aRslt[RegExp.$1] = RegExp.$2;
	}
	return aRslt;
}
// ================================================================================================
// declenche une mesure comptabilisee gStat
function audience( psup, path, hst ){
	var rnd=Math.round(Math.random()*10000000000);
	var url="http://iapref.orange.fr/track?"; 
	if(!hst){var hst=window.location.hostname;}
	url+="sn="+escape(hst);
	if (document.referrer!=''){
		url+='&h='+escape(document.referrer);
	} else {url+='&h=0';}
	if(!path){var path=window.location.href.substring(window.location.protocol.length+2+window.location.hostname.length);}
	url+="&pn="+escape(path);
	if(psup){url+="&"+psup;}
	url+="&r="+rnd;
	// on cree l image qui sera inseree dans le div
	var elemImg=document.createElement('img');
	elemImg.setAttribute('src',url);
	elemImg.setAttribute('width',1);
	elemImg.setAttribute('height',1);

	if(!(obj=document.getElementById(sGstatDivId))) { 
		//if(debug>=3){alert('refresh.js::audience---creation d un elem '+sGstatDivId+' pour comptabliser les tags gstat');}
		// on commence par creer le div que l on va rattacher au body
		var msg='refresh.js::audience---l objet '+sGstatDivId+' n existe pas on le cree';
		var elemDiv=document.createElement('div');
		elemDiv.setAttribute('id',sGstatDivId);
		elemDiv.setAttribute('style',_style);
		// on recupere le body de ce "document" auquel on rattache le div puis l image
		Body = document.getElementsByTagName("BODY"); 
		if (Body){ 
			Body[0].appendChild(elemDiv); 
			elemDiv.appendChild(elemImg); 
		}
		//document.body.innerHTML+='<div id="'+sGstatDivId+'" style="'+_style+'">'+msg+'<img src="'+url+'" width="1" height="1"></div>';
	}else{
		//if(debug>=3){alert('refresh.js::audience---recyclage de l elem '+sGstatDivId+' pour comptabliser les tags gstat');}
		obj.parentNode.replaceChild(elemImg, obj);
	}
	return true;
}
// ================================================================================================
// declenche une mesure comptabilisee chez estat
function o_estatl(_s,_g,_p,_c){
	if(!_s){return false;}
	var url='http://prof.estat.com/m/web/'+_s+'?';
	url+='n='+Math.round(Math.random()*1000000000);
	if(_g!='')url+='&g='+_g;
	if(_c!='')url+='&c='+escape(_c);
	if(_p!='')url+='&p='+escape(_p);
	var _R;
	if(navigator.appName=='Netscape')_R=escape(document.referrer);
	else(top!=null && top.location!=null && typeof(top.location.href)=='string')?_R=escape(top.document.referrer):_R=escape(document.referrer);
	if (_R=='undefined'||_R=='')_R='_bm_';
	url+='&r='+_R;
	if(typeof(screen)=="object"){
		url+='&scw='+screen.width;
		url+='&sch='+screen.height;
		url+='&scp='+screen.colorDepth;
	}
	// on cree l image qui sera inseree dans le div
	var elemImg=document.createElement('img');
	elemImg.setAttribute('src',url);
	elemImg.setAttribute('width',1);
	elemImg.setAttribute('height',1);

	if(!(obj=document.getElementById(sEstatDivId))) { 
		//if(debug>=3){alert('refresh.js::audience---creation d un elem '+sEstatDivId+' pour comptabliser les tags estat');}
		// on commence par creer le div que l on va rattacher au body
		var msg='refresh.js::o_estatl---l objet '+sEstatDivId+' n existe pas on le cree';
		var elemDiv=document.createElement('div');
		elemDiv.setAttribute('id',sEstatDivId);
		elemDiv.setAttribute('style',_style);
		// on recupere le body de ce "document" auquel on rattache le div puis l image
		Body = document.getElementsByTagName("BODY"); 
		if (Body){ 
			Body[0].appendChild(elemDiv); 
			elemDiv.appendChild(elemImg); 
		}
		//document.body.innerHTML += '<div id="o_estat" style="'+_style+'">'+msg+'<img src="'+url+'" width="1" height="1"></div>';
	}else{
		//if(debug>=3){alert('refresh.js::o_estatl---recyclage de l elem '+sEstatDivId+' pour comptabliser les tags gstat');}
		obj.parentNode.replaceChild(elemImg, obj);
	}
	return true;
}
// ================================================================================================
// rafraichit tous les elements de pubs dont le nom commence par o_pub (o_pub, o_pub1, o_pub2, ... o_pub25)
function checkFrames(winObj){
	var msg;
	// on recupere le nb de frame fille a celle ci
	var nbChildFrames=winObj.frames.length;
//	if(debug>=3){alert("refresh.js::checkFrames---parcours de la frame \n"+winObj.location+"\ncelle ci comporte "+nbChildFrames+' frames');}
	// on s occuppe des frames filles
	for(var ind_frame=0;ind_frame<nbChildFrames;ind_frame++){	
//		if(debug>=4){alert('refresh.js::checkFrames---on boucle sur la frame '+winObj.frames[i].location);}
		if (!checkFrames(winObj.frames[ind_frame])){
			msg='refresh.js::checkFrames---la recuperation des frames presentes dans l objet window suivant a echouee : '+winObj.location;
//			alert(msg);
			return false;
		}
	}
	// on commence par rafraichir les pubs presentes sur cet objet window
	if(!refreshFrameAds(winObj)){
		msg='refresh.js::checkFrames---la recuperation des frames presentes dans l objet window suivant a echouee : '+winObj.location;
//		alert(msg);
		return false;
	}
	return true;
}

// ================================================================================================
// identique a la fonction in_array du php
function in_array(s,ary){
	for(var i=0;i<ary.length;i++){
		if(s==ary[i]){return true;}
	}
	return false;
}
// ================================================================================================
// met en pause sans cramer le cpu
function pause(numberMillis) {
	var now = new Date();
	var exitTime = now.getTime() + numberMillis;
	while (true) {
		now = new Date();
		if (now.getTime() > exitTime)
			return;
	}
}
var hop = 0;
// ================================================================================================
// parcourt la frame courante a la recherche des element ayant un divid specifie o_pub par ex
function refreshFrameAds(frameObj){
//	if(debug>=3){alert("refresh.js::refreshFrameAds---parcours de la frame \n"+frameObj.location);}
	hop++;
	// on recupere tous les divs de la page courante
	try {
		var divs_ary=frameObj.document.getElementsByTagName('div');
	} catch(err) {
		var urlF = '';
		try {
			urlF = frameObj.location.href;
		} catch (err2) {
//			alert("même pas pu recuperer l'url de la frame...\n err = " + err + "\nerr2 = " + err2 + "\nappel num : " + hop);
		}
//		alert("probleme d'accès aux divs ...." + err + "dans la frame :" + urlF);
	}
	var nb_divs=divs_ary.length;

	// on parcourt tous les divs
	for(var ind_div=0;ind_div<nb_divs;ind_div++){
		var cur_div=divs_ary[ind_div];
		
		if(typeof(cur_div) != 'object')
		{
//			alert('refresh.js::refreshFrameAds---l element '+ind_div+' du tableau n est pas un objet ... bizarre on est cense ne recuperer que les divs ... ');
			continue;
		}
		// on recupere le nom du div courant
		var div_name=cur_div.getAttribute('name');
		// on verifie que celui-ci soit conforme aux tags de pubs recherches sinon on passe au suivant
		if( !(in_array(div_name,adTag2Check_ary) && typeof(div_name)=='string') ){continue;}

		var params_str='';
		var confType='';
		switch(div_name){
			case adBannerTag:confType='banner';break;
			case adRectMediumTag:confType='rm';break;
		}
	
		//alert('bla');
		// construction de la chaine de parametre qui sera passee a refreshAd
		// celle ci comprenant les dimensions de l iframe tout ca :)
		params_str+='src='+refresh_conf_ary[confType]['src'];
		params_str+=',type=iframe';
		params_str+=',divname='+div_name;
		params_str+=',scrolling='+refresh_conf_ary[confType]['scrolling'];
		params_str+=',frameborder='+refresh_conf_ary[confType]['frameborder'];
		params_str+=',width='+refresh_conf_ary[confType]['width'];
		params_str+=',height='+refresh_conf_ary[confType]['height'];
		if (!refreshAd(params_str,cur_div,frameObj)){
//			alert('refresh.js::refreshAd---la fonction refreshAd a renvoyee une erreur');
			return false;
		}
	}
	return true;
}
// ================================================================================================
// rafraichit l'element de pub specifie en le rechargeant via une url specifiee
function refreshAd(params_str,adObj,winObj){
	// recuperation des parametres
//	if(!(params_ary=aOe(params_str))){alert('refresh.js::refreshAdWithIframe---aucun parametre passe renvoi false');return false;}
	// parametres obligatoires
	var aRequired=new Array('type','src','divname');
	for (var i=0;i<aRequired.length;i++){
		var key=aRequired[i];
//		if( !params_ary[key]) { alert('refresh.js::refreshAd---le parametre requis '+key+' n est pas renseigne, rajouter '+key+'=maValeur');return false;}
	}
	var d=document;
	if(!winObj){ 
//		alert('refresh.js::refreshAd---l objet window n est pas defini, il manque un parametre a l appel de la fonction refreshAd');
		return false;
	}
	if(!adObj){
//		alert('refresh.js::refreshAd---l objet o_pub_quelquechose a recharger n est pas defini, il manque un parametre a l appel de la fonction refreshAd');
		return false;
	}
	var d=winObj.document;

	// en premier on cree le div de remplacement qui contiendra l iframe ou le script JS
	var divObj=d.createElement('div'); 
	divObj.setAttribute('name',params_ary['divname']);

	// on cree ensuite l ifame ou le script qui sera inclu dans le div
	var childObj=d.createElement(params_ary['type']); 
	// le nom de la chose
//	childObj.setAttribute('id',params_ary['divname']);
//	childObj.setAttribute('name',params_ary['divname']);
	// la source du javascript ou de l iframe
	var iChild = findAnId(params_ary['divname'])
	childObj.setAttribute('id',iChild);
	childObj.setAttribute('src',params_ary['src']);
	// les parametres optionnels
	switch(params_ary['type']){
		case 'iframe':
			// une frame a l iframe ?
			var sFrameBorder='no';
			if(params_ary['frameborder'] && params_ary['frameborder']=='yes'){sFrameBorder='yes'}
			childObj.setAttribute('frameborder',sFrameBorder);
			// des ascenseurs peut etre ?
			var sScrolling='no';
			if(params_ary['scrolling'] && params_ary['scrolling']=='yes'){sScrolling='yes'}
			childObj.setAttribute('scrolling',sScrolling);
			// la largeur
			if(params_ary['width']){childObj.setAttribute('width',params_ary['width']);}
			// la hauteur
			if(params_ary['height']){childObj.setAttribute('height',params_ary['height']);}
			break;
		case 'script':
			childObj.setAttribute('language','javascript');
			break;
	}
	// on colle comme element fils l iframe ou le script ainsi cree
	divObj.appendChild(childObj);
	// remplacement de la pub ... la partie tetale quoi
	if ( !(newObj = adObj.parentNode.replaceChild(divObj,adObj)) ) { 
//		alert('refresh.js::refreshAd---l objet publicitaire n a pu etre remplacé');
		return false;
	}
	winObj.document.getElementById(iChild).src = params_ary['src'];
	return true;
}
function findAnId(sRadix) { /* renvoie un id libre de forme radix_# */
	var i=0;
	while (i2h(sRadix+"_"+i) != false) { i++; }
	var rslt = sRadix+"_"+i;
	return rslt;
}

