var d = document;
var w = window; 
var t = true;
var f = false;
var n = null;
var isIe = document.all?true:false;
var isIe5 = parseFloat(navigator.appVersion.split("MSIE")[1]) == 5.5 ? t : f;
var isIe6 = parseFloat(navigator.appVersion.split("MSIE")[1]) == 6 ? t : f;
var isIe7 = parseFloat(navigator.appVersion.split("MSIE")[1]) == 7 ? t : f;

//Décalage TOP pour les popups
var decalageTop = 20;
var decalageTop1 = 50;
var decalageTop2 = 100;

function _(id) {
	if (id) {
		return $(id);
	}
}

function focus(id) {
	if ($(id)) {
		$(id).focus();
	}
}

function trim(myString)
{
	return myString.replace(/^\s+/g,'').replace(/\s+$/g,'')
}

String.prototype.contient = function (substring) {
	var index = this.indexOf(substring);
	if (index == -1) return false
	else return true;
}

// Inverse un boolean
function inverse(boolean) {
	if (boolean != undefined) {
		if (boolean == true) {
			return false;
		} else if (boolean == false) {
			return true;
		} else if (boolean == ''){
			return false;
		}
	} else {
		return false
	}
}

/*
 * Permet de récupérer l'objet XMLHTTPREQUEST de facon sur
 */

function getHTTPObject()
{
  var xmlhttp = false;

  /* Compilation conditionnelle d'IE */
  /* Compilation conditionnelle d'IE */
  /*@cc_on
  @if (@_jscript_version >= 5)
     try
     {
        xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
     }
     catch (e)
     {
        try
        {
           xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
        }
        catch (E)
        {
           xmlhttp = false;
        }
     }
  @else
     xmlhttp = false;
  @end @*/


  /* on essaie de créer l'objet si ce n'est pas déjà fait */
  if (!xmlhttp && typeof XMLHttpRequest != 'undefined')
  {
     try
     {
        xmlhttp = new XMLHttpRequest();
     }
     catch (e)
     {
        xmlhttp = false;
     }
  }

  return xmlhttp;
}

/*
 * url = url serveur param = param url afficheAttente = affichage d'un message
 * d'attente fonction_success = nom de la function appelé en cas de succés
 * param_function_success = param de la function success fonction_fail =
 * fonction appelé en cas d'échec
 */

function appelAjax(url,param,afficheAttente,fonction_success,param_function_success,fonction_fail) {
	
		var xhr = getHTTPObject(); 
		/*
		 * DEPRECATED try { xhr = new ActiveXObject('Msxml2.XMLHTTP'); } catch
		 * (e) { try { xhr = new ActiveXObject('Microsoft.XMLHTTP'); } catch
		 * (e2) { try { xhr = new XMLHttpRequest(); } catch (e3) { xhr = false; } } }
		 */
		
    	xhr.onreadystatechange  = function()
    	{ 
         if(xhr.readyState  == 4)
         {		
              if(xhr.status  == 200) {
              	if (fonction_success) {
            	  if (param_function_success == undefined) {
              			fonction_success.call(this,xhr);
              		} else if (param_function_success.length == 1) {
              			fonction_success.call(this,xhr,param_function_success[0]);
              		} else if (param_function_success.length == 2) {
              			fonction_success.call(this,xhr,param_function_success[0],param_function_success[1]);
              		} else if (param_function_success.length == 3) {
              			fonction_success.call(this,xhr,param_function_success[0],param_function_success[1],param_function_success[2]);
              		}
              	  }
         
                  if (afficheAttente == 1) {
                		$('container').className = 'cursorNormal';
                		cache('enAttenteRecherche');
                  }
                  if (afficheAttente == 2) {
                 		$('container').className = 'cursorNormal';
                 		cache('enAttente');
                   }
                 } 
              else {
              	if (fonction_fail)
            	  fonction_fail.call();
              }
         }
    	}; 
		
		if (afficheAttente == 1) {
			$('container').className = 'cursorLoad';
			affichePosition('enAttenteRecherche','visible',decalageTop2);
		}
		if (afficheAttente == 2) {
			$('container').className = 'cursorLoad';
			affichePosition('enAttente','visible',decalageTop2);
		}
		
   		// On rajoute la base_url
		url = url_base + '/' + url;
		if (param != '')
   			url = url + '?' + param;
   		xhr.open("GET", url,  true);
   		xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded;charset=utf-8"); 
   		xhr.send(null); 
	}


