/********************************
 * EXTENSTION DE PROTOTYPE
 */
Element.addMethods({
	scrollToBottom: function(element) { 
		element = $(element);
		element_height = $(element).getHeight();
		viewport_height = document.viewport.getHeight();
		element_viewport_pos = Element.viewportOffset(element);		
		if (element_height > viewport_height) {
			element.scrollTo();
		} else if (element_viewport_pos.top<0) {
			//L'élément est au dessus du viewport
			element.scrollTo();
		} else if ((element_viewport_pos.top+element_height)>viewport_height) {			
			//L'element sort du viewport, alors on positionne le bas de l'element en pied du viewport
			debordement_height = (element_viewport_pos.top+element_height)-viewport_height;
			new PeriodicalExecuter(element._niceScroll.bind(element, debordement_height, 0.05), 0.05);
		} else {
			//Pas besoin de scroll
		}
		return element;
	},
	_niceScroll: function(element, debordement_height, frequence, pe) {
		if (element._cumulSrollStep == null) {
			element._cumulSrollStep = 0;
		}
		scroll_step = (debordement_height*frequence)/(debordement_height*0.4/150);
		window.scrollBy(0, scroll_step);
		element._cumulSrollStep += scroll_step;
		if (element._cumulSrollStep > debordement_height) {
			pe.stop();
			element._cumulSrollStep = null;
		}		
	}
});
var TimeServerData = {
	init: function(str_date_serveur) {
		TimeServerData.tUser = new Date();
		TimeServerData.tServeur = new Date(str_date_serveur);
	}
};
var TimeServer = Class.create({	
	initialize: function() {
		this._date = TimeServerData.tServeur;
	},
	getDate: function() { return this._date; }
});
/********************************
 * EXTENSTION DE PROTOTIP
 */
var Tooltip = Class.create(Tip, {
	initialize: function($super, element, content, options) {
		options = (options!=null)?options:{};
		if (options.ajaxLoad != null && options.ajaxLoad.events == null)
			options.ajaxLoad.events = {};
		this.optionsTip = options;	
		$super(element, content, options);
  	},
	show: function($super) {
  	  if (this.optionsTip.ajaxLoad != null) {
  		  ajax = new HtmlAjax(this.optionsTip.ajaxLoad.id);
  		  ajax.load(this.optionsTip.ajaxLoad.events);
  	  }
  	  $super();
    }
});
/********************************
 * CHARGEMENT
*/ 
var SporteoJavascriptLoader = Class.create();
SporteoJavascriptLoader.prototype = {
	_methodsInternal: null,
	initialize: function() {
		this._methodsInternal = new Array();
	},
	ajouterInternalCallBack: function(context, method_handle, args) {
		if (! (args instanceof Array)) {
			args = [args];
		}
		this._methodsInternal.push([context, method_handle, args]);
	},
	load: function() {
		for(i=0;i<this._methodsInternal.length;i++) {
			m = this._methodsInternal[i];
			m[1].apply(m[0], m[2]);
		}
	}
};
SporteoJavascriptLoader.instance = new SporteoJavascriptLoader();

var onloads = new Array();
var ext_onloads = new Array();
var SporteoOnload = {
	isLoaded: false,
	load: function() {
		if (SporteoOnload.isLoaded) return;
		SporteoOnload.isLoaded = true;
		//On traite les fonctions à exécuter
		for(var i = 0; i<onloads.length; i++) {
			onloads[i]();
		}
		SporteoJavascriptLoader.instance.load();
	}
};
Event.observe(window, 'load', SporteoOnload.load);
Event.observe(window, 'load', function() {
	for(var i = 0; i<ext_onloads.length; i++) {
		ext_onloads[i]();
	}
});

