/*********************************************
 * INIT DU GESTIONNAIRE D'ERREUR ET DEBUG
 */
ExecuterStack.Errors.attachPrintHandler(function() {
	html = '';
	for(var i = 0; i<this._exceptions.length; i++) {
		html += '<div style="color: #FFF;"><strong>'+this._exceptions[i]['message']+'</strong>';
		html += '<div style="margin-left: 1em; font-size: 0.9em;">' + this._exceptions[i]['trace'].join('<br />') + '</div>';
		html += '</div>';
	}
	if (this._exceptions.length > 0 && $('debug_js_alert') == null) {		
		$('debug_js_alert').style.backgroundColor = 'red';
		div.innerHTML = '+';
	}
	$('debug_js').innerHTML = html;
});
var DefifootDebug = {
	init: function() {
		div = document.createElement('div'); div.id = 'debug_js_alert';	
		Element.insert($('defifoot_body'), {top: div});
		Event.observe('debug_js_alert', 'click', DefifootWindow.updateCompleteFooter);
		Event.observe('debug_js_alert', 'mouseover', DefifootDebug.mouseOver);
		Event.observe('debug_js_alert', 'mouseout', DefifootDebug.mouseOut);
	},
	mouseOver: function() { $('debug_js_alert').innerHTML = '+'; },
	mouseOut: function() { $('debug_js_alert').innerHTML = ($('debug_js_alert').style.backgroundColor=='red')?'+':''; }
};
Event.observe(window, 'load', DefifootDebug.init);
/*********************************************
 * INIT DU SITE
 */
var current_DefifootWebDiv = null;
function def_AfficherErreurJavascript() {
	$('zone_erreur_javascript_message').style.display = 'block';
}
defifoot_setDateHeure = function() {
	if ($('heure') == null) return;
	date_user = new Date();
	time_stamp_user = date_user.getTime();
	time_stamp_defifoot = time_stamp_user + (date_user.getTimezoneOffset()*60*1000) + (3600*1000*1);
	date_user.setTime(time_stamp_defifoot);
	$('heure').innerHTML = date_user.getHours()+':'+date_user.getMinutes()+' ('+date_user.getDate()+'/'+(date_user.getMonth()+1)+'/'+date_user.getFullYear()+')';
}
onloads.push(defifoot_setDateHeure);
var DefifootIni = { 
	isReady: false, 
	isLoaded: false,
	loader: null,
	start: function() {		
		//Si chargé pas la peine
		if (DefifootIni.isLoaded) return;
		if (DefifootIni.isReady && !DefifootIni.isLoaded) {
			DefifootIni.isLoaded = true;
			DefifootIni.loader.stop();
			//Ajustement du pied de page
			DefifootWindow.adjust();
		}
	},
	errorSimulate: function() { coucou(); }
};
var DefifootWindow = {
	_mode: null, _peNews: null, _iTimeNewsFixed: 0,
	activateNouvelleActu: function() {
		DefifootWindow._peNews = new PeriodicalExecuter(function() {
			DefifootWindow._iTimeNewsFixed += 1;
			$('header_img_actu').style.visibility = 'visible';
			if (DefifootWindow._iTimeNewsFixed == 4) {
				$('header_img_actu').style.visibility = 'hidden';
				DefifootWindow._iTimeNewsFixed = 0;
			}
		}, 1);
	},
	adjust: function() {
		if ($('pied_page_contenu') == null) return;
		$('pied_page_contenu').style.display = 'block';
	},
	updateCompleteFooter: function() {
		if ($('pied_page') == null) return;
		if ($('pied_page').getStyle('position') == 'fixed') {
			$('pied_page').setStyle({position: 'relative', zIndex: 3, height: 'auto'});
			$('pied_page_contenu').setStyle({height: 'auto'});
		} else {
			$('pied_page').setStyle({position: 'fixed', zIndex: -1, height: '34px'});
			$('pied_page_contenu').setStyle({height: '34px'});
		}
		
	}
};
//On ajoute la gestion de la modalité à la fenêtre
Object.extend(DefifootWindow, {
	isModalActivated: false,
	activerModal: function() {
		if ($('effet_arriere_plan') == null) {
			//On insère ce qui va permetter de faire l'arrière plan "semi-transparent"
			new Insertion.Top($('defifoot_body'), '<div id="effet_arriere_plan">&nbsp;</div>');
			Event.observe('effet_arriere_plan', 'click', function() { 
				if (current_DefifootWebDiv != null) current_DefifootWebDiv.close();
				Tips.hideAll();
			});
		}
		hauteur_site = ($('site_container').getHeight() + ($('site_extra_container').getHeight()-32));
		if (hauteur_site > document.viewport.getHeight()) {
			$('effet_arriere_plan').style.height = hauteur_site + 'px';    			
		} else {
			$('effet_arriere_plan').style.height = '100%';
		}    		
		$('effet_arriere_plan').style.display = 'block';		
	},
	cancelModal: function() {
		$('effet_arriere_plan').style.display = 'none';
	}
});
Event.observe(window, 'resize', DefifootWindow.adjust);
Event.observe(window, 'load', DefifootIni.start);
//On programme le déclenchement de l'Init au bout de 3 secondes au cas où un code HTML externe bloque le chargement
DefifootIni.loader = new PeriodicalExecuter(DefifootIni.start, 0.3);

