/**************************************************************************************************
* Code exécuté à chaque chargement
**************************************************************************************************/
// Si le site est ouvert dans une frame (depuis un lien sur un autre site) on réouvre le site sur toute la surface du navigateur
//if (parent.frames.length > 0) window.top.location.href=location.href;

// Détection du navigateur
var _ns4=(document.layers) ? true : false;
var _ie4=(document.all && !document.getElementById && window.ActiveXObject) ? true : false;
var _ie5=(document.all && document.getElementById && window.ActiveXObject) ? true : false;
var _moz=(!document.all && document.getElementById) ? true : false;
var _op=(document.all && !window.ActiveXObject) ? true : false;
var _dom=(_ie5 || _moz || _op) ? true : false;

// Détection du support d'XMLHttpRequest
var _ajax=(_dom && (window.XMLHttpRequest || window.ActiveXObject)) ? true : false;

/**************************************************************************************************
* Fonctions génériques
**************************************************************************************************/
// Remplace document.getElementById. Retourne l'objet si on passe son ID en paramètre, mais aussi si on passe l'objet
function $$(_id) { return (typeof _id == "string") ? document.getElementById(_id) : _id; }
function geby(_id) { return (typeof _id == "string") ? document.getElementById(_id) : _id; }

// Retourne un objet. Si on passe un objet en paramètre, le retourne. Si on passe un id, on retourne l'objet correspondant
function getObj(_obj) { return (typeof _obj == "string") ? $$(_obj) : _obj; }

// allows for multiple onload functions to be added to the
// document. instead of using <body onload=function()> use
// addOnload (function).
function addOnload(func) {
	var oldOnload = window.onload;

	if (typeof oldOnload == "function") {
		window.onload = function() {
			if (oldOnload) {
				oldOnload();
			}
			func();
		}
	}
	else {
		window.onload = func;
	}
}


function showElem(_id) {
	if (_dom && $$(_id)) {
			$$(_id).style.display='block';
			//$$(_id).style.visibility='hidden';
			setFooterLogo();
	}
}
function hideElem(_id) {
	if (_dom && $$(_id)) {
			$$(_id).style.display='none';
			//$$(_id).style.visibility='visible';
			setFooterLogo();
	}
}
function showHideElem(_id) {
	if (_dom && $$(_id)) {
			$$(_id).style.display = $$(_id).style.display != 'block' ? 'block' : 'none';
			setFooterLogo();
	}
}

// Retourne le scroll vertical de la fenêtre
function doScroll(x,y)
{
	window.scrollTo(x,y);
	//var _tmp=(document.body.scrollTop) ? document.body.scrollTop : (window.pageYOffset) ? window.pageYOffset : document.documentElement.scrollTop;
	//if (typeof _tmp == 'undefined') ? 0 : _tmp;
}

// Retourne le scroll vertical de la fenêtre
function getScroll()
{
	var _tmp=(document.body.scrollTop) ? document.body.scrollTop : (window.pageYOffset) ? window.pageYOffset : document.documentElement.scrollTop;
	return (typeof _tmp == 'undefined') ? 0 : _tmp;
}

// Retourne le scroll vertical de la fenêtre
function scrollTop()
{
	var _tmp=(document.body.scrollTop) ? document.body.scrollTop : (window.pageYOffset) ? window.pageYOffset : document.documentElement.scrollTop;
	return (typeof _tmp == 'undefined') ? 0 : _tmp;
}

// Retourne la position X de l'objet passé en paramêtre, depuis le bord gauche du navigateur
function positionLeft(_obj)
{
	_obj=getObj(_obj);
	var _p=_obj.offsetParent;
	return (_p) ? _obj.offsetLeft+positionLeft(_p) : _obj.offsetLeft;
}

// Retourne la position Y de l'objet passé en paramêtre, depuis le bord haut du navigateur
function positionTop(_obj)
{
	_obj=getObj(_obj);
	var _p=_obj.offsetParent;
	return (_p) ? _obj.offsetTop+positionTop(_p) : _obj.offsetTop;
}

// Retourne la position X de la souris
function mouseX(_e) { return (_ns4 || _moz) ? _e.pageX : (document.body.scrollLeft) ? event.clientX + document.body.scrollLeft : event.clientX + document.documentElement.scrollLeft; }
// Retourne la position Y de la souris
function mouseY(_e) { return (_ns4 || _moz) ? _e.pageY : event.clientY + scrollTop(); }
// Retourne l'élément cible de l'évenement appelant la fonction
function target(_e) { return (_ie4 || _ie5) ? event.srcElement : _e.target; }
// Retourne l'id du bouton clické
function buttonClicked(_e) { return (_ie4 || _ie5) ? event.button : _e.which; }