var is_navigateur_gecko = window.Event ? 1 : 0; // navigateurs Gecko ou IE
var is_ie = (BrowserDetect.browser == 'Explorer');
var document_body = document.body;
if (is_ie && BrowserDetect.version >= 6) {
	document_body = document.documentElement;
}
var MousePosition = {
	x: 0,
	y: 0
}
var Scroll = {
	getMoveHorizontal: function() {
		return ((!is_ie) ? window.pageXOffset : document_body.scrollLeft);
	},
	getMoveVertical: function() {
		return ((!is_ie) ? window.pageYOffset : document_body.scrollTop);
	}
}
var SporteoAjax = {
	isError: function(text_response) {
		try {
			//Est-ce qu'il y a le tag <ajax-response> ?
			if (text_response.match(/\<ajax-response\>/)) {
				return false;
			}
			return true;
		} catch (e) {
			this.afficherAlertNavigateur(e);
			return true;
		}
	},
	getHtmlResponse: function(text) {
		return this.getResponse(text, 'ajax-response');
	},
	getHtmlError: function(text) {
		return this.getResponse(text, 'ajax-error');
	},
	getResponse: function(text, tag_response) {
		tag_response_start = '<'+tag_response+'>';
		tag_response_end = '<\/'+tag_response+'>';
		try {
			text = text.replace(tag_response_start, '');
			text = text.replace(tag_response_end, '');
			while(text.indexOf('__ET__') >= 0) {
				text = text.replace(/__ET__/, '&');
			}
			return text;
		} catch (e) {
			this.afficherAlertNavigateur(e);
		}
		return '';
	},
	afficherErreur: function(message_erreur, id_div_response) {
		try {
			html_message = document.getElementById(id_div_response);
			html_message.innerHTML = message_erreur;
			html_message.style.backgroundColor = '#FCBABA';
			html_message.style.border = '1px solid red';
			html_message.style.textAlign = 'left';
			html_message.style.color = 'red';
			html_message.style.display='block';
			html_message.style.display='block';
			html_message.style.margin = '10px 2px 10px 2px';
			html_message.style.padding = '4px 3px 4px 3px';
			document.location.href='#test';
		} catch(e) {
			this.afficherAlertNavigateur(e);
		}
	},
	afficherAlertNavigateur: function(e) {
		alert('Votre navigateur Internet est obsolète.\nLes navigateurs compatibles sont : \n\t- Internet Explorer 5 (ou supérieur)\n\t- Firefox 1.0 (ou supérieur)\n\t- Opera 8 (ou supérieur)\nDétails de l\'erreur : ' + e);
	}
}
WebForm = function(id_formulaire) {
	//Définition de la classe
	this.f = document.getElementById(id_formulaire);
	this.disable = function() {
		for(i=0; i<this.f.elements.length; i++) {
			this.f.elements[i].disabled = true;
		}
	};
	this.enable =  function() {
		for(i=0; i<this.f.elements.length; i++) {
			this.f.elements[i].disabled = false;
		}
	};
	this.getValue = function(id_champ) {
		try {
			return this.f.elements[id_champ].options[this.f.elements[id_champ].selectedIndex].value;
		} catch (e) {
			//Ce n'est pas un select
			return this.f.elements[id_champ].value;
		}
	};
}
var UtilString = {
	replace: function(string_source, search, replace) {
		return string_source.replace('/' + search + '/', replace);
	}
}
function mouse_position(e) {
	MousePosition.x = Event.pointerX(e);
	MousePosition.y = Event.pointerY(e);
};
Event.observe(document, "mousemove", mouse_position);
var WindowManager = {
	elementBlocked: new Array(),
	registrerElementBlocked: function(id) {
		WindowManager.elementBlocked.push(id);
	},
	unBlock: function() {
		for(i=0; i<WindowManager.elementBlocked.length; i++) {
			$(WindowManager.elementBlocked[i]).hide();
		}
		WindowManager.elementBlocked = new Array();
	},
	isBlocked: function(id) {
		if (WindowManager.elementBlocked.indexOf(id) >= 0) {
			return true;
		}
		return false;
	},
	removeElementBlocked: function(id) {
		elts = new Array();
		for(i=0; i<WindowManager.elementBlocked.length; i++) {
			if (WindowManager.elementBlocked[i] != id) {
				elts.push(WindowManager.elementBlocked[i]);
			}
		}
		WindowManager.elementBlocked = elts
	}
}
Event.observe(document, "mouseup", function(e) { WindowManager.unBlock(); });
