/**************************************************************************************************
* 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 _ie=document.all && window.ActiveXObject ? true : false;
var _ie4=_ie && !document.getElementById ? true : false;
var _ie56=_ie && document.getElementById && !window.XMLHttpRequest ? true : false;
var _ie7=_ie && window.XMLHttpRequest ? true : false;
var _khtml=navigator.vendor == 'KDE' ? true : false; // navigateurs KHTML (konqueror, safari...)
var _konq=(navigator.vendor == 'KDE' || (document.childNodes && !document.all && !navigator.taintEnabled)) ? true : false;
var _moz=!_khtml && !document.all && document.getElementById ? true : false;
var _op=document.all && !window.ActiveXObject ? true : false;
var _op7=_op && document.appendChild ? true : false;
var _op4=_op && !document.clear ? true : false;
var _dom=(_ie56 || _ie7 || _khtml || _moz || _op) ? true : false;

/**************************************************************************************************
* Gestion de classes
**************************************************************************************************/
var Class=
{
	create: function()
	{
		return function() { this.initialize.apply(this,arguments); };
	},

	extend: function(_dest,_src)
	{
		for (var _p in _src) _dest[_p]=_src[_p];
		return _dest;
	},

	parent: function(_this,_method)
	{
		var _args=new Array();
		for (var _i=2, _l=arguments.length; _i<_l; _i++)
		{
			_args.push(arguments[_i]);
		}
		_this.parent[_method].apply(_this,_args);
	}
};