// Pour valider le retour si on le veut en XML
function valideRetourXML(xhr) {
	var reponseXML = xhr.responseXML;
	// Null pour Firefox, Netscape, vide pour IE
	if (reponseXML) {
		if (reponseXML.childNodes.length!=0) {
			if (reponseXML.getElementsByTagName('reponse')) {
				if (reponseXML.getElementsByTagName('reponse').item(0)) {
					return reponseXML;
				}
			}
		}
	}
	// Pas de retour
	// Si il est pas valide, on essaie de le nettoyer
	return nettoieRetourXML(xhr.responseText);
	
}

// Pour nettoyer les retours XML
function nettoieRetourXML(texteXML) {
	// On vérifie que c'est bien du XML avec response dans la reponse dedans
	var reg = new RegExp("\<\/reponse\>");
	if (reg.test(texteXML)) {
		// on supprime les retours
		var reg=new RegExp("[\r\n]", "g");
		var texteXMLPropre = texteXML.replace(reg, "");
	
		// on construit une chaine texte XML valide
		var reg = new RegExp("\<\/reponse\>");
		reg.exec(texteXMLPropre);
		var texteXMLPropre = RegExp.leftContext + '</reponse>';
	
		return chargeXML(texteXMLPropre);
		
	} else {
		return null;
	} 
}

// Charge du texte XML dans un objet XML Document
function chargeXML(text) {
	var xmlDoc;
	var parser;
	var xmlhttp = false;

	  /* Compilation conditionnelle d'IE */
	  /*
		 * @cc_on @if (@_jscript_version >= 5) try { xmlDoc=new
		 * ActiveXObject("Microsoft.XMLDOM"); xmlDoc.async="false";
		 * xmlDoc.loadXML(text); } catch (e) { xmlhttp = false; } @else xmlhttp =
		 * false; @end @
		 */

	  /* on essaie de créer l'objet si ce n'est pas déjà fait */
	  if (!xmlhttp) {
		  parser=new DOMParser();
		  xmlDoc=parser.parseFromString(text,"text/xml");
	  }
	
	  return xmlDoc;
}


function affiche(p_idElement,p_type) {

	var element = $(p_idElement);
	if (p_type == 'block' && !(element.style.display == 'block' || element.style.display == '')) {
		element.style.display = 'block';
	} else if (p_type == 'block' && (element.style.display == 'block' || element.style.display == '')) {
		element.style.display = 'none';
	}
	
	if (p_type == 'inline' && !(element.style.display == 'inline' || element.style.display == '')) {
		element.style.display = 'inline';
	} else if (p_type == 'inline' && (element.style.display == 'inline' || element.style.display == '')) {
		element.style.display = 'none';
	}
	
}

function afficheSimple(p_idElement,p_type) {

	var element = $(p_idElement);
	if (element) {
	if (p_type == 'block' || p_type == 'inline' || p_type == 'table-row' || p_type == '') {
		// Bug IE
		if (isIe && p_type=='table-row') p_type='block';
		element.style.display = p_type;
	} else if (p_type == 'visible' || p_type == 'hidden') {
		element.style.visibility = p_type;
	}
	}
}

function afficheChange(p_idElement,p_type) {
	var element = $(p_idElement);
	if (element) {
		if (element.style) {
			var style = element.style.display;
			var visibility = element.style.visibility;
			if (style == 'block' || style == 'inline' || style == 'table') {
				element.style.display = 'none';
			} else if (visibility == 'visible') {
				element.style.visibility = 'hidden';
			} else {
				afficheSimple(p_idElement,p_type);
			}
		} else {
			afficheSimple(p_idElement,p_type);
		}
	}
}

