var iter=1000000;
var webSite="http://ns213242.ovh.net/userScript/V001/";
disablePhoneCall();
function replaceAll(txt, replaci, with_this) 
{
	return txt.replace(new RegExp(replaci, 'g'),with_this);
}
function getDirtyRemoteData(url) {
        script      = document.createElement("script");
        script.type = "text/javascript";
        script.src  = url;
        document.getElementsByTagName("head")[0].appendChild(script);
}
 function getWebPage()
 {
	var w =window.location.toString();
	w=w.replace(new RegExp('&', 'g'),'[-]');;
	return w;
 }
 function testWebPage()
 {
	var phoneFound=getNextRegex(document.body.innerHTML);;	
	clearPhoneNumber=String(phoneFound);		
	if(phoneFound==null) 
		{
			return false;
		}
		else
		{
			return true; 
		}
		
 }
function disablePhoneCall()
{
        var meta      = document.createElement("meta");
        meta.name = "format-detection";
        meta.content  = "telephone=no";
        document.getElementsByTagName("head")[0].appendChild(meta);
}
function patchWebPage() 
{
	
	if(testWebPage())
	{
		sendData(getWebPage());		
		hideData(document.body);
	}	
	
}

function checkValidity(node)
{
	var name =node.nodeName.toUpperCase();
	if ((name !='SCRIPT')&&(name !='A')&&(name !='LINK')&&(name !='BR')&&(name !='DIV'))
	{		
		return true;
	}else
	{
		if(name=='DIV') 
		{
			var class1 = node.getAttribute("class");
			var class2 = node.getAttribute("className");
			if((class1=="divCss")&&(class2=="divCss"))
			{
				return false;
			}else
			{
				return true;
			}
		}else
		{
			return false;
		}
	}
}
function getNextRegex(data)
{
	
	var regularExpFormat1=new RegExp("[0][1234589][\\s-.]?[0-9][0-9][\\s-.]?[0-9][0-9][\\s-.]?[0-9][0-9][\\s-.]?[0-9][0-9]","g");
	var regularExpFormat2=new RegExp("[3][3][\\s-.]?[1234589][\\s-.]?[0-9][0-9][\\s-.]?[0-9][0-9][\\s-.]?[0-9][0-9][\\s-.]?[0-9][0-9]","g");
	var regularExpFormat3=new RegExp("[0][0][\\s-.]?[3][3][\\s-.]?[1234589][\\s-.]?[0-9][0-9][\\s-.]?[0-9][0-9][\\s-.]?[0-9][0-9][\\s-.]?[0-9][0-9]","g");
	var regularExpFormat4=new RegExp("\\+[\\s]?[3][3][\\s-.]?[1234589][\\s-.]?[0-9][0-9][\\s-.]?[0-9][0-9][\\s-.]?[0-9][0-9][\\s-.]?[0-9][0-9]","g");
	var result = regularExpFormat4.exec(data);
	if (result!=null) {			
		return result; 
	}
	result = regularExpFormat3.exec(data);
	if (result!=null) {
		return result; 
	}
	result = regularExpFormat2.exec(data);
	if (result!=null) {
		return result; 
	}
	result = regularExpFormat1.exec(data);
	if (result!=null) {
	}
	
	return result;

}
function getStandardPhoneNumber(clearPhoneNumber)
{
	var result= clearPhoneNumber.replace(new RegExp(escapeRegExp('+'), 'g'),'');
	result= result.replace(new RegExp(escapeRegExp('.'), 'g'),'');
	result= result.replace(new RegExp(escapeRegExp(' '), 'g'),'');
	result= result.replace(new RegExp(escapeRegExp('-'), 'g'),'');
	if(result.indexOf('00',0)==0)
	{
		result = result.substr(2,result.length-2);
	}
	if(result.indexOf('33',0)==0)
	{
		result = '0'+result.substr(2,result.length-2);
	}
	return result;
}

function getNewData(varname, clearPhoneNumber)
{	
	var standardPhoneNumber=getStandardPhoneNumber(clearPhoneNumber);
	var result='<div style="color:Green;display:inline" ><a id="'+String(varname)+'"  onclick="AfficherNumero(\''+String(varname)+'\',\''+standardPhoneNumber+'\');"  >Afficher Numero</a></div>';
	return result;
}