/*******************************
 * CLASSES DE GESTION DE L'INTERFACE
 */
var DefifootMenuHeader = {
	onClickMenu: function(menu_name) {
		if ($(menu_name) != null) {
			//On récupère le panel cliqué
			panels = $(menu_name).getElementsByClassName('panel');
			if (panels.length <= 0) {
				return;
			}
			//On regarde si on devra ouvrir ou fermer le panel cliqué
			panel = panels[0];
			if (panel.style.display == 'none' || panel.style.display == '') {
				next_panel_style = 'block';
			} else {
				next_panel_style = 'none';
			}
			//On récupère les panels du header pour tous les cacher
			panels_header = $('menu_header').getElementsByClassName('panel');
			if (panels_header != null) {
				for(var i=0; i<panels_header.length; i++) {
					panels_header[i].style.display = 'none';
				}
			}
			//On met le style recherché
			panel.style.display = next_panel_style;
		}
	}
};
/**
 * Classe pour afficher la publicité carré
 */
var DefifootJsPubliciteCarre = {
	display: function() {
		if ($('publicite_carre') != null) {
			$('publicite_carre').style.display = 'block';
		}
	}
};

DefifootSession = Class.create();
DefifootSession.prototype = {
	isBuilded: false,
	isManagerConnected: false,
	pseudo: null,
	_instance: null,
	initialize: function() {
		if (!this.isBuilded) {
			cookies = SporteoCookiesFactory.get(COOKIE_DOMAIN_NAME);
			if (cookies.getValeurCookie('pseudo_connected') != null) {
				this.isManagerConnected = true;
				this.pseudo = cookies.getValeurCookie('pseudo_connected');
			}
			this.isBuilded = true;
		}
	},
	isConnected: function() {
		return this.isManagerConnected;
	},
	getPseudo: function() {
		return this.pseudo;
	},
	get: function() {
		if (DefifootSession._instance == null) {
			DefifootSession._instance = new DefifootSession();
		}
		return DefifootSession._instance;
	}
}