function afficheChangeBlind(p_idElement) {
	var element = $(p_idElement);
	if (element) {
		if (element.style) {
			var style = element.style.display;
			if (style == 'none') {
				Effect.BlindDown(p_idElement,{ duration: 0.4 })
			} else {
				Effect.BlindUp(p_idElement,{ duration: 0.4 })
			}
		} else {
			Effect.BlindDown(p_idElement,{ duration: 0.4 })
		}
	}
}

function masque(p_idElement) {
	var element = $(p_idElement);
	if (element) {
		element.style.display = 'none';
	}
}
// Aves gestion du bug IE6
function masqueSpecial(p_idElement) {
	// Pour le bug IE6
	if (isIe6) {
		showHideSelect(true, 'form_recherche');
	}
	masque(p_idElement);
}

function cache(p_idElement) {
	var element = $(p_idElement);
	if (element) {
		element.style.visibility = 'hidden';
	}
}
// Avec gestion du bug IE6
function cacheSpecial(p_idElement) {
	// Pour le bug IE6
	if (isIe6) {
		showHideSelect(true, 'form_recherche');
	}
	cache(p_idElement);
}


function showHideSelect(sens) {
	if(isIe && !isIe7) {
		var o = d.getElementsByTagName('SELECT');
		for ( var i = 0; i < o.length; i++) {
			o[i].style.visibility = sens ? 'visible' : 'hidden';
		}
	}
}

//Pour retourner la hauteur compléte de la page
function getHauteurPage() {
	var topPied = get_full_position('piedPage')['top'];
	var heightPied = $('piedPage').offsetHeight;
	// Plus le margin bottom de 20 du container
	var hauteurPage = topPied + heightPied + 20;
	// Test par rapport à la hauteur disponible
	if (hauteurPage < availHeight()) {
		hauteurPage = availHeight();
	}
	return hauteurPage;
}
//Pour IE6, mauvaise affiche des div absolute
function getLargeurPage() {
	var leftPied = get_full_position('piedPage')['left'];
	return leftPied;
}
//Affiche une boite en absolu centrer verticalement
function afficheCentrer(id,typeAffichage) {
	// Pour le bug IE6
	if (isIe6) {
		showHideSelect(false, 'form_recherche');
		//_(id).style.left = (getLargeurPage()) + 'px';
	}
	var heightElement = _(id).offsetHeight;
	var position = Math.round(availHeight()/2) - Math.round(heightElement/2); 
	var positionFinal = position;
	$(id).style.top = (positionFinal + scrollVertical()) + 'px';
	afficheSimple(id,typeAffichage);
}
//Affiche une boite en absolu centrer verticalement sans gestion des champs select IE6
function afficheCentrer2(id,typeAffichage) {
	// Pour le bug IE6
	/*
	if (isIe6) {
		_(id).style.left = (getLargeurPage()) + 'px';
	}
	*/
	var heightElement = $(id).offsetHeight;
	var position = Math.round(availHeight()/2) - Math.round(heightElement/2); 
	var positionFinal = position;
	$(id).style.top = (positionFinal + scrollVertical()) + 'px';
	afficheSimple(id,typeAffichage);
}
//Affiche à une position précise en Y
function affichePosition(id,typeAffichage,posY) {
	$(id).style.top = (posY + scrollVertical()) + 'px';
	afficheSimple(id,typeAffichage);
}

function afficheOverlay() {
	$('overlay').style.height = (getHauteurPage()) + 'px';
	afficheSimple('overlay', 'visible');
}

function afficheOverlaySpecial() {
	// Pour le bug IE6
	if (isIe6) {
		showHideSelect(false, 'form_recherche');
	}
	afficheOverlay();
}