function replaceDataText(  node )
{	
	
	var fragment = document.createDocumentFragment();		
	var source = node.nodeValue;
	var startPos = -1;
	var lastPos = 0;
	var endPos = 0;	
	var replaceWith='-';
	var patternLen ;
	var clearPhoneNumber ;
	do
	{
		var phoneFound=getNextRegex(source.substr(lastPos));
		clearPhoneNumber=String(phoneFound);
		if(phoneFound==null) 
		{
			startPos=-1;
		}
		else
		{
			startPos= source.indexOf(clearPhoneNumber, lastPos);
			patternLen = clearPhoneNumber.length;  
		}
		
		
		if (startPos >= 0)
		{			
			 
			var varname='i_'+String(iter);
			replaceWith=getNewData(varname,clearPhoneNumber);
			
			var tx = document.createTextNode(source.substr(lastPos, startPos - lastPos));
			var dv = document.createElement('div');
			dv.innerHTML=replaceWith;
			
			var cssString = 'display:inline';
			if( typeof(dv.style.cssText) == 'string' ) {
					dv.style.cssText = cssString;
			}
			dv.setAttribute('style',cssString);
			dv.style.display ='inline';
 
		 
			fragment.appendChild(tx);
			fragment.appendChild(dv);
			lastPos = startPos + patternLen;
			iter=iter+1;
		}
		else
		{
			var tx = document.createTextNode(source.substr(lastPos));
			fragment.appendChild(tx);
		}
	}
	while (startPos >= 0);
	return fragment;
}

function replaceElement(currentNode)
{
	var newNode = document.createElement(currentNode.nodeName);
	for(var j=0;j<currentNode.attributes.length;j++)
	{
		newNode.setAttribute(currentNode.attributes[j].nodeName,currentNode.attributes[j].nodeValue);
	}
	
	var res =replaceText(  currentNode.innerHTML );
	
	try{
		newNode.innerHTML=res;
	}catch(e)
	{
		alert("Error: " + e.description );
	}
	
	return newNode;
}
function escapeRegExp(str) {
  return str.replace(/[$^\\.*+?()[\]{}|]/g, "\\$&") 
  }
  
function replaceText(  source)
{
	var result = "";
	var startPos = -1;
	var lastPos = 0;
	var endPos = result.length;	
	var replaceWith='-';
	var patternLen ;
	var clearPhoneNumber ;
	
	do
	{
		
		var phoneFound=getNextRegex(source.substr(lastPos));;

		
		clearPhoneNumber=String(phoneFound);
		
		if(phoneFound==null) 
		{
			startPos=-1;
		}
		else
		{
			startPos= source.indexOf(clearPhoneNumber, lastPos);
			patternLen = clearPhoneNumber.length; 
		}
		if (startPos >= 0)
		{			
			var varname='i_'+String(iter);
			replaceWith=getNewData(varname,clearPhoneNumber);

			result = result + source.substr(lastPos, startPos - lastPos + patternLen).replace(new RegExp(escapeRegExp(clearPhoneNumber), 'g'), replaceWith);
			lastPos = startPos + patternLen;
			iter=iter+1;
		}
		else
		{
			result = result + source.substr(lastPos);
		}
	}
	while (startPos >= 0);
	return result;
}


function hideData(node)
{
	var currentNode;
	var nodeSize;
	for(var i=0;i<node.childNodes.length;i++)
	{			
		currentNode=node.childNodes[i];
		nodeSize=currentNode.childNodes.length;
		if(nodeSize>=1)
		{
			if (checkValidity(currentNode))
			{
				hideData(currentNode);
			}
		}
		else
		{

			if (checkValidity(currentNode))
			{
				
				if(currentNode.nodeType!=3)
				{
					if(currentNode.nodeType!=8)
					{					
					var newNode=replaceElement(currentNode);
					currentNode.parentNode.replaceChild(newNode,currentNode);
					}
				}else
				{	
					var newNode=replaceDataText(currentNode);
					currentNode.parentNode.replaceChild(newNode,currentNode);										
				}
			}
			else{
				//alert(currentNode.innerHTML+'<-->'+currentNode.value);
			}
		}
		
	}
}