/**************************************************************************************************
* 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 != 'object') ? 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 != 'object' && $(_obj)) ? $(_obj) : _obj; }
function getElementsByClassName(_className,_parentElement)
{
	var _childs=($(_parentElement) || document.body).getElementsByTagName('*');
	var _elems=[],_child;
	for (var _i=0, _length=_childs.length; _i<_length; _i++)
	{
		_child=_childs[_i];

	    if (
			_child.className.length > 0
			&&
			(
				_child.className == _className
				||
				_child.className.match(new RegExp("(^|\\s)" + _className + "(\\s|$)"))
			)
		)
		{
			_elems.push(_child);
		}
	}
	return _elems;
}

function showElem(_id, bInline) { if (_dom && $(_id)) $(_id).style.display = (bInline ? 'inline' : 'block'); }
function hideElem(_id) { if (_dom && $(_id)) $(_id).style.display = 'none'; }

// Supprime les caractères spéciaux et espaces en début et fin de chaine
function trim(_str) { return _str.replace(/(^\s*)|(\s*$)/g,''); }
function isEmpty(_var) { return (typeof _var != 'undefined' && _var) ? false : true; }
function writeCode(_code) { if (_dom) document.write(_code); }

if (!window.Event) var Event=new Object();
Class.extend(Event,
{
	// Ajoute un événement
	add: function(_target,_event,_handler,_usecapture)
	{
    	if (_event == 'keypress' && (_khtml || _target.attachEvent)) _event='keydown';
		if (_target.attachEvent) _target.attachEvent('on' + _event, _handler);
		else if (_target.addEventListener)
		{
			_target.addEventListener(_event, _handler, isEmpty(_usecapture));
		}
	},

	// Retire un événement
	rem: function(_target,_event,_handler,_usecapture)
	{
    	if (_event == 'keypress' && (_khtml || _target.attachEvent)) _event='keydown';
		if (_target.detachEvent) _target.detachEvent('on' + _event, _handler);
		else if (_target.removeEventListener)
		{
			_target.removeEventListener(_event, _handler, isEmpty(_usecapture));
		}
	},

	stopPropagation: function(_e)
	{
		// Si supporté en natif (gecko...)
		if (_e.stopPropagation) _e.stopPropagation();
		// Sinon (IE, Opera...)
		else _e.cancelBubble=true;
	},

	preventDefault: function(_e)
	{
		// Si supporté en natif (gecko...)
		if (_e.preventDefault) _e.preventDefault();
		// Sinon (IE, Opera...)
		else _e.returnValue=false;
	},

	stop: function(_e)
	{
		this.preventDefault(_e);
		this.stopPropagation(_e);
	},

	// Retourne la position X de la souris
	mouseX: function(_e)
	{
		return (_ns4 || _moz) ? _e.pageX : (document.body.scrollLeft) ? event.clientX + document.body.scrollLeft : event.clientX + document.documentElement.scrollLeft;
//		return (typeof _e.pageX != 'undefined') ? _e.pageX : (event.clientX + (document.documentElement.scrollLeft || document.body.scrollLeft));
//		return _e.pageX ? _e.pageX : (event.clientX + (document.documentElement.scrollLeft || document.body.scrollLeft)); },
	},
	// Retourne la position Y de la souris
	mouseY: function(_e)
	{
		return (_ns4 || _moz) ? _e.pageY : event.clientY + Position.scrollTop();
//		return (typeof _e.pageY != 'undefined') ? _e.pageY : (event.clientY + (document.documentElement.scrollTop || document.body.scrollTop));
//		return _e.pageY || (event.clientY + (document.documentElement.scrollTop || document.body.scrollTop));
	},

	// Retourne l'élément cible de l'évenement appelant la fonction
	target: function(_e)
	{
		return (_ie4 || _ie56) ? event.srcElement : _e.target;
//		return _e.target || event.srcElement;
	},

	// Retourne l'id du bouton cliqué
	buttonClicked: function(_e)
	{
		return (_ie4 || _ie56) ? event.button : _e.which;
//		return event.button || _e.which;
	},

	isLeftClick: function(_e) { return this.buttonClicked(_e) == 1 ? true : false; },

	keyCode: function(_e) { return _e.which ? _e.which : _e.keyCode; }
});

var Position=
{
	clientWidth: function()
	{
		if (self.innerWidth) return self.innerWidth; // Netscape 6
		else if (document.documentElement && document.documentElement.clientWidth) return document.documentElement.clientWidth; // Le reste
		else if (document.body) return document.body.clientWidth; // IE sans Doctype
	},

	clientHeight: function()
	{
		if (self.innerHeight) return self.innerHeight; // Netscape 6
		else if (document.documentElement && document.documentElement.clientHeight) return document.documentElement.clientHeight; // Le reste
		else if (document.body) return document.body.clientHeight; // IE sans Doctype
	},

	// Retourne la position X de l'objet passé en paramêtre, depuis le bord gauche du navigateur
	offsetLeft: function(_obj)
	{
		_obj=getObj(_obj);
		if (typeof _obj != 'object' && document.getElementsByName(_obj)[0]) _obj=document.getElementsByName(_obj)[0];
		var _p=_obj.offsetParent;
		return (_p) ? _obj.offsetLeft+this.offsetLeft(_p) : _obj.offsetLeft;
	},

	// Retourne la position Y de l'objet passé en paramêtre, depuis le bord haut du navigateur
	offsetTop: function(_obj)
	{
		_obj=getObj(_obj);
		if (typeof _obj != 'object' && document.getElementsByName(_obj)[0]) _obj=document.getElementsByName(_obj)[0];
		var _p=_obj.offsetParent;
		return (_p) ? _obj.offsetTop+this.offsetTop(_p) : _obj.offsetTop;
	},

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

	// Change la position du calque passé en paramêtre en le positionnant a la position x de l'objet passé en paramêtre moins la valeur _decalx, idem pour la position Y
	change: function(_decalx,_decaly,_obj,_layer)
	{
		_obj=getObj(_obj);
		_layer=getObj(_layer);
		var _x=Position.offsetLeft(_obj) + _decalx;
		var _y=Position.offsetTop(_obj) + _decaly;
		_layer.style.left=_x + 'px';
		_layer.style.top=_y + 'px';
	}
};

/**************************************************************************************************
* Fonctions diverses
**************************************************************************************************/
// 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(_name,_url,_width,_height)
{
	if (!_width) _width=650;
	if (!_height) _height=450;
	var _left=(screen.width - _width) / 2;
	var _top=(screen.height - _height) / 2;
	var _popup=window.open(_url,'cc_' + _name,'alwaysRaised=yes,toolbar=no,height=' + _height + ',width=' + _width + ',top=' + _top + ',left=' + _left + ',menubar=no,resizable=yes,scrollbars=yes,status=no');
	if (_popup.window.focus) _popup.window.focus();
}