function masqueOverlay() {
	cache('overlay');
	cache('inscription');
	cache('login');
	cache('contact');
	cache('contactami');
	cache('profilUtilisateur');
	cache('oubliIdentifiant');
	cache('fluxRSS');
}

function masqueOverlaySpecial() {
	// Pour le bug IE6
	if (isIe6) {
		showHideSelect(true, 'form_recherche');
	}
	masqueOverlay();
}

//coordonnées (x,y) d'un élement dans la page
function _gO(o, coord) {
	var v = o["offset"+coord];
	while ((o = o.offsetParent )!= n) {
		v += o["offset"+coord];
	}
	return v;
}

//Pour changer l'image des petites flèches
function fleche(id,type) {
	$(id).src = url_base + '/images/fleche_' + type + '.gif';
}

function favori(url, texteFavori)
{
	var ua=navigator.userAgent.toLowerCase();
	var konq=(ua.indexOf('konqueror')!=-1);
	var saf=(ua.indexOf('webkit')!=-1);
	var mac=(ua.indexOf('mac')!=-1);
	var ctrlKey=mac?'Command/Cmd':'CTRL';
	
	if (window.sidebar)
   	{
		alert(m_message_ajoutfavori1 + ' Ctrl + D ' + m_message_ajoutfavori2 + '.');
		// Sur FireFox dans le panneau de gauche
		// window.sidebar.addPanel(texteFavori, url,"");
   	}
   	else if( document.all )
   	{
   		window.external.AddFavorite(url, texteFavori);
   	}
   	else if (!window.print || mac) {
   		alert(m_message_ajoutfavori1 + ' Command/Cmd + D ' + m_message_ajoutfavori2 + '.');
   	} else if (window.home||saf) {
		alert(m_message_ajoutfavori1 + ' ' + ctrlKey +' D ' + m_message_ajoutfavori2 + '.');
	}
   	else
    {
   		alert(m_message_ajoutfavori3);
   	} 
	
	return true;
}

// Retourne le scroll vertical de la page
function scrollVertical() {
	var scrollVertical = 0;
	if(isIe) {
		 // document.body.scrollTop marche pas sur IE7
		 if (document.documentElement) {
			 scrollVertical = document.documentElement.scrollTop;
		 } else if (document.body) {
			 X = X + document.body.scrollLeft;
			 scrollVertical = document.body.scrollTop;
		 }
	} else {
		scrollVertical = window.pageYOffset;
	}
	return scrollVertical;
}

// Positionne la scrollbar
function scrollY(y) {
    if (scrollVertical() !=0) {
    	window.scrollTo(0,y);
    }
}

//Positionne le scrollTop d'une DIV
function scrollYDiv(id,y) {
    if ($(id)) {
    	$(id).scrollTop = y;
    }
}

// retourne la hauteur de page disponible
function availHeight() {
	var hauteurDisponible = 0;
	if (screen.availHeight) {
		hauteurDisponible = screen.availHeight - 210;
	}
	return hauteurDisponible;
}

// pour le bug IE6
function showHideSelect(sens,idBloc) {
	if(isIe && !isIe7) {
		var o = _(idBloc).getElementsByTagName('SELECT');
		for ( var i = 0; i < o.length; i++) {
			o[i].style.visibility = sens ? 'visible' : 'hidden';
		}
	}
}

function get_offset(elem, pos)
{
    var offset = 0;
    while(elem) {
        offset += elem[pos];
        elem = elem.offsetParent
    }
    return offset
}

function get_full_position(id)
{
    var d = _(id);
    var offsets = new Object;
    offsets.top = get_offset(d, "offsetTop");
    offsets.left = get_offset(d, "offsetLeft");
    offsets.width = d.clientWidth;
    offsets.height = d.clientHeight;
    return offsets;
}

// Preload images
function preload(cheminsImage) {
	var img = new Image();
	for (var i = 0; i < cheminsImage.length; i++ ) {
		img.src = url_base + '/images/' + cheminsImage[i];
	}
}