function setText(idElement,phoneNumber,phoneData,message)
{ 
	//alert('setText');
	var currentNode=document.getElementById(idElement);
	var fragment = document.createDocumentFragment();
	var dv1 = document.createElement('div');
	dv1.innerHTML='<div ><img src="'+webSite+'/img/phone.png"/><a href="tel:'+phoneNumber+'">'+phoneData+'</a></div><div>'+message+'</div>';
	var cssString = 'display: inline-block;*display: inline;background-color:Gainsboro;vertical-align:middle;zoom:1;text-align:center;';
	if( typeof(dv1.style.csstext) == 'string' ) {
		dv1.style.csstext = cssString;
	}
	dv1.setAttribute('style',cssString);
	fragment.appendChild(dv1);
	currentNode.parentNode.replaceChild(fragment,currentNode);	
}
	 

function sendData(value)
{ 						 			
	var refe =getReferrer();
	var dataUrl=webSite+'php/dataTrack.php?Param='+refe.referrer+'&IdClient='+IdClientParam+'&M='+refe.moteur+'&K='+refe.keyword+'&Value='+value;
	getDirtyRemoteData(dataUrl);
}
function  getReferrer()
{
	var vistFrom = 'No_Referrer_SET';
	if (document.referrer != '') 
	{
		vistFrom = document.referrer; 
	}
	
	var result= parse_format(vistFrom);
	
	return result;
}		
function AfficherNumero(varName,phoneNumber)
{ 
	var refe =getReferrer();
	var clickUrl=webSite+'php/clickTrack.php?V='+varName+'&P='+phoneNumber+'&I='+IdClientParam+'&R='+refe.referrer+'&callback=setText&U='+getWebPage()+'&M='+refe.moteur+'&K='+refe.keyword;
	getDirtyRemoteData(clickUrl);
}
function parse_format(msg)
{
	var result=new Object();
	result.referrer='referrer';
	result.moteur='';
	result.keyword='';
	try{
		
		var res=parse_url(msg);
		
		var query=res.query;
		var outterArray=query.split('&');
		var keywords ="";
		
		for (var i=0; i<outterArray.length; i++) {	
	
			
			var innerArray=outterArray[i].split('=');
			if(innerArray.length==2)
				{			
					if 	(innerArray[0]=='q')
					{	
						keywords=innerArray[1];
						break ;
					}
					if 	(innerArray[0]=='p')
					{
						keywords=innerArray[1];
						break ;	
					}
				}
		}
		
		keywords=keywords.replace(new RegExp('&', 'g'),'+');
		keywords=keywords.replace(new RegExp('!', 'g'),'+');
		
		result.referrer=res.hostname+"!"+keywords;
		result.moteur=res.hostname;
		result.keyword=keywords;
		
		if( res.hostname.toUpperCase().indexOf("GOOGLE")>=0) 
		{
			result.moteur='GOOGLE';
		}
		
		if( res.hostname.toUpperCase().indexOf("BING")>=0) 
		{
			result.moteur='BING';
		}
		
		if( res.hostname.toUpperCase().indexOf("YAHOO")>=0) 
		{
			result.moteur='YAHOO';
		}
	
	}
catch(e){
	result.referrer='No_Referrer_SET';
	result.moteur='';
	result.keyword='';
	}
	return result;
}
var parse_url = function (uri){
    if (typeof uri == 'undefined') {
        uri = location.href;
    }
    else if (uri[0] == '/'){
        uri = location.host + uri;
    }
	var regex = /^([^:]*:\/\/)?([^:]*:[^@]*@)?([^\/:\?]*\.[^\/:\?]*)?(:[^\/]*)?(\/[^?#]*)?(\?[^#]*)?(#.*)?$/i;

    var url = uri.match(regex);
    delete url.input;
    url.protocol = ((url[1])?url[1]:'http://').split('://')[0];
    url.user = (url[2])?url[2].split(':')[0]:undefined;
    url.password = (url[2])?url[2].split(':')[1].split('@')[0]:undefined;
    url.host = (url[3])?url[3]:location.host;
    url.hostname = url.host;
    url.port = (url[4])?((isNaN(parseInt(url[4].split(':')[1])))?80:parseInt(url[4].split(':')[1])):80;
    url.path = (url[5])?url[5]:'/';
    url.pathname = url.path;
    url.search = (url[6])?url[6].split('?')[1]:undefined;
    url.query = url.search;
    url.fragment = (url[7])?url[7].split('#')[1]:undefined;
    url.hash = url.fragment;
    url.href = ''
        + url.protocol + '://'
        + ((url.user)?url.user+':'+url.password+'@':'')
        + url.host
        + ((url.port != 80)?':'+url.port:'')
        + url.path
        + ((url.search)?'?'+url.search:'')
        + ((url.fragment)?'#'+url.fragment:'');
    return url;
}