// 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,_target)
{
	var _link=_obj.value;
	if (_link) openLink(_link,_target);
}

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

	if (!_mode)
	{
		if (_elem.style.display == 'block' || (_default == 'show' && !_elem.style.display))
		{
			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);
		}
	}
}

/*******************************************************************************
* InfoTip
*******************************************************************************/
_timerInfoTip='';
function showInfoTip(_obj,_str,_width)
{
	if (_timerInfoTip) { clearTimeout(_timerInfoTip); _timerInfoTip=''; }
	var _obj=$(_obj);
	var _layer=$('infotip');
	if (_layer)
	{
		_layer.innerHTML=_str;
		_layer.style.width=_width + 'px';
		showElem(_layer); // On l'affiche avant car offsetWidth retourne 0 sinon

		// Si le layer dépasse à droite, on le colle à droite
		var _x=0;
		// On vérifie si, en placant le layer au niveau du lien de déconnexion, il dépasse sur la droite du site
		var _dif=Position.offsetLeft(_obj) + _layer.offsetWidth - Position.offsetLeft('body') - $('body').offsetWidth;
		// Si c'est le cas, on le décale vers la gauche pour le coller contre la bordure droite du site
		if (_dif > 0) _x=-1 * _dif;

		/// Si le layer dépasse en bas, on l'affiche au dessus au lieu de l'afficher normalement au dessous
		var _y=18;
		if (Position.offsetTop(_obj) + 18 + _layer.offsetHeight > Position.clientHeight() + Position.scrollTop())
		{
			_y=- _layer.offsetHeight;
		}

		Position.change(_x,_y,_obj,_layer);
	}
}
function hideInfoTip()
{
	_timerInfoTip=setTimeout(function() { hideElem('infotip') },500);
}
function overInfoTip()
{
	if (_timerInfoTip) { clearTimeout(_timerInfoTip); _timerInfoTip=''; }
}

/*******************************************************************************
* Toggle
*******************************************************************************/
function toggle(_group,_id,_show)
{
	if ($(_group + '-' + _id + '-1') && $(_group + '-' + _id + '-2'))
	{
		var _e=_show == 2 ? 1 : 2;
		showElem(_group + '-' + _id + '-' + _show);
		showElem(_group + '-' + _id + '-' + _show + '-img');
		hideElem(_group + '-' + _id + '-' + _e);
		hideElem(_group + '-' + _id + '-' + _e + '-img');
	}
	return false;
}
function toggleGroup(_e,_group,_show)
{
	Event.stop(_e);
	var _elems=getElementsByClassName('toggle_' + _group,'main');
	for (var _i=0, _nb=_elems.length; _i<_nb; _i++)
	{
		var _tmp=_elems[_i].id.split('-');
		if (_tmp[2] == _show) showElem(_elems[_i]);
		else hideElem(_elems[_i]);
	}
	return false;
}

function filterSelect(_str,_select,_msg)
{
	_select=$(_select);
	var _words=new Array();
	// Si le champ n'est pas vide
	if (_str)
	{
		var _str=removeAccents(_str.toLowerCase());
		// On récupère chaque mot recherché
		var _tmp=_str.split(' ');
		for (var _i=0,_n=_tmp.length; _i<_n; _i++)
		{
			if (_tmp[_i] && _tmp[_i] != ' ') _words.push(_tmp[_i]);
		}
	}
	var _nbWords=_words.length;
	var _nbMatch=-1; // -1 car la première ligne répond toujours au filtre et ne doit pas être comptabilisé, donc son +1 remontera le compteur à 0
	// On passe chaque option du select
	for (var _k=0, _l=_select.options.length; _k<_l; _k++)
	{
		// Si le filtre est vide, si c'est la première option du select ou si elle contient tous les mots filtrés, on l'affiche
		var _match=true;
		if (_str && _select.options[_k].value != 0)
		{
			var _t=removeAccents(_select.options[_k].text.toLowerCase());
			for (var _i=0; _i<_nbWords; _i++)
			{
				if (_t.indexOf(_words[_i]) == -1) _match=false;
			}
		}

		if (_match)
		{
			_nbMatch++;
			showElem(_select.options[_k]);
			_select.options[_k].style.color='black';
		}
		else
		{
			if (_select.selectedIndex == _k) _select.selectedIndex=0;
			hideElem(_select.options[_k]);
			// IE refusant de masquer les options, on les met de la même couleur que le fond pour les "masquer"
			_select.options[_k].style.color='white';
		}
		_select.options[0].text=_msg.replace('{1}',_nbMatch);
	}
	return false;
}