// Ajoute un événement
function addEvent(_target,_event,_handler)
{
	if (_target.addEventListener) _target.addEventListener(_event, _handler, false);
	else if (_target.attachEvent) _target.attachEvent('on' + _event, _handler);
};

// Retire un événement
function remEvent(_target,_event,_handler)
{
	if (_target.removeEventListener) _target.removeEventListener(_event, _handler, false);
	else if (_target.detachEvent) _target.detachEvent('on' + _event, _handler);
};

/**************************************************************************************************
* Fonctions diverses
**************************************************************************************************/
// Modif affichage calque
function hide(id){
	var obj = document.getElementById(id);
	if(obj.style.display=="block"){
		obj.style.display="none";
	}else{
		obj.style.display="block";
	}
}

// Demander la confirmation lors du click sur un lien avant de l'ouvrir
function confirmLink(_link,_msg)
{
	var _r=confirm(_msg);
	if (_r)
	{
		_link.href+=(_link.href.indexOf('?') == -1) ? '?' : '&';
		_link.href+='confirm=1';
	}
	return _r;
}

// Ouvre un popup
function popup(_url)
{
	window.open(_url,'lz_popup','alwaysRaised=yes,toolbar=no,height=450,width=650,menubar=no,resizable=yes,scrollbars=yes,status=no');
}

// Ouvre le lien passé en parametre, dans une nouvelle fenetre si le parametre "_target" est défini
function openLink(_url,_target,_options)
{
	var _w='';
	if (!_options) _options='';
	if (_target) _w=open(_url,_target,_options);
	else location.href=_url;
	return _w;
}

// Ouvre un lien contenu dans le parametre "value" de l'option sélectionnée du select faisant appel à cette fonction
function linkOnSelect(_obj)
{
	var _link=_obj.value;
	if (_link)
	{
		openLink(_link);
	}
}

/**************************************************************************************************
* Cookies
**************************************************************************************************/
function setCookie(_name,_val)
{
	var _argv=setCookie.arguments;
	var _argc=setCookie.arguments.length;
	var _expires='';
	if (_argc > 2)
	{
		var _date_exp=new Date();
		_date_exp.setTime(_date_exp.getTime() + (_argv[2] * 3600 * 1000));
		_expires='; expires=' + _date_exp.toGMTString();
	}
	var _path=(_argc > 3) ? '; path=' + _argv[3] : '; path=/';
	var _domain=(_argc > 4) ? '; domain=' + _argv[4] : '';
	var _secure=(_argc > 5) ? _argv[5] : false;
	document.cookie=_name + '=' + escape(_val) + _expires + _path + _domain + ((_secure == true) ? '; secure' : '');
}

function getCookieVal(_offset)
{
	var _endstr=document.cookie.indexOf(';',_offset);
	if (endstr == -1) _endstr=document.cookie.length;
	return unescape(document.cookie.substring(_offset,_endstr));
}

function getCookie(_name)
{
	var _arg=name+'=';
	//var _alen=arg.length;
	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 getCookieVal(_j);
		_i=document.cookie.indexOf(' ',_i) + 1;
		if (_i == 0) break;
	}
	return null;
}

var _cookies = new function()
{
		this.set = function ( sName, sValue, nDays ) {
				var expires = "";
				if ( nDays ) {
						var d = new Date();
						d.setTime( d.getTime() + nDays * 24 * 60 * 60 * 1000 );
						expires = "; expires=" + d.toGMTString();
				}
				document.cookie = sName + "=" + sValue + expires + "; path=/";
		};

		this.get= function (sName) {
				var re = new RegExp( "(\;|^)[^;]*(" + sName + ")\=([^;]*)(;|$)" );
				var res = re.exec( document.cookie );
				return res != null ? res[3] : null;
		};

		this.remove = function ( name ) {
			_cookies._set( name, "", -1 );
		};
}


/**************************************************************************************************
* Gestion du blog
**************************************************************************************************/
// Affiche ou masque la prévisualisation d'un billet ou commentaire
function togglePreview(_id,_mode)
{
	var _elem=$$('prev_' + _id);
	var _img=$$('img_prev_' + _id);

	if (!_mode)
	{
		if (_elem.style.display == 'block' )
		{
			hideElem(_elem);
			_img.src='img/plus.png';
		}
		else
		{
			showElem(_elem);
			_img.src='img/minus.png';
		}
	}
	else if (_mode == 1)
	{
		showElem(_elem);
		_img.src='img/minus.png';
	}
	else if (_mode == -1)
	{
		hideElem(_elem);
		_img.src='img/plus.png';
	}
}

