//////////////////////////
// Fonctions JS génériques
//

function in_array(needle, haystack, strict) {
    // http://kevin.vanzonneveld.net
    // +   original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // *     example 1: in_array('van', ['Kevin', 'van', 'Zonneveld']);
    // *     returns 1: true
 
    var found = false, key, strict = !!strict;
    for (key in haystack) {
        if ((strict && haystack[key] === needle) || (!strict && haystack[key] == needle)) {
            found = true;
            break;
        }
    }
    return found;
}
	
function print_r(obj) {
  win_print_r = window.open('about:blank', 'win_print_r');
  win_print_r.document.write('<html><body>');
  r_print_r(obj, win_print_r);
  win_print_r.document.write('</body></html>');
 }

 function r_print_r(theObj, win_print_r) {
  if(theObj.constructor == Array ||
   theObj.constructor == Object){
   if (win_print_r == null)
    win_print_r = window.open('about:blank', 'win_print_r');
   }
   for(var p in theObj){
    if(theObj[p].constructor == Array||
     theObj[p].constructor == Object){
     win_print_r.document.write("<li>["+p+"] =>"+typeof(theObj)+"</li>");
     win_print_r.document.write("<ul>")
     r_print_r(theObj[p], win_print_r);
     win_print_r.document.write("</ul>")
    } else {
     win_print_r.document.write("<li>["+p+"] =>"+theObj[p]+"</li>");
    }
   }
  win_print_r.document.write("</ul>")
 }

function urldecode( str ) {
    // http://kevin.vanzonneveld.net
    // +   original by: Philip Peterson
    // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +      input by: AJ
    // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // %          note: info on what encoding functions to use from: http://xkr.us/articles/javascript/encode-compare/
    // *     example 1: urldecode('Kevin+van+Zonneveld%21');
    // *     returns 1: 'Kevin van Zonneveld!'
    // *     example 2: urldecode('http%3A%2F%2Fkevin.vanzonneveld.net%2F');
    // *     returns 2: 'http://kevin.vanzonneveld.net/'
    // *     example 3: urldecode('http%3A%2F%2Fwww.google.nl%2Fsearch%3Fq%3Dphp.js%26ie%3Dutf-8%26oe%3Dutf-8%26aq%3Dt%26rls%3Dcom.ubuntu%3Aen-US%3Aunofficial%26client%3Dfirefox-a');
    // *     returns 3: 'http://www.google.nl/search?q=php.js&ie=utf-8&oe=utf-8&aq=t&rls=com.ubuntu:en-US:unofficial&client=firefox-a'
    
    var histogram = {}, histogram_r = {}, code = 0, str_tmp = [];
    var ret = str.toString();
    
    var replacer = function(search, replace, str) {
        var tmp_arr = [];
        tmp_arr = str.split(search);
        return tmp_arr.join(replace);
    };
    
    // The histogram is identical to the one in urlencode.
    histogram['!']   = '%21';
    histogram['%20'] = '+';
    
    for (replace in histogram) {
        search = histogram[replace]; // Switch order when decoding
        ret = replacer(search, replace, ret) // Custom replace. No regexing   
    }
    
    // End with decodeURIComponent, which most resembles PHP's encoding functions
    ret = decodeURIComponent(ret);
 
    return ret;
}

function urlencode( str ) {
    // http://kevin.vanzonneveld.net
    // +   original by: Philip Peterson
    // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +      input by: AJ
    // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // %          note: info on what encoding functions to use from: http://xkr.us/articles/javascript/encode-compare/
    // *     example 1: urlencode('Kevin van Zonneveld!');
    // *     returns 1: 'Kevin+van+Zonneveld%21'
    // *     example 2: urlencode('http://kevin.vanzonneveld.net/');
    // *     returns 2: 'http%3A%2F%2Fkevin.vanzonneveld.net%2F'
    // *     example 3: urlencode('http://www.google.nl/search?q=php.js&ie=utf-8&oe=utf-8&aq=t&rls=com.ubuntu:en-US:unofficial&client=firefox-a');
    // *     returns 3: 'http%3A%2F%2Fwww.google.nl%2Fsearch%3Fq%3Dphp.js%26ie%3Dutf-8%26oe%3Dutf-8%26aq%3Dt%26rls%3Dcom.ubuntu%3Aen-US%3Aunofficial%26client%3Dfirefox-a'
                                     
    var histogram = {}, histogram_r = {}, code = 0, tmp_arr = [];
    var ret = str.toString();
    
    var replacer = function(search, replace, str) {
        var tmp_arr = [];
        tmp_arr = str.split(search);
        return tmp_arr.join(replace);
    };
    
    // The histogram is identical to the one in urldecode.
    histogram['!']   = '%21';
    histogram['%20'] = '+';
    
    // Begin with encodeURIComponent, which most resembles PHP's encoding functions
    ret = encodeURIComponent(ret);
    
    for (search in histogram) {
        replace = histogram[search];
        ret = replacer(search, replace, ret) // Custom replace. No regexing
    }
    
    // Uppercase for full PHP compatibility
    return ret.replace(/(\%([a-z0-9]{2}))/g, function(full, m1, m2) {
        return "%"+m2.toUpperCase();
    });
    
    return ret;
}