function removeAccents(_str)
{
	_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');
	return _str;
}

var _left_premiere_timer='';
var _middle_premiere_timer='';
var _right_premiere_timer='';
function changeLeftPremiere(_start,_end,_current)
{
	if (_left_premiere_timer) clearTimeout(_left_premiere_timer);
	if (!_current) _current=_start;
	hideElem('premiere_diaporama_' + (_current == _start ? _end : _current-1));
	showElem('premiere_diaporama_' + _current);
	_current++;
	if (_current > _end) _current=_start;
	_left_premiere_timer=setTimeout('changeLeftPremiere(' + _start + ',' + _end + ',' + _current + ')',4000);
}
function changeMiddlePremiere(_start,_end,_current)
{
	if (_middle_premiere_timer) clearTimeout(_middle_premiere_timer);
	if (!_current) _current=_start;
	hideElem('premiere_diaporama_' + (_current == _start ? _end : _current-1));
	showElem('premiere_diaporama_' + _current);
	_current++;
	if (_current > _end) _current=_start;
	_middle_premiere_timer=setTimeout('changeMiddlePremiere(' + _start + ',' + _end + ',' + _current + ')',4000);
}
function changeRightPremiere(_start,_end,_current)
{
	if (_right_premiere_timer) clearTimeout(_right_premiere_timer);
	if (!_current) _current=_start;
	hideElem('premiere_diaporama_' + (_current == _start ? _end : _current-1));
	showElem('premiere_diaporama_' + _current);
	_current++;
	if (_current > _end) _current=_start;
	_right_premiere_timer=setTimeout('changeRightPremiere(' + _start + ',' + _end + ',' + _current + ')',4000);
}

function checkAll(_id,_uncheck)
{
	if (document.getElementById && document.getElementsByTagName)
	{
		var _len=_id.length;
		var _formsInPage=document.getElementsByTagName('form');

		for (var _i=0; _i<_formsInPage.length; _i++)
		{
			var _f=_formsInPage[_i];
			for (var _j=0; _j<_f.elements.length; _j++)
			{
				if (_f[_j].id.substring(0,_len) == _id && _f[_j].type == 'checkbox' && !_f[_j].disabled)
				{
					_f[_j].checked=(typeof _uncheck != 'undefined' && _uncheck) ? false : true;
				}
			}
		}
	}
}
function uncheckAll(_id)
{
	checkAll(_id,true);
}

function submitCineForm(oThis, sAction, sDefaultValue)
{
	if (oThis.form.search.value == sDefaultValue) oThis.form.search.value = '';
	$('page_films').removeAttribute('name');
	$('page_cines').removeAttribute('name');
	$('page_hours').removeAttribute('name');
	$('page_ie').name = 'page';
	$('page_ie').value = sAction;
}