// Affiche ou masque la prévisualisation de tous les billets ou commentaires de la page
function toggleAllPreviews(_mode)
{
	if (typeof _prev_ids != 'undefined')
	{
		for (var _i=0;_i<_prev_ids.length;_i++)
		{
			togglePreview(_prev_ids[_i],_mode);
		}
	}
}

// Affiche ou masque les options supplémentaires d'un billet
function toggleOptions()
{
	var _elem=$$('options');
	var _img=$$('img_options');

	if (_elem.style.display == 'block' )
	{
		hideElem(_elem);
		_img.src='img/plus.png';
		setCookie('lz_moreoptions',0,365*24);
	}
	else
	{
		showElem(_elem);
		_img.src='img/minus.png';
		setCookie('lz_moreoptions',1,365*24);
	}
}

// Génère les url d'un billet à partir des titres dans les 5 langues
function generateTitleUrl(_id1,_id2)
{
	var _fr1=$$(_id1 + '_fr'); var _fr2=$$(_id2 + '_fr');
	var _en1=$$(_id1 + '_en'); var _en2=$$(_id2 + '_en');
	var _de1=$$(_id1 + '_de'); var _de2=$$(_id2 + '_de');
	var _es1=$$(_id1 + '_es'); var _es2=$$(_id2 + '_es');
	var _it1=$$(_id1 + '_it'); var _it2=$$(_id2 + '_it');
	if (_fr1) _fr2.value=str2url(_fr1.value);
	if (_en1) _en2.value=str2url(_en1.value);
	if (_de1) _de2.value=str2url(_de1.value);
	if (_es1) _es2.value=str2url(_es1.value);
	if (_it1) _it2.value=str2url(_it1.value);
}

// Définie la date actuelle dans les formulaires
function setNow(_id)
{
	var _now=new Date();
	$$(_id + '_year').value=_now.getFullYear();
	$$(_id + '_month').selectedIndex=_now.getMonth() + 1
	$$(_id + '_day').value=_now.getDate();
	$$(_id + '_hour').value=_now.getHours();
	$$(_id + '_min').value=_now.getMinutes();
}

/**************************************************************************************************
* Drag & Drop du vote
**************************************************************************************************/
// Initialisation
var _rmvote=''; // Id de l'emplacement de vote subissant le drag
var _dragvote=''; // Id du visuel subissant le drag
var _dragvoteimg=''; // Lien vers l'image du visuel subissant le drag
var _votes=new Array(); // Tableau des emplacements de vote occupés. L'indice est l'id de l'emplacement de vote, la valeur est un tableau contenant l'id du visuel en indice 0, et le chemin de son image en indice 1
var _voted=new Array(); // Tableau des visuels ayant subit un vote. L'indice est l'id du visuel, la valeur un bouléen

// Evenements
if (_ajax)
{
	if (document.captureEvents) document.captureEvents(Event.MOUSEUP); // Capture de l'evenement onMouseUp sous gecko*
	document.onmouseup=drop;
	// IE lance un drag sur le lien sur le onmousemouve, on l'annule
	document.ondragstart=cancelDrag;
}

function cancelDrag(_e) { if (_dragvote) return false; }

function dragStart(_e,_id,_img)
{
	_rmvote='';
	_dragvote='';
	_dragvoteimg='';
	// Si navigateur compatible et click gauche
	if (_ajax && buttonClicked(_e) == 1)
	{
		// Si le chemin de l'image est passé en paramètre, c'est un drag depuis un visuel
		if (_img)
		{
			// On ne démarre le drag que si le visuel n'a pas déjà fait l'objet d'un vote
			if (!_voted[_id])
			{
				_dragvote=_id;
				_dragvoteimg=_img;
			}
		}
		// Sinon, c'est un drag depuis un emplacement de vote à condition qu'un vote ait déjà été placé dans cet emplacement
		else if (_votes[_id])
		{
				_rmvote=_id;
				_dragvote=_votes[_id][0];
				_dragvoteimg=_votes[_id][1];
				$$('vote' + _id).style.backgroundImage='none'; // On supprime le visuel de l'emplacement du vote
		}
		// S'il y a bien quelque chose à déplacer, on initialise le drag
		if (_dragvote)
		{
			/*
			if ($$('dragvote').style.backgroundImage != 'url(' + _dragvoteimg + ')') // On ajoute l'image en arrière plan du block de drag
			{
					$$('dragvote').style.backgroundImage='url(' + _dragvoteimg + ')'; // On ajoute l'image en arrière plan du block de drag
			}
			*/
			if ($$('dragvoteimg').src != _dragvoteimg ) // On ajoute l'image en arrière plan du block de drag
			{
					$$('dragvoteimg').src = _dragvoteimg ; // On ajoute l'image en arrière plan du block de drag
			}


			if (document.captureEvents) document.captureEvents(Event.MOUSEMOVE); // Capture de l'evenement onMouseMove sous gecko
			document.onmousemove=drag;
			window.status='';
		}
	}
	// Return false pour annuler le click sur le lien
	return false;
}