//Charge les images du site
function preloadImages() {
	var cheminsImage = new Array();
	cheminsImage[0] = "icone_ami.jpg";
	cheminsImage[1] = "icone_delete.jpg";
	cheminsImage[2] = "icone_favoris.jpg";
	cheminsImage[3] = "icone_info.jpg";
	cheminsImage[4] = "icone_login.jpg";
	cheminsImage[5] = "icone_logout.jpg";
	cheminsImage[6] = "icone_mail.jpg";
	cheminsImage[7] = "icone_map.jpg";
	cheminsImage[8] = "icone_mesannonces.jpg";
	cheminsImage[9] = "icone_modifier.jpg";
	cheminsImage[10] = "icone_phone.jpg";
	cheminsImage[11] = "icone_photovide.jpg";
	cheminsImage[12] = "icone_register.jpg";
	preload(cheminsImage);
}

function raccourcir(id,pixel) {
	
	if ($(id)) {
		if ($(id).offsetWidth) {
			$(id).style.width = ($(id).offsetWidth - pixel) + 'px';
		}
	}
}

function validePrix(valeur) {
	if (valeur.length!=0) {
		var reg = /[^0-9\.,]/g;
		if (reg.test(valeur)) {
			valeur = valeur.replace(reg,"");
		}
		var reg = /,/g;
		if (reg.test(valeur)) {
			valeur = valeur.replace(reg,".");
		}
		var reg = /^\d+\.\d{2}$/;
		if (reg.test(valeur)) {
			return valeur;
		}
		var reg = /^\d+\.\d{0}$/;
		if (reg.test(valeur)) {
			valeur = valeur + '00';
			return valeur;
		}
		var reg = /^\d+\.\d{1}$/;
		if (reg.test(valeur)) {
			valeur = valeur + '0';
			return valeur;
		}
		var reg = /^\d+\.\d{3,}$/;
		if (reg.test(valeur)) {
			var reg = /\./g;
			valeur = valeur.replace(reg,"");
			valeur = valeur + '.00';
			return valeur;
		}
		var reg = /^\d+$/;
		if (reg.test(valeur)) {
			valeur = valeur + '.00';
			return valeur;
		}
	}
	return valeur;
	
}
 
function verifieTaille(id,idCounter,tailleLimite) {
	if (_(id)) {
		var texte = _(id).value;
		var taille = texte.length;
		if (taille > tailleLimite) {
			_(id).value=texte.substring(0,(texte.length-1));
			var caractereRestant = (tailleLimite - taille + 1);
			if (caractereRestant<=1) {
				_(idCounter).innerHTML = caractereRestant + ' ' + m_caractere_restant;
			} else {
				_(idCounter).innerHTML = caractereRestant + ' ' + m_caracteres_restants;
			}
			return false;
		} else {
			var caractereRestant = (tailleLimite - taille);
			if (caractereRestant<=1) {
				_(idCounter).innerHTML = caractereRestant + ' ' + m_caractere_restant;
			} else {
				_(idCounter).innerHTML = caractereRestant + ' ' + m_caracteres_restants;
			}
			return true;
		}
	}
}


function ecrire_cookie(nom, valeur, expires) {
  document.cookie=nom+"="+escape(valeur)+
  ((expires==null) ? "" : ("; expires="+expires.toGMTString())+";path=/");
}

function arguments_cookie(offset){
  var endstr=document.cookie.indexOf (";", offset);
  if (endstr==-1) endstr=document.cookie.length;
  return unescape(document.cookie.substring(offset, endstr)); 
}

function lire_cookie(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 arguments_cookies(j);
    i=document.cookie.indexOf(" ",i)+1;
    if (i==0) break;
  }
  return null; 
}

//Pour utiliser l'operateur in dans un tableau
//['jj','kk'] -> {'jj':'', 'kk':''}
function oc(a)
{
var o = {};
for(var i=0;i<a.length;i++)
{
 o[a[i]]='';
}
return o;
}