/*******************************************************************************
* Loading
*******************************************************************************/
var Loading = new Object();
Class.extend(Loading,
{
	// Ajoute le block contenant le message de loading dans la source de la page
	initialize: function(_lg)
	{
		this._lg=_lg;
		this._width=250;	// Largeur du block d'affichage du message de chargement
		this._id='loading';	// ID du block d'affichage du message de chargement

		if (this._lg == 'en')
		{
			this._msgloading='Loading in progress...';
			this._msgtimeout='Timeout !';
			this._msgfailed='Loading failed !';
		}
		else
		{
			this._msgloading='Chargement en cours...';
			this._msgtimeout='Délais d\'attente dépassé !';
			this._msgfailed='Le chargement a échoué !';
		}

		document.write('<div id="' + this._id + '"><div style="width:' + this._width + 'px"></div></div>');
	},

	// Affiche la fenêtre de loading
	show: function(_type)
	{
		this.hide();
		$(this._id).className=(_type) ? 'msg' + _type : '';

		switch (_type)
		{
			case 'loading' : var _msg=this._msgloading; break;
			case 'timeout' : var _msg=this._msgtimeout; break;
			case 'failed' : var _msg=this._msgfailed;
			default : break;
		}

		// Gestion du repositionnement vertical de la fenêtre de loading sur les navigateurs ne supportant pas l'attribut CSS position:fixed
		if (document.all)
		{
			$(this._id).style.position='absolute';
			var _self=this;
			Event.add(window, 'scroll', function(event) { _self.reposition(event); });
		}

//		if (_type == 'timeout') alert('$(' + this._msgid + ').firstChild.innerHTML=' + _msg);
		$(this._id).firstChild.innerHTML=_msg;
		$(this._id).style.display='block';
		this.reposition();
	},

	// Repositionne la fenêtre de loading
	reposition: function(_e)
	{
		if ($(this._id).style.display != 'block') window.onscroll='';
		var _w=Position.clientWidth();
		$(this._id).style.left=(_w - this._width) / 2 + 'px';
		if (document.all)
		{
			var _tmp=Position.scrollTop();
			$(this._id).style.top=(5 + _tmp) + 'px';
		}
		else $(this._id).style.top='5px';
	},

	// Masque la fenêtre de loading
	hide: function()
	{
		$(this._id).style.display='none';
	}
});

lockImg = new Array();
function lockField(sTable, iId, sField, bUnlock)
{
	if (!bUnlock) bUnlock = 0;
	var oXhr = new xhr();
	oXhr.get(_home + 'xhr.php', 'xhrfile=lock_field&table=' + sTable + '&id=' + iId + '&field=' + sField + '&unlock=' + bUnlock, 'xhrLockField(\'' + sTable + '\',\'' + iId + '\',\'' + sField + '\')', 'xhrLockFieldWait(\'' + sField + '\')');
}

function xhrLockFieldWait(sField)
{
	lockImg[sField] = $('lock_' + sField + '_img').src;
	$('lock_' + sField + '_img').src=_home + 'img/loading2.gif';
}

function xhrLockField(sTable, iId, sField, oThis)
{
//	alert(oThis._responseText);
	if (oThis._responseText == 1)
	{
		$('lock_' + sField + '_img').src=_home + 'img/locked.png';
		$('lock_' + sField + '_link').href='javascript:lockField(\'' + sTable + '\',\'' + iId + '\',\'' + sField + '\',1)';
		$('lock_' + sField + '_img').alt = sMsgUnlockField;
		$('lock_' + sField + '_img').title = sMsgUnlockField;
		$('lock_' + sField + '_link').title = sMsgUnlockField;
	}
	else if (oThis._responseText == -1)
	{
		$('lock_' + sField + '_img').src=_home + 'img/unlocked.png';
		$('lock_' + sField + '_link').href='javascript:lockField(\'' + sTable + '\',\'' + iId + '\',\'' + sField + '\')';
		$('lock_' + sField + '_img').alt = sMsgLockField;
		$('lock_' + sField + '_img').title = sMsgLockField;
		$('lock_' + sField + '_link').title = sMsgLockField;
	}
	else
	{
		if (lockImg[sField]) $('lock_' + sField + '_img').src = lockImg[sField];
		alert('Echec de la requête');
	}
}