function utf8_decode ( str_data ) {
    // http://kevin.vanzonneveld.net
    // +   original by: Webtoolkit.info (http://www.webtoolkit.info/)
    // +      input by: Aman Gupta
    // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   improved by: Norman "zEh" Fuchs
    // +   bugfixed by: hitwork
    // +   bugfixed by: Onno Marsman
    // *     example 1: utf8_decode('Kevin van Zonneveld');
    // *     returns 1: 'Kevin van Zonneveld'
 
    var tmp_arr = [], i = ac = c1 = c2 = c3 = 0;
 
    str_data += '';
 
    while ( i < str_data.length ) {
        c1 = str_data.charCodeAt(i);
        if (c1 < 128) {
            tmp_arr[ac++] = String.fromCharCode(c1);
            i++;
        } else if ((c1 > 191) && (c1 < 224)) {
            c2 = str_data.charCodeAt(i+1);
            tmp_arr[ac++] = String.fromCharCode(((c1 & 31) << 6) | (c2 & 63));
            i += 2;
        } else {
            c2 = str_data.charCodeAt(i+1);
            c3 = str_data.charCodeAt(i+2);
            tmp_arr[ac++] = String.fromCharCode(((c1 & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
            i += 3;
        }
    }
 
    return tmp_arr.join('');
}
function utf8_encode ( string ) {
    // http://kevin.vanzonneveld.net
    // +   original by: Webtoolkit.info (http://www.webtoolkit.info/)
    // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   improved by: sowberry
    // +    tweaked by: Jack
    // +   bugfixed by: Onno Marsman
    // *     example 1: utf8_encode('Kevin van Zonneveld');
    // *     returns 1: 'Kevin van Zonneveld'
 
    string = (string+'').replace(/\r\n/g,"\n");
    var utftext = "";
    var start, end;
    var stringl = 0;
 
    start = end = 0;
    stringl = string.length;
    for (var n = 0; n < stringl; n++) {
        var c1 = string.charCodeAt(n);
        var enc = null;
 
        if (c1 < 128) {
            end++;
        } else if((c1 > 127) && (c1 < 2048)) {
            enc = String.fromCharCode((c1 >> 6) | 192) + String.fromCharCode((c1 & 63) | 128);
        } else {
            enc = String.fromCharCode((c1 >> 12) | 224) + String.fromCharCode(((c1 >> 6) & 63) | 128) + String.fromCharCode((c1 & 63) | 128);
        }
        if (enc != null) {
            if (end > start) {
                utftext += string.substring(start, end);
            }
            utftext += enc;
            start = end = n+1;
        }
    }
 
    if (end > start) {
        utftext += string.substring(start, string.length);
    }
 
    return utftext;
}

function getOb(id) {
	return document.getElementById(id);
}

function getObTG(tagName) {
	return document.getElementsByTagName(tagName);
}

function is_404_page ( htmltext ) {
		var regexp = new RegExp(/404\ not\ found/i);
		return( regexp.test( htmltext ) ) ;
}

function verif_url_format(url) { // vérifie que l'url passée en arg est bien http://...
								// ca évite de faire des requetes HTTP vers el serveur pour rien
	var regexp = new RegExp(/^http[s]*\:\/\//i);
	return( regexp.test( url ) ) ;
}

// Cette fonction ajax ne fonctionne pas avec des URL sur d'autres serveurs
// pour des raisons de sécurité...
function http(url) {

	var xhr_object = null; 
 
	if(window.XMLHttpRequest) // FF 
	   xhr_object = new XMLHttpRequest(); 
	else if(window.ActiveXObject) // Internet Explorer 
	   xhr_object = new ActiveXObject("Microsoft.XMLHTTP"); 
	else { // XMLHttpRequest non supporté par le navigateur 
	   alert("Votre navigateur n'est pas compatible avec les fonctions AJAX"); 
	   return; 
	}

	xhr_object.open("GET", url, false); 
	//xhr_object.setRequestHeader("Content-Type", "text/plain;charset=ISO-8859-1");
	//xhr_object.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
	xhr_object.send(null);
	
	return xhr_object.responseText;
}

// On demande donc au serveur de nous faire cette requete à notre place en PHP
var urlpageverif="verifurl.php"
function http_verif_url_php(url) {

	var xhr_object = null; 
 
	if(window.XMLHttpRequest) // FF 
	   xhr_object = new XMLHttpRequest(); 
	else if(window.ActiveXObject) // Internet Explorer 
	   xhr_object = new ActiveXObject("Microsoft.XMLHTTP"); 
	else { // XMLHttpRequest non supporté par le navigateur 
	   alert("Votre navigateur n'est pas compatible avec les fonctions AJAX"); 
	   return; 
	}
//	alert(urlpageverif+"?url="+urlencode(url));
	xhr_object.open("GET", urlpageverif+"?url="+urlencode(url), false); 
	
	xhr_object.send(null);
	
	return xhr_object.responseText;
}


// On demande donc au serveur de nous faire cette requete à notre place en PHP
var urlpageverif="verifurl.php"
function http_verif_lien_php(url_src, url_lien) {

	var xhr_object = null; 
 
	if(window.XMLHttpRequest) // FF 
	   xhr_object = new XMLHttpRequest(); 
	else if(window.ActiveXObject) // Internet Explorer 
	   xhr_object = new ActiveXObject("Microsoft.XMLHTTP"); 
	else { // XMLHttpRequest non supporté par le navigateur 
	   alert("Votre navigateur n'est pas compatible avec les fonctions AJAX"); 
	   return; 
	}
//	alert(urlpageverif+"?url="+urlencode(url));
	xhr_object.open("GET", urlpageverif+"?action=veriflien&url_src="+urlencode(url_src)+"&url_lien="+urlencode(url_lien), false); 
	
	xhr_object.send(null);
	
	return xhr_object.responseText;
}


//////////////////////////
// Fonctions JS spécifiques
//

// Fonction de recherche d'un lien vers une URL dans un source HTML
function find_link_in_html_source(htmlsource, link) {

	var regexplien = new RegExp("<a href=\""+link+"\"");
	return regexplien.test( htmlsource );

}

// Variable globale pour savoir si un traitement est déjà en cours!
// vrai si oui, faux sinon
var traiteveriflien = false;


// Recherche toutes les URL du tableau fourni en argument
// change la classe des TD à chaque requête
// url_testencours => URL en cours de test,
// url_testok => URL ok,
// url_testnc => URL non testé (pb réseau),
// url_testko => URL non valide 404
// Chaque lien à tester DOIT être précédé du commentaire :
// <!--UT-->
// <!--UST-->
// <!--UCT-->
// Afin de pas tester tous les liens de la page (UT = URL Test) (UST = URL Source Test) (UCT = URL Cible Test)
// TODO : Prévoir un bouton annuler!!

function verif_url_actif_table( table_id ) {

	if(traiteveriflien) {
		alert("un traitement est déjà en cours, veuillez patienter!");
		return;
	}
	else {
		traiteveriflien = true;
	}

	var tble = getOb( table_id );
	var tab_td
	var regexplien = new RegExp(/<!--U[SC]*T--><a href="([^\"]*)"/i);

	// Extraction des liens et des cellules concernées
	// On les met dans un tableau
	// tab_cellule_url[indice][id_cellule]
	// tab_cellule_url[indice][url_cellule]

	var tab_cellule_url=new Array()
	var tuple_cellule_url=new Array()

	for ( var i=0; i<tble.childNodes.length; i++ ) {
		if ( tble.childNodes[i].tagName == 'TBODY') {
		 	tab_td = tble.childNodes[i].getElementsByTagName('td')
			for ( var j=0; j<tab_td.length; j++ ) {
				cellule = tab_td[j];
								
				// exec retourne tableau des valeurs trouvées
				tab_ret = regexplien.exec( cellule.innerHTML );
				if( tab_ret ) {
				
					tuple_cellule_url=new Array();
					tuple_cellule_url["cellule"]=cellule;
					tuple_cellule_url["url_cellule"]=tab_ret[1];
					tab_cellule_url.push(tuple_cellule_url);
					
				}
			}
		}
	}

	// Passage du tableau par référence (ca évite de surcharger la mémoire du navigateur)
	// La seule astuce consiste à le passer dans l'objet this
	this.tab_cellule_url = tab_cellule_url
	this.test_url_actif()
}

// Recherche toutes les URL du tableau fourni en argument
// Fonction récursive qui dépile le tableau passé par effet de bord dans l'objet this...
// les arguments par référence sont pas le fort de JS

// Mémorise dans un tableau global JS les requetes vers les URL qui ont réussi
// histoire de pas faire plein de requêtes pour rien
var tab_memo_url = new Array();

function test_url_actif() {
	
	if(this.tab_cellule_url.length>0) {
		
		$('body').css('cursor', 'wait');
		$('A.bt_action SPAN').css('cursor', 'wait');
		
		var tuple_cellule_url = this.tab_cellule_url.shift();
		var cellule = tuple_cellule_url["cellule"];
		
		cellule.className='url_testencours';

		if(tab_memo_url[tuple_cellule_url["url_cellule"]]) { //url déjà testé
			cellule.className=tab_memo_url[tuple_cellule_url["url_cellule"]];
			test_url_actif(); // Pas besoin de temps d'attente
		}
		else if(verif_url_format(tuple_cellule_url["url_cellule"])) {
		
			try {
				switch( http_verif_url_php( tuple_cellule_url["url_cellule"] ) ) {
					case "-1":	cellule.className='url_testko';
								tab_memo_url[tuple_cellule_url["url_cellule"]]=cellule.className;
								break;
					case "0":	cellule.className='url_testnc';
								break;
					case "1":	cellule.className='url_testok';
								tab_memo_url[tuple_cellule_url["url_cellule"]]=cellule.className;
								break;
					default:  	cellule.className='url_testnc';
				}
			}
			catch(err) {
				
			}
			setTimeout(function(){test_url_actif()},500);
		}
		else { // url mal formée
			cellule.className='url_testko';
			test_url_actif(); // Pas besoin de temps d'attente
		}
	}
	else {
		$('body').css('cursor', 'default'); 
		$('A.bt_action SPAN').css('cursor', 'pointer');
		traiteveriflien = false;
	}
}


// Vérifie tous les liens saisis dans echange soit effectivement actifs entre le site webmaster et le site partenaire

// Recherche toutes les URL sources et cibles du tableau fourni en argument
// change la classe du TD résultat à chaque requête
// lien_testencours => lien en cours de test,
// lien_testok => URL ok,
// lien_testnc => URL non testé (pb réseau),
// lien_testko => URL non valide 404
// Chaque lien à tester DOIT être précédé du commentaire :
// <!--UST-->
// <!--UCT-->
// le TD résultat qui changera de classe doit contenir :
// <!--RT-->
// Afin de pas tester tous les liens de la page (UST = URL source Test) (UCT = URL cible Test) (RT = Resultat Test)
// TODO : Prévoir un bouton annuler!!
// TODO : Prévoir un message d'attente
// TODO : tester avec une coupure réseau ou alors un site trop long a répondre!
// TODO : ajouter un tableau de légende


function verif_liens_actif_table( table_id ) {

	if(traiteveriflien) {
		alert("un traitement est déjà en cours, veuillez patienter!");
		return;
	}
	else {
		traiteveriflien = true;
	}

	var tble = getOb( table_id );
	var tab_tr;
	var tab_td;
	var regexpresult = new RegExp(/<!--RT-->/i);
	var regexpliensource = new RegExp(/<!--UST--><a href="([\S\.\/:]*)"/i);
	var regexpliencible = new RegExp(/<!--UCT--><a href="([\S\.\/:]*)"/i);

	// Extraction des liens et des cellules concernées
	// On les met dans un tableau
	// tab_cellule_url_lien[indice][celres]
	// tab_cellule_url_lien[indice][urlsource]
	// tab_cellule_url_lien[indice][liencible]

	var tab_cellule_url_lien = new Array()
	var tuple_cellule_url_lien = new Array()

	for ( var i=0; i<tble.childNodes.length; i++ ) {
		if ( tble.childNodes[i].tagName == 'TBODY') {

		 	tab_tr = tble.childNodes[i].getElementsByTagName('tr')
		 	// pour chaque lignes du tableau, on cherche s'il y a un lien à tester
		 	// il faut donc un <!--RT-->, un <!--UST--> et un <!--UCT-->
		 	// on regarde si dans le code de la page <!--UST-->,
		 	// il y aurait pas un lien vers la page  <!--UCT-->,
		 	// puis on met le résultat dans la cellule <!--RT-->

			for ( var j=0; j<tab_tr.length; j++ ) {
			
			tuple_cellule_url_lien = new Array();
			tuple_cellule_url_lien["celres"] = null;
			tuple_cellule_url_lien["urlsource"] = null;
			tuple_cellule_url_lien["liencible"] = null;
			
			 	tab_td = tab_tr[j].getElementsByTagName('td')
				for ( var k=0; k<tab_td.length; k++ ) {

					cellule = tab_td[k];
					if( regexpresult.test( cellule.innerHTML ) ) { // On a trouvé la case résultat
						tuple_cellule_url_lien["celres"] = cellule;
					}
					
					tab_ret = regexpliensource.exec( cellule.innerHTML );
					if( tab_ret ) {
						tuple_cellule_url_lien["urlsource"] = tab_ret[1];
					}
					
					tab_ret = regexpliencible.exec( cellule.innerHTML );
					if( tab_ret ) {
						tuple_cellule_url_lien["liencible"] = tab_ret[1];
					}

					if( k==(tab_td.length-1) ) {
					// en fin de ligne on regarde si le lien est valide

						tab_cellule_url_lien.push(tuple_cellule_url_lien);

					}

				}
			}
		}
	}
	
	// Passage du tableau par référence (ca évite de surcharger la mémoire du navigateur)
	// La seule astuce consiste à le passer dans l'objet this
	this.tab_cellule_url_lien = tab_cellule_url_lien
	this.test_liens_actif_table()
}


// Recherche toutes les liens dans les URL du tableau fourni en argument
// Fonction récursive qui dépile le tableau passé par effet de bord dans l'objet this...
// les arguments par référence sont pas le fort de JS
function test_liens_actif_table() {

	if(this.tab_cellule_url_lien.length>0) {
		
		$('body').css('cursor', 'wait');
		$('A.bt_action SPAN').css('cursor', 'wait');
		
		var tuple_cellule_url_lien = this.tab_cellule_url_lien.shift();
		var cellule = tuple_cellule_url_lien["celres"];
		
		cellule.className='lien_testencours';
		
		if( verif_url_format( tuple_cellule_url_lien["urlsource"] ) ) {
		
			try {

				switch( http_verif_lien_php( tuple_cellule_url_lien["urlsource"], tuple_cellule_url_lien["liencible"] ) ) {
					case "-2":	cellule.className='lien_testko';
								break;
					case "-1":	cellule.className='lien_testko';
								break;
					case "0":	cellule.className='lien_testnc';
								break;
					case "1":	cellule.className='lien_testok';
								break;
					default:  	cellule.className='lien_testnc';
				}
			
			}
			catch(err) {
				
			}
			setTimeout(function(){test_liens_actif_table()},500);
						
		}
		else { // url mal formée
			cellule.className='lien_testko';
			test_liens_actif_table(); // Pas besoin de temps d'attente
		}
	}
	else {
		$('body').css('cursor', 'default'); 
		$('A.bt_action SPAN').css('cursor', 'pointer');
		traiteveriflien = false;
	}
}


// Fonction spécifique gestion des champs obligatoires

function verifform(frm){

	var errmsg = "";
	
	switch(frm.name) {
		case "form_gestionsite":	// Formulaire des pages Gestion site > Modif / Ajout
								if(frm.elements['nom_site'].value == "") {
									errmsg += "- Nom du site\n"; 									
								}
								if(frm.elements['url_site'].value == ""||frm.elements['url_site'].value == "http://") {
									errmsg += "- Url du site\n"; 									
								}
								
								break;
								
		case "form_gestionechange":	// Formulaire des pages Gestion echange > Modif / Ajout
								if(!frm.elements['id_id_zonesite']||frm.elements['id_id_zonesite'].value == "") {
									errmsg += "- Nom zone site\n"; 									
								}
								if(!frm.elements['id_id_partenaire']||frm.elements['id_id_partenaire'].value == "") {
									errmsg += "- Nom partenaire\n"; 									
								}
								if(frm.elements['id_out_url_site_local'].value == ""||frm.elements['id_out_url_site_local'].value == "http://") {
									errmsg += "- URL de votre page web source\n"; 									
								}
								if(frm.elements['id_out_nom_lien_local'].value == "") {
									errmsg += "- Nom du lien echange de votre page web source\n"; 									
								}
								if(frm.elements['id_out_url_distant'].value == ""||frm.elements['id_out_url_distant'].value == "http://") {
									errmsg += "- URL Site du partenaire cible\n"; 									
								}
								if(frm.elements['id_in_url_distant'].value == ""||frm.elements['id_in_url_distant'].value == "http://") {
									errmsg += "- URL Site du partenaire source\n"; 									
								}
								if(frm.elements['id_in_url_site_local'].value == ""||frm.elements['id_in_url_site_local'].value == "http://") {
									errmsg += "- URL de votre page web cible\n"; 									
								}
								break;
								
		case "form_login":	// Formulaire de login
								if(frm.elements['mail'].value == "") {
									errmsg += "- Votre mail\n"; 									
								}
								if(frm.elements['passe'].value == "") {
									errmsg += "- Mot de passe\n"; 									
								}
								break;

		default:
	}
	if(errmsg=="") return true;
	
	alert("Merci de renseigner les champs obligatoires : \n"+errmsg)
    return false;
    
}

// Script pour bulle d'aide
// Attention utilise JQuery qui doit etre inclus avant
ShowTooltip = function(e) {

	var text = $(this).children('.bulle-txt');
	if (text.attr('class') != 'bulle-txt')
		return false;

	var posX = e.pageX+10;
	var posY = e.pageY+10;

	var largeurpage = $(window).width();
	var hauteurpage = $(window).height();

	text.show()
		.css('top', posY)
		.css('left', posX);

	// Si la bulle sort de la page, on la bouge!
	// on peut calculer les largeurs qu'une fois le div affiché

	var debut_bulle = text.children('.bulle-txt-start');
	var fin_bulle = text.children('.bulle-txt-end');

	if(!fin_bulle.children('iframe')[0]) // FIX IE6 : iframe fix le z-index sur select
		fin_bulle.bgiframe();

	largeurbulle = debut_bulle.width() + fin_bulle.width();
	hauteurbulle = fin_bulle.height();

	if( posX+largeurbulle > largeurpage-14 ) { // ca dépasse en largeur
		posX=largeurpage-largeurbulle-18;
		text.show().css('left', posX);
	}

	if( posY+hauteurbulle > hauteurpage+$(document).scrollTop() ) { // ca dépasse en hauteur
		posY-=hauteurbulle+10;
		text.show().css('top', posY)
	}

	return false;
}

HideTooltip = function(e) {
	var text = $(this).children('.bulle-txt');
	if (text.attr('class') != 'bulle-txt')
		return false;

	text.hide();
}

SetupTooltips = function() {
	$('.bulle')
		.each(function(){
			$(this)
				.append($('<span/>')
					.attr('class', 'bulle-txt')
						.append($('<span/>')
						.attr('class', 'bulle-txt-end')
						.html($(this).attr('title')))
						.append($('<span/>')
						.attr('class', 'bulle-txt-start'))
						)
				.attr('title', '');
		})
		.hover(ShowTooltip, HideTooltip)
		.click(HideTooltip);

}
$(document).ready(function() {
	SetupTooltips();
});

// animation de text dans une zone trop petite

function defil_on(element) {
	$(element).stop();
	$(element).css({ 
		opacity: 1
    } );
	var larg = ($(element).width()-$(element).parent().width()>0)?($(element).width()-$(element).parent().width()):0;
	if(larg>0) {
		larg = "-"+larg+"px";
		$(element).animate({ 
			marginLeft: larg
		}, 1500 );
	}
}
function defil_off(element) {
	$(element).stop();
	if(parseInt($(element).css("margin-left"))<0) {
		$(element).css({ 
			opacity: 0,
			marginLeft: "0px"
	    } );
		$(element).animate({ 
			opacity: 1
	    }, 200 );
    }
}

// Gestion affichage du block pays buggant sous IE
function bpon(id) {
	if($('#blockpays_id'+id).attr("timer"))
		clearTimeout($('#blockpays_id'+id).attr("timer"));
	$('#blockpays_id'+id).attr({ on: true });
	$('#blockpays_id'+id).show();
}
function bpoff(id) {
	$('#blockpays_id'+id).attr({ on: false });
	var tm = setTimeout("bphide("+id+")", 300);
	$('#blockpays_id'+id).attr({ timer: tm });
}
function bphide(id) {
	if($('#blockpays_id'+id).attr("on")!=true)
		$('#blockpays_id'+id).hide();
}

// Gestion des messages applicatif

$(document).ready(function() {
	$('.msgappli:eq(0)').vCenter();
	$('.msgappli:eq(0)').fadeIn("slow");

	setTimeout(function(){
		$('.msgok:eq(0)').fadeOut("normal"); // si reussi on laisse pas le msg
	}, 2000); // 5sec
	
});

function alertMsgOk(msg) {

	if( $('.msgappli:eq(0)').length>0 ) // Le div existe déjà on le supprime
		$('.msgappli:eq(0)').remove();

	// On le créé

	$(".fiche_gestion:eq(0)").prepend("<div class=\"msgappli msgok\" style=\"display:none\">"+msg+"</div>");
	$('.msgappli:eq(0)').vCenter();
	$('.msgappli:eq(0)').fadeIn("slow");
	
	setTimeout(function(){
		$('.msgok:eq(0)').fadeOut("normal"); // si reussi on laisse pas le msg
	}, 2000); // 5sec

}

function alertMsgWaitOn() {

	if( $('.msgappli:eq(0)').length>0 ) // Le div existe déjà on le supprime
		$('.msgappli:eq(0)').remove();

	// On le créé

	$(".fiche_gestion:eq(0)").prepend("<div class=\"msgappli msgwait\" style=\"display:none\">Traitement en cours, merci de patienter...</div>");
	$('.msgappli:eq(0)').vCenter();
	$('.msgappli:eq(0)').fadeIn("slow");
	
}

function alertMsgWaitOff() {

	$('.msgwait:eq(0)').fadeOut("normal");

}
// Ajoute la gestion de l'attribut maxlength sur les balises textarea
function addTextAreaMaxLength() {
  $('TEXTAREA').each( function() {
    $(this).keyup(function(i) {
		var max = $(this).attr('maxlength');
		var val = $(this).attr('value');
		if ( max && val.length>max ) { // TODO : FF bug scroll + rajout sur onkeydown avec return false pour pas que ca clignote
			$(this).attr('value', val.substring(0,max));
		}
    });
  });
}

function setSelectionRangeX(input, selectionStart, selectionEnd) {
   // IE
   if (input.createTextRange) {
      var range = input.createTextRange();
      range.collapse(true);
      range.moveEnd('character', selectionEnd);
      range.moveStart('character', selectionStart);
      range.select();
    // other
    } else if (input.setSelectionRange) {
      input.focus();
      input.setSelectionRange(selectionStart, selectionEnd);
    }
}

$(document).ready(function() {
	//addTextAreaMaxLength();
});


// Affichage d'un texte par défaut dans un INPUT de type TEXT 
// sur onclick si texte par défaut on l'efface
// sur onblur si texte vide, on remet le texte par défaut
			
function input_default_text(ob, txt) {

	// on ajoute aussi ce texte par défaut en title
	ob.attr("title",txt);

	ob.focus(
		function () {
			if( ob.val()==txt )
				ob.val("");
		});

	ob.blur(
		function () {
			if( ob.val()=="" )
				ob.val(txt);
		});

}

function get_input_default_text(ob) {

	// on récupère le texte par défaut du title
	return ob.attr("title");

}



// Ajout de confirmation sur les boutons de suppression

$(document).ready(function() {
	$('.bt_suppr').each(function () {
				$(this).click(function() {
					$(this).parent().parent().parent('TR').addClass("todelete");
					
					var ret = confirm("Etes-vous sûr de vouloir supprimer cet enregistrement ?");

					$(this).parent().parent().parent('TR').removeClass("todelete");
					return ret;
				});
	});
	
});

// Gestion des barres de %
$(document).ready(function() {
	genere_barpc();
});

function genere_barpc() {
	$('.barpc').each(function () {
		// si on a une info dans le title on la prend!
		var bpc = $(this).attr('title');
		if(bpc=='')
			bpc = $(this).children('SPAN')[0].innerHTML;
		
		bpc = bpc.replace(",", "."); 
		var childspan = $(this).children('SPAN');
		/*childspan.hide();*/
		if($(this).find('div.barpcok').length==0)
		childspan
			.before($('<div/>')
				.attr('class', 'barpcok')
				.css('width', bpc))
				.css('margin-top', '-10px')
			.attr('title',$(this).children('SPAN')[0].innerHTML)
			/*
			.each(function() { childspan.css('width',$(this).css('width')); childspan.css('display','block'); })
			/*.hover(function() { 
					childspan.css('width','0px');
					childspan.show();
					childspan.animate({ width: $(this).css('width') }, 'fast')
				},function() {
					childspan.animate({ width: '0px' }, 'fast', function() { childspan.hide(); } )
				});*/
	});
}

// Fonction de gestion des ajouts/supression de colonnes dans un tableau
// Appeler ces méthodes avec l'objet tableau correspondant
// On utilise les classes coltohide et coltoshow pour savoir quoi cacher/montrer
function TableColHide(idtble) {
	$('#'+idtble+' thead td').each(function(i) {
		if($(this).hasClass('coltohide'))
			$('#'+idtble+' td:nth-child('+(i+1)+')').hide();
	});
	$('#'+idtble+' td.coltoshow').show();
}

function TableColShow(idtble) {
	$('#'+idtble+' td.coltoshow').hide();
	$('#'+idtble+' thead td').each(function(i) {
		if($(this).hasClass('coltohide'))
			$('#'+idtble+' td:nth-child('+(i+1)+')').show();
	});
}

function TableAddColGraphic(idtble, numcol, nomcol, valcol) {
	var tailletab = $('#'+idtble+' thead td').length;
	if(numcol=='end') numcol=tailletab;
	if(numcol>=tailletab) { // Col à rajouter à la fin du tableau
		$('#'+idtble+' thead>tr').eq(0).append('<td class="coltoshow" style="display: none">'+nomcol+'</td>'); // FF FIX : display enligne et pas en CSS 
		$('#'+idtble+' tbody>tr').eq(0).append('<td class="coltoshow" rowspan='+$('#'+idtble+' tbody tr').length+' style="display:none">'+valcol+'</td>');
		$('#'+idtble+' tfoot>tr').eq(0).append('<td class="coltoshow" style="display: none">'+nomcol+'</td>'); // FF FIX : display enligne et pas en CSS 
	}
	else { // Col à rajouter en milieu de tableau
		$('#'+idtble+' thead td').each(function(i) {
			if((i+1)==numcol) {
				$(this).before('<td class="coltoshow" style="display: none">'+nomcol+'</td>')
				$('#'+idtble+' tbody td').eq(i).before('<td class="coltoshow" rowspan='+$('#'+idtble+' tbody tr').length+' style="display:none">'+valcol+'</td>');
				$('#'+idtble+' tfoot td').eq(i).before('<td class="coltoshow" style="display:none"></td>');

				$('#'+idtble+' tbody td').each(function(j) {
					if(numcol<j && numcol==(j%tailletab)) {
						$(this).before('<td style="display:none"></td>'); // Pour éviter de casser le tableau!
					}
				});
			}
		});
	}
}

/* Statsv3 admin */

// Gestion des copier
function copyClipBoardFctOf(num) {
	if( $(".legend-texttocopy").eq(num).length>0 ) {
	$(".legend-texttocopy").eq(num).html("Texte copié!");
	setTimeout( function() { $(".legend-texttocopy").eq(num).html('') },1000 );
}
else
	alert("Texte copié dans le presse-papier");	
}

function addClipBoardIE() {
	var num=$(this).data("num");
	window.clipboardData.setData('Text', $(this).val() );
	//textRange = $(this)[0].createTextRange();
	//textRange.execCommand("RemoveFormat");
	//textRange.execCommand("Copy");
			
	copyClipBoardFctOf(num);
}

function addClipBoardFlash() {
	var num=$(this).data("num");
	ZeroClipboard.setMoviePath(statsv3_rootdir+"includes/ext/ZeroClipboard.swf");
				
	//Create a new clipboard client
	var clip = new ZeroClipboard.Client();

	//Glue the clipboard client
	clip.glue($(this)[0]);

	//Grab the text from the parent row of the icon
	var txt = $.trim($(this).text());
	clip.setText(txt);
	
	$(this).data("clip",clip);
	
	//Add a complete event to let the user know the text was copied
	clip.addEventListener('complete', function(client, text) {
				copyClipBoardFctOf(num);
	 			//clip.destroy();
	});
}

function addClipBoardFct() {

	$(".texttocopy").each(function(num) {

		$(this).data("num", num);

		if($.browser.msie&&$.ie6)
			$(this).click(addClipBoardIE);
		else
			$(this).mouseover(addClipBoardFlash);

	});
}

function refreshClipBoardFct() {

	$(".ZeroClipboardDivOverlay").remove();

	$(".texttocopy").each(function(num) {

		$(this).data("num", num);

		if( !$.browser.msie || !$.ie6 ) {
			var clip = $(this).data("clip");
			if( typeof(clip)!="undefined" ) {
				clip.destroy();
			}
			$(this)	.unbind("mouseover",addClipBoardFlash)
					.bind("mouseover",addClipBoardFlash);
		}
		else
			$(this).click(addClipBoardIE);

	});
}

function removeClipBoardFct() {
	$(".texttocopy").each(function(num) {

		if($.browser.msie&&$.ie6)
			$(this).unbind("click",addClipBoardIE);
		else
			$(this).unbind("mouseover",addClipBoardFlash);

	});
}
$(document).ready(function() {
	setTimeout( "addClipBoardFct();", 300 ); // Bug refresh FF
});

//Function d'alerte jquery
$.fn.ajaxSubmit = function(e) { 
	/* Change a form's submission type to ajax */ 
	this.submit(function(){ 
		var params = {}; 
		$(this) 
		// Maj pour les checkbox aussi
		.find("input:checked, input[type='text'], input[type='hidden'], input[type='password'], input[type='submit'], option:selected, textarea") 
// BUG APRES MAJ DE JQUERY		.filter(":enabled")
		.filter(function() {
			return ($(this).attr("disabled")==false) || $(this).attr("disabled") == "enabled";
		})
		.each(function() { 
			params[ this.name || this.id || this.parentNode.name || this.parentNode.id ] = this.value; 
		}); 
		$("body").addClass("curWait"); 
		$.post(this.getAttribute("action") + "?call=ajax", params, function(text){ 
			$("body").removeClass("curWait");
			var reg=new RegExp("[|]+", "g");
			texte = text.split(reg);
			if(texte[1]) {
				if(texte[1]=="reload")
					window.location.href = document.location.href;
				else
					$('#'+texte[1]).val('');
			}
			var reg1=new RegExp("à jour","g");
			var msgmajok = (texte[0].indexOf("à jour")!==-1);
			// Si la MAJ est passée on enleve la bordure rouge!
			if(msgmajok) {
				$(".bordurerouge").addClass("bordure").removeClass("bordurerouge");
			}
			jAlert(texte[0], 'Confirmation');
		}); 
		return false; 
    }); 
    return this; 
} 

AfficherInfoBulle = function(e)
{
  var text = $(this).next('.info-bulle-contenu');
  if (text.attr('class') != 'info-bulle-contenu')
    return false;

  if(text.css('display')=='none') {
	  text.fadeIn().css('top', e.pageY+'px');
  }
   
  	

  return false;
}
CacherInfoBulle = function(e)
{
  var text = $(this).next('.info-bulle-contenu');
  if (text.attr('class') != 'info-bulle-contenu')
    return false;

  text.fadeOut();
}

InstallationInfoBulle = function()
{
  $('.info-bulle-css')
    .each(function(){
      $(this)
        .after($('<span/>')
          .attr('class', 'info-bulle-contenu')
          .html($(this).attr('title')))
        .attr('title', '');
    })
    .hover(AfficherInfoBulle, CacherInfoBulle);
}

$(document).ready(function() {
  InstallationInfoBulle();
  InstallationMessageInfo();
});

InstallationMessageInfo = function()
{
  $('.message_info')
    .each(function(){
      $(this).click(function(){
    	  contenu = $(this).attr('title');
    	  message_info(300,400, contenu);
      })
    }).css('cursor','pointer');
}


function message_contrat() {

	$.blockUI.defaults.css = {};
	$.blockUI.defaults.overlayCSS= {
		backgroundColor:	'#000000',
		opacity:			'0.5',
		cursor:				'normal'
	};
	$.blockUI.defaults.baseZ=99999;// Zindex

	var ifr_width = 600;
	var ifr_height = 420;
	 
	$.blockUI({ 
		message: '<div style="cursor:pointer; position:absolute; width:'+(ifr_width-20)+'px; height:10px; text-align:right"><span onclick="$.unblockUI();">X Fermer</span></div><iframe style="background-color:#ffffff;" src="http://affiliation.porn.fr/v3/includes/contrat.php" frameborder="no" marginheight="0" marginwidth="0" width="'+ifr_width+'" height="'+ifr_height+'" allowtransparency="true"></iframe>',
		css: {
			top: '50%',
			left: '50%',
			marginTop: (ifr_height/-2) + 'px', 
			marginLeft: (ifr_width/-2) + 'px'
			  
		}
	});
	$('.blockOverlay').click(function() {
		$.unblockUI();
	});
}

function message_iframe(url, taillex, tailley) {

	$.blockUI.defaults.css = {};
	$.blockUI.defaults.overlayCSS= {
		backgroundColor:	'#000000',
		opacity:			'0.5',
		cursor:				'normal'
	};
	$.blockUI.defaults.baseZ=99999;// Zindex

	var ifr_width = 600;
	var ifr_height = 420;
	 
	$.blockUI({ 
		message: '<div style="cursor:pointer; position:absolute; width:'+(ifr_width-20)+'px; height:10px; text-align:right"><span onclick="$.unblockUI();">X Fermer</span></div><iframe style="background-color:#ffffff;" src="'+url+'" frameborder="no" marginheight="0" marginwidth="0" width="'+ifr_width+'" height="'+ifr_height+'" allowtransparency="true"></iframe>',
		css: {
			top: '50%',
			left: '50%',
			marginTop: (ifr_height/-2) + 'px', 
			marginLeft: (ifr_width/-2) + 'px'
			  
		}
	});
	$('.blockOverlay').click(function() {
		$.unblockUI();
	});
}

function message_info(taillex, tailley, contenu) {

	$.blockUI.defaults.css = {};
	$.blockUI.defaults.overlayCSS= {
		backgroundColor:	'#000000',
		opacity:			'0.5',
		cursor:				'normal'
	};
	$.blockUI.defaults.baseZ=99999;// Zindex

	var ifr_width = 420;
	var ifr_height = 220;
	 
	$.blockUI({ 
		message: '<div style="cursor:pointer; position:absolute; width:'+(ifr_width)+'px; height:15px; text-align:right; border-bottom: 1px solid #000;"><span onclick="$.unblockUI();" style="margin-right: 5px;">X Fermer</span></div><div style="background-color:#ffffff; width:'+(ifr_width-10)+'px;height:'+ifr_height+'px; padding-top:15px; padding-left:5px; padding-right:5px;overflow:auto;">'+contenu+'</div>',
		css: {
			top: '50%',
			left: '50%',
			marginTop: (tailley/-2) + 'px', 
			marginLeft: (taillex/-2) + 'px'
			  
		}
	});
	$('.blockOverlay').click(function() {
		$.unblockUI();
	});
}

function maj_listniche(){
	if($('#autoniche').attr("checked")){
		$('#niche').attr('disabled', 'disabled');
	}else{
		$('#niche').removeAttr('disabled');
	}
}


function gestion_site() {

	$.blockUI.defaults.css = {};
	$.blockUI.defaults.overlayCSS= {
		backgroundColor:	'#000000',
		opacity:			'0.5',
		cursor:				'normal'
	};
	$.blockUI.defaults.baseZ=99999;// Zindex

	var ifr_width = 660;
	var ifr_height = 450;
	
	$.blockUI({ 
		message: '<div style="cursor:pointer; position:absolute; width:'+(ifr_width-20)+'px; height:10px; background-color: #FFF; text-align:right"><span onclick="refresh_listsite();">X Fermer</span></div><iframe style="background-color:#ffffff;" src="http://tools.porn.fr/iframe/gestion_site.php" frameborder="no" marginheight="0" marginwidth="0" width="'+ifr_width+'" height="'+ifr_height+'" allowtransparency="true"></iframe>', 
		css: {
			top: '50%',
			left: '50%',
			marginTop: (ifr_height/-2) + 'px', 
			marginLeft: ((10+ifr_width) /-2) + 'px', 
			width: (10+ifr_width)+'px' 
		}
	});
	$('.blockOverlay').click(function() {
		refresh_listsite();
	});
}

function refresh_listsite() {

	var urllist = "?action=getSiteFilter";
	var retour = http( urllist );

	if(retour.substring(0,6)=="Erreur")
			alert(retour);
	else // on maj la liste
		if(retour!="") {
			tab_val = retour.split("\n");
			tab_select = new Array();
			tab_select[""] = 'Choix du Site Web';
			for(var i=0; i<tab_val.length && tab_val[i]!=""; i++) {
				var tab_val_chp = tab_val[i].split("\t");
				tab_select[ tab_val_chp[0] ]  = tab_val_chp[ 1 ];
			}
			majSelectFiltreDep('site', tab_select);
		}

	$.unblockUI();
}
var emplacement = '';
function controle_emplacement(empla_text, typeoutil){
	if($('#site').val()!='' && empla_text!=''){
		if(empla_text!=emplacement || $('#emplacement').val()!=''){
			var emplacement = empla_text;
			var produit = $('#produit').val();
                        var marche = $('#marche').val();
                        var emplencours = $('#emplacement').val();

			var urllist = "?action=getControleEmplacement&empla_text="+empla_text+"&site="+$('#site').val()+"&marche="+marche+"&produit="+produit+"&emp="+emplencours;
			var retour = http( urllist );
	
			if(retour.substring(0,6)=="Erreur"){
				tab_retour = retour.split(":");
				$('#empla_nok').show();
				$('#empla_ok').hide();
				$('#empla_text').css('border','1px solid red');
				$('#emplacement').val('');
				
			}else{ // on maj la liste
				if(retour!="") {
					$('#emplacement').val(retour);
					$('#empla_text').css('border','1px solid #CCCCCC');
					$('#empla_ok').show();
					$('#empla_nok').hide();
				}
			}
			refresh_link_url();
		}
	}
}

function controle_site(){
	if($('#site').val()==''){
		alert('Veuillez choisir un site !');
		$('#site').focus();
	}
}

function maj_pdp_visuel_sel(){
	$('.pdp-list-visuels .pdp-sel').removeClass('pdp-sel');
	if( $(this).attr('id') ) {
		$(this).addClass('pdp-sel');
		var tab_id = $(this).attr('id').split('_');
		$('#pdp').val( tab_id[1] );
	}
	else
		$('#pdp').val( '' );
	$('#pdp').change();
}

function maj_pdv_visuel_sel(){
	$('.pdv-list-visuels .pdv-sel').removeClass('pdv-sel');
	if( $(this).attr('id') ) {
		$(this).addClass('pdv-sel');
		var tab_id = $(this).attr('id').split('_');
		$('#pdv').val( tab_id[1] );
	}
	else
		$('#pdv').val( '' );
	$('#pdv').change();
}

function maj_choixson(){
	if($('#do_sound').val()==1){ 
		$('#choixson').css('visibility','visible');
	}else{
		$('#choixson').css('visibility','hidden');
	}
}

function play_sound_infopop(leson) {
	url_swf_mp3 = "http://public.porn.fr/v3/outils/infopop/playit.swf?mp3file=http://public.porn.fr/v3/outils/infopop/sons/"+leson+".mp3";
	var so = new SWFObject(url_swf_mp3,"playitsound","1","1","8","#ffffff");
	so.write("leson");
}

function detail_membre(id_membre) {

	$.blockUI.defaults.css = {};
	$.blockUI.defaults.overlayCSS= {
		backgroundColor:	'#000000',
		opacity:			'0.5',
		cursor:				'normal'
	};
	$.blockUI.defaults.baseZ=99999;// Zindex

	var ifr_width = 660;
	var ifr_height = 450;
	var membre = id_membre;
	
	$.blockUI({ 
		message: '<div style="cursor:pointer; position:absolute; width:'+(ifr_width-20)+'px; height:10px; text-align:right"><span onclick="$.unblockUI();">X Fermer</span></div><iframe style="background-color:#ffffff;" src="detailmembre.php?id_membre='+id_membre+'" frameborder="no" marginheight="0" marginwidth="0" width="'+ifr_width+'" height="'+ifr_height+'" allowtransparency="true"></iframe>', 
		css: {
			top: '50%',
			left: '50%',
			marginTop: (ifr_height/-2) + 'px', 
			marginLeft: ((10+ifr_width) /-2) + 'px', 
			width: (10+ifr_width)+'px' 
		}
	});
	$('.blockOverlay').click(function() {
		$.unblockUI();
	});
}