DefifootWebDivData = { backgroundDataHeight: 0 };
DefifootWebDiv = Class.create();
DefifootWebDiv.prototype = {
    initialize: function(id_element, width) {
    	this.isAfficherOnInit = false;
        this.id_element = id_element;
		this.width = width;
		this.isFadeContenu = false;
		this.isReplaceSite = false;
		this.isNiveauSouris = true;
		this.isFullLargeur = false;
    },
    _changeElementsVisibility: function(is_visible, liste) {
    	if (liste != null) {
    		if (is_visible) {
	    		liste.each(function(e) {e.style.visibility = 'visible';});
    		} else {
    			liste.each(function(e) {e.style.visibility = 'hidden';});
    		}
    	}
    },
    _changeObjectVisibility: function(is_visible) {
    	elements = ['object', 'embed', 'iframe'];
    	sections = ['site_container', 'site_extra_container'];
    	elements_todo = new Array();
    	for(var i=0; i<elements.length; i++) {
    		for(var j=0; j<sections.length; j++) {
    			elts = $(sections[j]).select(elements[i]);    			
    			if (elts != null && elts.length > 0) {
    				elements_todo = elts.inject(elements_todo, function(array, value) {
    					array.push(value); return array;
    				});
    			}
    		}
    	}
    	this._changeElementsVisibility(is_visible, elements_todo);
    },
    _fade: function() {
    	DefifootWindow.activerModal();
		new Effect.Opacity(this.id_element, { duration: 0.5, transition: Effect.Transitions.linear, from: 0.01, to: 1,
			beforeStart: function() {
				current_DefifootWebDiv._afficherGenerique();
			}
		});
	},
	_getRetraitPourCentrer: function() {
		if (this.isFullLargeur) {
			return (-Math.round((this.width / 2)));
		} else {
			return (-$('jeu_gauche').offsetWidth);
		}
	},
	_afficherGenerique: function() {
		this._changeObjectVisibility(false);
		document.getElementById(this.id_element).style.zIndex='999999';
		document.getElementById(this.id_element).style.width = this.width + 'px';
		document.getElementById(this.id_element).style.left='50%';
		document.getElementById(this.id_element).style.marginLeft = this._getRetraitPourCentrer()+'px';
		document.getElementById(this.id_element).style.display='block';
		top_div = 18;
		if (this.isNiveauSouris) {
			top_div = MousePosition.y+20;
		} else {
			if (!this.isReplaceSite) {
				//on rajoute la portion de header que l'on voit
				if (this.header != null) {
					taille_portion = this.header.offsetHeight - Scroll.getMoveVertical();
				} else {
					taille_portion = 0 - Scroll.getMoveVertical();
				}
				(taille_portion < 0) ? taille_portion = 0 : taille_portion = taille_portion;
				if ($(this.id_element).offsetHeight >= document.viewport.getHeight()) {
					top_div += Scroll.getMoveVertical();
				} else {
					top_div += ((document.viewport.getHeight() - $(this.id_element).offsetHeight)/2) + Scroll.getMoveVertical();
				}
				if (taille_portion > 0 && top_div > taille_portion) {
					//je ne fais rien
				} else {
					top_div = taille_portion + top_div;
				}
			} else {
				if (this.header != null) {
					top_div = DefifootWebDivData.backgroundDataHeight;
				} else {
					top_div = 0;
				}
				top_div += 15;
			}
		}
		document.getElementById(this.id_element).style.top=top_div+'px';
	},
	init: function() {
		this.header = $('absolute_background_defifoot');
		//Si un webdiv est déjà en intéraction et que c'est celui que l'on initialise alors on ne fait pas l'init
		is_init = true;
		if (current_DefifootWebDiv != null && current_DefifootWebDiv.id_element == this.id_element) {
			is_init = false;
		}
		if (is_init) {
			if (this.isAfficherOnInit) {
				this.afficher();
			} else {
				//On le rend transparent
				new Effect.Opacity(this.id_element, { duration: 0, transition: Effect.Transitions.linear, from: 0, to: 0 });
			}
		}
	},
	afficher: function() {
		this.header = $('absolute_background_defifoot');
		if (current_DefifootWebDiv != null) {
			current_DefifootWebDiv.close(this);
		} else {
			current_DefifootWebDiv = this;
			if (this.isFadeContenu || this.isReplaceSite) {
				this._fade();
			} else {
				this._afficherGenerique();
			}
		}
	},
	close: function(next_div_to_display) {
		this.header = $('absolute_background_defifoot');
		if (next_div_to_display == null) {
			this._changeObjectVisibility(true);
			DefifootWindow.cancelModal();
		}
		if (current_DefifootWebDiv != null && current_DefifootWebDiv.id_element == this.id_element) {
			current_DefifootWebDiv = null;
		}
		new Effect.Opacity(this.id_element, { duration: 0, transition: Effect.Transitions.linear, from: 0, to: 0, next_div: next_div_to_display,
			afterFinish: function() {
				if (this.next_div != null) {
					this.next_div.afficher();
				}
			}
		});
		document.getElementById(this.id_element).style.display='none';
	}
}
/*
scroollTo
*/
var ScrollTo = {
	x: 0, y: 0, cX:0, cY:0, vX: 1, vY:1,
	start: function(x, y) {
		ScrollTo.x = x; ScrollTo.y = y;
		ScrollTo.cX = Scroll.getMoveHorizontal(); ScrollTo.cY = Scroll.getMoveVertical();
		ScrollTo.go(x,y);
	},
	scrollProgressif: function() {
		while(ScrollTo.cY<ScrollTo.y || ScrollTo.cX<ScrollTo.x) {
			if (ScrollTo.cX < ScrollTo.x) ScrollTo.cX += ScrollTo.vX;
			if (ScrollTo.cY < ScrollTo.y) ScrollTo.cY += ScrollTo.vY;
			scrollTo(ScrollTo.cX,ScrollTo.cY);
		}
	},
	go: function(x, y) {
		scrollTo(x, y);
	}
}