enableImg = new Array();
function enable(sTable, iId, bDisable)
{
	if (!bDisable) bDisable = 0;
	var oXhr = new xhr();
	oXhr.get(_home + 'xhr.php', 'xhrfile=enable&table=' + sTable + '&id=' + iId + '&disable=' + bDisable, 'xhrEnable(\'' + sTable + '\',\'' + iId + '\')', 'xhrEnableWait(\'' + iId + '\')');
}

function xhrEnableWait(iId)
{
	enableImg[iId] = $('enable_' + iId + '_img').src;
	$('enable_' + iId + '_img').src=_home + 'img/loading2.gif';
}

function xhrEnable(sTable, iId, oThis)
{
//	alert(oThis._responseText);
	if (oThis._responseText == 1)
	{
		$('enable_' + iId + '_img').src=_home + 'img/check_on.png';
		$('enable_' + iId + '_link').href='javascript:enable(\'' + sTable + '\',\'' + iId + '\',1)';
		$('enable_' + iId + '_img').alt = sMsgDisable;
		$('enable_' + iId + '_img').title = sMsgDisable;
		$('enable_' + iId + '_link').title = sMsgDisable;
	}
	else if (oThis._responseText == -1)
	{
		$('enable_' + iId + '_img').src=_home + 'img/check_off.png';
		$('enable_' + iId + '_link').href='javascript:enable(\'' + sTable + '\',\'' + iId + '\')';
		$('enable_' + iId + '_img').alt = sMsgEnable;
		$('enable_' + iId + '_img').title = sMsgEnable;
		$('enable_' + iId + '_link').title = sMsgEnable;
	}
	else
	{
		if (enableImg[iId]) $('enable_' + iId + '_img').src = enableImg[iId];
		alert('Echec de la requête');
	}
}

/*******************************************************************************
* Newsletters
*******************************************************************************/
// Villes
function nlCheckAddCineCity()
{
	var iCty = $('f_nl_cine_add_city').options[$('f_nl_cine_add_city').selectedIndex].value;
	if (!iCty || $('cine_city_' + iCty)) hideElem('cine_add_city_button');
	else showElem('cine_add_city_button', true);
}

function nlAddCineCity()
{
	var iFilm = 0;
	var aFilms = new Array;
	var aSelects = document.getElementsByName('f_nl_cine[0][]');
	var n = 0;
	for (i = 0, j = aSelects.length; i < j; i++)
	{
		iFilm = aSelects[i].options[aSelects[i].selectedIndex].value;
		if (iFilm != 0) aFilms[n++] = iFilm;
	}

	var iCty = $('f_nl_cine_add_city').options[$('f_nl_cine_add_city').selectedIndex].value;
	var oXhr = new xhr();
	oXhr.get(_home + 'xhr.php', 'xhrfile=nl_cine_add_city&city=' + iCty + '&films=' + aFilms.join(','), 'xhrNlAddCineCity(\'' + iCty + '\')', 'xhrNlAddCineCityWait()');
	return false;
}

function xhrNlAddCineCityWait()
{
	hideElem('cine_add_city_button');
	showElem('cine_add_city_loading', true);
}

function xhrNlAddCineCity(iCty, oThis)
{
	hideElem('cine_add_city_loading');

	aParams = xhrParseXml(oThis);
	if (aParams['city'])
	{
		oDiv = document.createElement('div');
		oDiv.innerHTML = aParams['city'];
		$('cine_cities').insertBefore(oDiv, $('cine_cities').firstChild);
	}
	else alert('Aucun film ayant des séances à venir dans cette ville.');
}

function nlRemCineCity(oThis)
{
	oThis.parentNode.parentNode.parentNode.removeChild(oThis.parentNode.parentNode);
	nlCheckAddCineCity();
	return false;
}

// Films
function nlCheckCineFilmsArrows(iCty)
{
	var aUp = getElementsByClassName('cine_film_up', $('cine_city_' + iCty + '_films'));
	for (i = 0, iLen = aUp.length; i < iLen; i++)
	{
		aUp[i].style.visibility = i ? 'visible' : 'hidden';
	}
	var aDown = getElementsByClassName('cine_film_down', $('cine_city_' + iCty + '_films'));
	for (i = 0, iLen = aDown.length; i < iLen; i++)
	{
		aDown[i].style.visibility = i == iLen - 1 ? 'hidden' : 'visible';
	}
}