function drag(_e)
{
	// Si navigateur compatible et une drag en cours
	if (_ajax && _dragvote)
	{
		var _div=$$('dragvote');
		var _x=mouseX(_e); var _y=mouseY(_e);
		if (!_div.style.display || _div.style.display == 'none') _div.style.display='block';
		_div.style.left=(_x - _div.offsetWidth/2) + 'px';
		_div.style.top=(_y - _div.offsetHeight/2) + 'px';

		// On passe tous les emplacements de vote
		for (var _i=1;_i<9;_i++)
		{
			if ($$('vote' + _i))
			{
				var _v=$$('vote' + _i);
				var _vx=positionLeft(_v); var _vy=positionTop(_v);
				if (!_ie5) _vy+=scrollTop();
				var _vx2=_vx + _v.offsetWidth; var _vy2=_vy + _v.offsetHeight;

				// Si la souris est placée dans la zone d'un emplacement de vote, on place l'icone de drag dans cet emplacement
				if (_x > _vx && _x < _vx2 && _y > _vy && _y < _vy2)
//				if (_x > _vx && _x < _vx2 && _y > _vy && _y < _vy2 && (!_votes[_i] || _rmvote == _i))
				{
					// Accrochage aux zones (bug avec le scroll depuis vote en vertical)
					////_div.style.left=_vx + 'px';
					////_div.style.top=_vy + 'px';
				}
			}
		}
	}
}

function drop(_e)
{
	// Si navigateur compatible et une drag en cours
	if (_ajax && _dragvote)
	{
		// On stoppe le drag et enleve l'icone de drag
		document.onmousemove=null;
		$$('dragvote').style.display='none';

		var _newvote=false;
		// On passe tous les emplacements de vote
		for (var _i=1;_i<9;_i++)
		{
			if ($$('vote' + _i))
			{
				var _v=$$('vote' + _i);
				var _x=mouseX(_e); var _y=mouseY(_e);
				var _vx=positionLeft(_v); var _vy=positionTop(_v);
				//if (!_ie5) _vy+=scrollTop();
				var _vx2=_vx + _v.offsetWidth; var _vy2=_vy + _v.offsetHeight;
				//alert(_vx+' '+_vy+' '+_vx2+' '+_vy2);
				//_vy=1270;
				//_vy2=1345;

				// Si la souris est placée dans la zone d'un emplacement de vote...
				if (_x > _vx && _x < _vx2 && _y > _vy && _y < _vy2)
//				if (_x > _vx && _x < _vx2 && _y > _vy && _y < _vy2 && (!_votes[_i] || _rmvote == _i))
				{
					// On valide le vote seulement si on ne remet pas à sa place un vote en cours de déplacement
					if (_i != _rmvote)
					{
						_xhr.get(_home + 'xhr.php','xhrfile=vote&usr_id=' + _user + '&opv_id=' + _opv_id + '&opv_end=' + _opv_end + '&itm_id=' + _dragvote + '&pos=' + _i,'','',true);
						// Le script php appelé ne retourne rien en cas de succès
						if (!_xhr._response)
						{
							// On supprime le vote du visuel qui est déjà dans l'emplacement du vote
							if (_votes[_i]) _voted[_votes[_i][0]]=null;

							_votes[_i]=new Array();
							_votes[_i][0]=_dragvote;
							_votes[_i][1]=_dragvoteimg;
							_voted[_dragvote]=true;
							_v.style.backgroundImage='url(' + _dragvoteimg + ')';
						}
						else if (_xhr._response == -1) alert(_vote_end_msg);
						_newvote=true;
					}
					else
					{
						_rmvote='';
						_v.style.backgroundImage='url(' + _dragvoteimg + ')';
					}
				}
			}
		}
		// Si on supprime un vote
		if (_rmvote)
		{
			// On ne supprime le vote de la base que quand ce n'est pas un changement de vote
			if (!_newvote)
			{
				_xhr.get(_home + 'xhr.php','xhrfile=vote&usr_id=' + _user + '&opv_id=' + _opv_id + '&opv_end=' + _opv_end + '&itm_id=' + _dragvote,'','',true);
				if (!_xhr._response) _voted[_votes[_rmvote][0]]=null;
			}
			// On teste la dernière réponse, soit la suppression si elle à lieu, sinon l'ajout qui s'est fait plus haut
			if (!_xhr._response) _votes[_rmvote]=null;
			else if (_xhr._response == -1) alert(_vote_end_msg);
			// Si la suppression a échoué, on remet l'image du vote à sa place
			else $$('vote' + _rmvote).style.backgroundImage='url(' + _dragvoteimg + ')';
		}

		_dragvote='';
		_dragvoteimg='';
	}
}

// Initialise la zone de votes
function showVote()
{
	// Paliatif à la non gestion du style position:fixed par IE
	if (_ie5)
	{
			$$('vote').style.position='absolute';
			addEvent(window, 'scroll', function(event) { repositionVote(event); });
	}
	addEvent(window, 'resize', function(event) { repositionVote(event); });
	repositionVote();
	$$('vote').style.display='block';
};

// Repositionne correctement la zone de vote
function repositionVote(_e)
{
	if (self.innerHeight) var _h=self.innerHeight; // Netscape 6
	else if (document.documentElement && document.documentElement.clientHeight) var _h=document.documentElement.clientHeight; // Le reste
	else if (document.body) var _h=document.body.clientHeight; // IE sans Doctype
	if (_ie5) _h+=scrollTop();
	$$('vote').style.top=(_h - 130) + 'px';
/*	$$('vote').style.top=(_h - 580) + 'px';*/
};


/**************************************************************************************************
* Traitements de chaines
**************************************************************************************************/
// Supprime les espaces en début et fin de chaine
function trim(_str)
{
	_str=_str.replace(/[ ]*$/,'');
	_str=_str.replace(/^[ ]*/,'');
	return _str;
}

// Formate une chaine pour une url
function str2url(_str,_encoding,_ucfirst)
{
	_str=_str.toUpperCase();
	_str=_str.toLowerCase();

	_str=_str.replace(/[\u00E0\u00E1\u00E2\u00E3\u00E4\u00E5]/g,'a');
	_str=_str.replace(/[\u00E7]/g,'c');
	_str=_str.replace(/[\u00E8\u00E9\u00EA\u00EB]/g,'e');
	_str=_str.replace(/[\u00EC\u00ED\u00EE\u00EF]/g,'i');
	_str=_str.replace(/[\u00F2\u00F3\u00F4\u00F5\u00F6\u00F8]/g,'o');
	_str=_str.replace(/[\u00F9\u00FA\u00FB\u00FC]/g,'u');
	_str=_str.replace(/[\u00FD\u00FF]/g,'y');
	_str=_str.replace(/[\u00F1]/g,'n');
	_str=_str.replace(/[\u0153]/g,'oe');
	_str=_str.replace(/[\u00E6]/g,'ae');
	_str=_str.replace(/[\u00DF]/g,'ss');

	_str=_str.replace(/[^a-z0-9_\s\'\:\/\[\]-]/g,'');
	_str=trim(_str);
	_str=_str.replace(/[\s\'\:\/\[\]-]+/g,' ');
	_str=_str.replace(/[ ]/g,'-');

	if (_ucfirst == 1) {
		var _c=_str.charAt(0);
		_str=_c.toUpperCase() + _str.slice(1);
	}

	return _str;
}



function showTagExplain()
{
		//var content = '';
		//content = $$('shop_tag_content').innerHTML;
		//var js = content.getElementsByTagName('script');
		//for( var i in js ) {eval(js[i].text); }
		xhr_param = 'xhrfile=shop-tags';

		__xhr.get(_home + 'xhr/', xhr_param, '', '', true);

		if (!__xhr._response) { }
		else { }
		var content_txt = __xhr._response;

//				content:    "templates/index.home_right_col.inc.php",
//				player:     "iframe",
		Shadowbox.open({
				content:    content_txt,
				player:     "html",
				title:      "",
				height:     540,
				width:      440
		});
}