function nlMoveUpCineFilm(iCty, oThis)
{
	var aUp = getElementsByClassName('cine_film_up', $('cine_city_' + iCty + '_films'));
	var oLast;
	for (i = 0, iLen = aUp.length; i < iLen; i++)
	{
		if (aUp[i].id == oThis.id)
		{
			oNode1 = (oThis.parentNode.parentNode.id == 'cine_city_' + iCty + '_films') ? oThis.parentNode : oThis.parentNode.parentNode;
			oNode2 = (oLast.parentNode.parentNode.id == 'cine_city_' + iCty + '_films') ? oLast.parentNode : oLast.parentNode.parentNode;
			$('cine_city_' + iCty + '_films').insertBefore(oNode1, oNode2);
			nlCheckCineFilmsArrows(iCty);
			break;
		}
		oLast = aUp[i];
	}
}

function nlMoveDownCineFilm(iCty, oThis)
{
	var aDown = getElementsByClassName('cine_film_down', $('cine_city_' + iCty + '_films'));
	var bOk = false;
	for (i = 0, iLen = aDown.length; i < iLen; i++)
	{
		if (aDown[i].id == oThis.id && i < iLen + 1)
		{
			oNode1 = (aDown[i + 1].parentNode.parentNode.id == 'cine_city_' + iCty + '_films') ? aDown[i + 1].parentNode : aDown[i + 1].parentNode.parentNode;
			oNode2 = (oThis.parentNode.parentNode.id == 'cine_city_' + iCty + '_films') ? oThis.parentNode : oThis.parentNode.parentNode;
			$('cine_city_' + iCty + '_films').insertBefore(oNode1, oNode2);
			nlCheckCineFilmsArrows(iCty);
			break;
		}
	}
}

function nlAddCineFilms(iCty)
{
	var oXhr = new xhr();
	oXhr.get(_home + 'xhr.php', 'xhrfile=nl_cine_add_film&city=' + iCty, 'xhrNlAddCineFilms(\'' + iCty + '\')', 'xhrNlAddCineFilmsWait(\'' + iCty + '\')');
	return false;
}

function xhrNlAddCineFilmsWait(iCty)
{
	hideElem('cine_city_' + iCty + '_add_film_button');
	showElem('cine_city_' + iCty + '_add_film_loading', true);
}

function xhrNlAddCineFilms(iCty, oThis)
{
	hideElem('cine_city_' + iCty + '_add_film_loading');
	showElem('cine_city_' + iCty + '_add_film_button', true);

	aParams = xhrParseXml(oThis);
	if (aParams['films'])
	{
		oDiv = document.createElement('div');
		oDiv.innerHTML = aParams['films'];
		$('cine_city_' + iCty + '_films').appendChild(oDiv);
		nlCheckCineFilmsArrows(iCty);
	}
	else alert('Aucun film ayant des séances à venir dans cette ville.');
}

function nlRemCineFilm(iCty, oThis)
{
	oThis.parentNode.parentNode.removeChild(oThis.parentNode);
	nlCheckCineFilmsArrows(iCty);
	return false;
}

function nlSendPreview(iNl, iCty)
{
	$('if_newsletter_send').src = 'iframe.php?if=newsletter_send_preview&id=' + iNl + '&city=' + iCty + '&complete=' + ($('f_nl_send_cine_complete').checked ? $('f_nl_cine_max_nb_films').options[$('f_nl_cine_max_nb_films').selectedIndex].value : 0);
	return false;
}

/*******************************************************************************
* AJAX
*******************************************************************************/
// Positionne la fenêtre au niveau de l'ancre spécifiée
function goAnchor(sAnchor)
{
	if (sAnchor)
	{
		if (sAnchor.substring(0,1) == '#') sAnchor = sAnchor.substring(1);
		window.scrollTo(0,(sAnchor == 'top') ? 0 : Position.offsetTop(sAnchor));
	}
	return false; // Pour annuler le click sur un lien
}

function nodeText(oNode)
{
	if (typeof oNode != 'object') return '';
	if (typeof oNode.textContent != 'undefined') return oNode.textContent;
	else return (oNode.firstChild && oNode.firstChild.nodeType == 3) ? oNode.firstChild.data : '';
}

// Parse les données retournés par les requêtes XMLHttpRequest
/*
	Format de la réponse
	<cineclic>
	<param id="param1">texteparam1</param>
	<param id="param2">texteparam2</param>
	...
	<popup id="popup1" width="300">
		<title>titrepopup1</title>
		<content>contenupopup1</content>
	</popup>
	...
	<script>script1</script>
	...
	<item id="item1">texteitem1</item>
	<item id="item2">texteitem2</item>
	...
	</cineclic>
*/
function xhrParseXml(oThis)
{
	var oXml = oThis._responseXML ? oThis._responseXML : oThis._responseText;

	// Si la réponse est bien un objet document XML, la requête s'est bien effectuée
	if (typeof oXml == 'object')
	{
		// Params
		var aRes = new Array();
		aRes['anchor'] = '';
		var sId, sData;
		var aParams = oXml.getElementsByTagName('param');
		for (var i = 0, l = aParams.length; i < l; i++)
		{
			sId = aParams[i].getAttribute('id');
			sData = nodeText(aParams[i]);
//			alert(sId + ' - ' + sData);
			aRes[sId] = sData;
			if (sId == 'refresh') // Rafraichissement de la page coté navigateur
			{
				oThis.sAnchor = '';
				location.href = sData;
			}
			else if (sId == 'title') document.title = sData;
			else if (sId == 'lg')
			{
				oThis._lg = sData;
				// On réinitialise les textes lors des changements de langue
				oThis.setMsg();
			}
			else if (sId == 'params') oThis.aParams = sData;
			else if (sId == 'anchor') goAnchor(sData);
		}

		// Popups
		var sContent, sTitle;
		var aPopups = oXml.getElementsByTagName('popup');
		for (var i = 0, l = aPopups.length; i < l; i++)
		{
			sTitle = nodeText(aPopups[i].childNodes[0]);
			sContent = nodeText(aPopups[i].childNodes[1]);
			if (sTitle && sContent) Popup.open(sTitle, sContent, aPopups[i].getAttribute('id'), aPopups[i].getAttribute('width'));
		}

		// Items portant le nom de l'ID du block dans lequel ils doivent être insérés
		var sJsCode = '';
		var aItems = oXml.getElementsByTagName('item');
		for (var i = 0, l = aItems.length; i < l; i++)
		{
			sId = aItems[i].getAttribute('id');
			sData = nodeText(aItems[i]);

			// On récupère le code javascript contenu dans les éléments retournés
			var sExp = new RegExp('<script type="text/javascript"[^>]*>');
			var aTmp = sData.split(sExp);
			for (var j in aTmp)
			{
				if (aTmp[j])
				{
					var sExp = new RegExp('^(.*)</script>');
					var aJsCode = sExp.exec(aTmp[j]);
					var sExp = new RegExp('(<!--|// -->)','g');
					if (aJsCode) sJsCode += aJsCode[1].replace(sExp,'');
				}
			}

			if (sId == 'test') alert(sData); // Test
			else if ($(sId))
			{
				$(sId).innerHTML = sData;
			}
		}

		// S'il y a du code javascript dans les éléments retournés, on l'exécute
//		if (sJsCode) alert(sJsCode);
		if (sJsCode) eval(sJsCode);

		// Scripts javascript
		var aScripts = oXml.getElementsByTagName('script');
		for (var i = 0, l = aScripts.length; i < l; i++)
		{
//			alert(nodeText(aScripts[i]));
			eval(nodeText(aScripts[i]));
		}

		return aRes;
	}
	else
	{
		sXml = trim(oXml);
		// Debug/test, on affiche le contenu s'il ne commence pas par la bonne balise
		if (sXml) alert(sXml);
		////////
		return false;
	}
}

