// Appel de methode par introspection en JAVASCRIPT
/*if ( window.test1 ){ test1(); }
var funcName = 'test2';
if ( (typeof funcName == 'string') && (eval('typeof ' + funcName) == 'function') ) {
	eval(funcName+'()');
}*/

String.prototype.Trim = function(){
	return this.replace(/(^\s*)|(\s*$)/g, "");
}
String.prototype.LTrim = function(){
	return this.replace(/(^\s*)/g, "");
}
String.prototype.Rtrim = function(){
	return this.replace(/(\s*$)/g, "");
}


// L'usage est le même que pour la fonction originale : getElementById("identifiant").
if (!document.getElementById) {
	if (document.all){
		document.getElementById=function() {
			if ( typeof(document.all[arguments[0]]) != "undefined")
				return document.all[arguments[0]];
			else
				return null;

		}
	}else if (document.layers){
		document.getElementById=function() {
			if ( typeof(document[arguments[0]]) != "undefined")
				return document[arguments[0]];
			else
				return null;
		}
	}
}
	
	

// Après avoir recréé une fonction JavaScript dans ce même langage, l'étape suivante consiste à pallier aux manques de ce langage. 
// Notamment, nombre de développeurs se sont trouvés frustrés de pouvoir sélectionner un élément que par identifiant avec getElementById(), 
// mais auraient voulu également pouvoir sélectionner l'ensemble des éléments correspondant à une certaine classe - ce que le DOM ne propose pas.
function getElementsByClass(searchClass, node, tag) {
	var classElements = new Array();
	if ( node == null )
		node = document;
		if ( tag == null )
			tag = '*';
	var els = node.getElementsByTagName(tag);
    var elsLen = els.length;
    var pattern = new RegExp("(^|\\s)"+searchClass+"(\\s|$)");
	for (i = 0, j = 0; i < elsLen; i++) {
		if ( pattern.test(els[i].className) ) {
			classElements[j] = els[i];
			j++;
		}
	}
	return classElements;
 }



// Cette fonction est un pas supplémentaire dans l'accès aux balises par JavaScript : 
// viser les balises disposant d'un même attribut d'une valeur donnée.
function getElementsByAttribute(oElm, strTagName, strAttributeName, strAttributeValue) {
	var arrElements = (strTagName == "*" && document.all)? document.all : oElm.getElementsByTagName(strTagName);
   	var arrReturnElements = new Array();
   	var oAttributeValue = (typeof strAttributeValue != "undefined")? new RegExp("(^|\\s)" + strAttributeValue + "(\\s|$)") : null;
   	var oCurrent;
   	var oAttribute;
     	
   	for(var i=0; i<arrElements.length; i++) {
      	oCurrent = arrElements[i];
	   	oAttribute = oCurrent.getAttribute(strAttributeName);
       	if (typeof oAttribute == "string" && oAttribute.length > 0) {
           	if (typeof strAttributeValue == "undefined" || (oAttributeValue && oAttributeValue.test(oAttribute))){
				arrReturnElements.push(oCurrent);
           	}
        }
	}
   	return arrReturnElements;
}
 
// La dernière innovation en la matière est la fonction baptisée $(), issue du projet Prototype et qui sert de 
// remplacement efficace à getElementById(). En effet, grâce à elle, un développeur peut remplacer ces appels de 
// la forme var el = document.getElementById('id'); en var el = $('id'). 
// C'est bien sûr plus court, mais $() va plus loin, en donnant la possibilité d'appeller plusieurs id différents pour 
// obtenir un tableau d'éléments à parcourir ensuite : var el = $('id1', 'id2', 'id3');.
// L'idée de cette version est d'offrir un raccourci non seulement pour getElementById(), mais également 
// getElementsByTagName() et getElementsByClass(), le tout en une seule fonction. 
// En somme, une boîte à outils entière en une seule fonction simple d'usage : l'auteur la surnomme 
// d'ailleurs getElementsByAnything().
function $() {
	var elements = new Array();
    for (var i=0,len=arguments.length;i<len;i++) {
    	var element = arguments[i];
        if (typeof element == 'string') {
        	var matched = document.getElementById(element);
            if (matched) {
            	elements.push(matched);
			} else {
            	var allels = (document.all) ? document.all : document.getElementsByTagName('*');
                var regexp = new RegExp('(^| )'+element+'( |$)');
               	for (var i=0,len=allels.length;i<len;i++) if (regexp.test(allels[i].className)) elements.push(allels[i]);
			}

			if (!elements.length) elements = document.getElementsByTagName(element);
            if (!elements.length) {
            	elements = new Array();
				var allels = (document.all) ? document.all : document.getElementsByTagName('*');
				for (var i=0,len=allels.length;i<len;i++) if (allels[i].getAttribute(element)) elements.push(allels[i]);
			}
			
			if (!elements.length) {
				var allels = (document.all) ? document.all : document.getElementsByTagName('*');
                for (var i=0,len=allels.length;i<len;i++) if (allels[i].attributes) for (var j=0,lenn=allels[i].attributes.length;j<lenn;j++) if (allels[i].attributes[j].specified) if (allels[i].attributes[j].nodeValue == element) elements.push(allels[i]);
			}
		} else {
			elements.push(element);
		}
	}//end of for
	
	if (elements.length == 1) {
		return elements[0];
	} else {
		return elements;
	}
}

//Ouvre une nlle fenetre de navigation web avec les options adéquates
function newWindow(mypage,myname,w,h,features) 
{
	var winl = 0; 
	var wint = 0;
	if(screen.width){
  		winl = (screen.width-w)/2;
		wint = (screen.height-h)/2;
	}else{
  		winl = 0;
  		wint =0;
	}

	if (winl < 0) winl = 0;
  	if (wint < 0) wint = 0;
  	var settings = 'menubar=no, status=no, scrollbars=no, menubar=no,';
  	settings += 'width=' + w + ',';
	settings += 'height=' + h + ',';
  	settings += 'top=' + wint + ',';
  	settings += 'left=' + winl + ',';
  	settings += features;

	myname = deleteAllChars(myname,' ');
  	var win = window.open(mypage,myname,settings);
  	win.focus();
}




/*
// Bloque le menu l'empêche d'apparaître
function nocontextmenu() {	
	event.cancelBubble = true
	event.returnValue = false;
	return false;
}
document.oncontextmenu = nocontextmenu;

// Bloque le clic droit 
function norightclick(e)
{	
	if (window.Event)	{
			if (e.which == 2 || e.which == 3)
				return false;	
	}
	else if (event.button == 2 || event.button == 3)		
	{
		event.cancelBubble = true
		event.returnValue = false;
		return false;		
	}	
}
document.onmousedown = norightclick;
*/


//Fonction d'impression
function doPrint() {
	if (window.print) {
		setTimeout('window.print();',200);
	}
}


// Fonction d'ajout au Favoris sous IE et FIREFOX
function favoris(site_name, site_url) {
	if ( navigator.appName != 'Microsoft Internet Explorer' )
	{
		window.sidebar.addPanel(site_name,site_url,'');
	}
	else {
		window.external.AddFavorite(site_url, site_name);
	}
}


// get Context 
function getContext(){
	var tmp = document.location.href.split('/');
	var result;

	if (tmp[3].indexOf('.') > 0) 
		result = '/';
	else 	
		result = '/' + tmp[3] + '/';
	
	return result;
}




function getRandomFromNowDate(){
	var now = new Date();
	var hour = now.getHours();
	var minute = now.getMinutes();
	var second = now.getSeconds();
	var day = now.getDate();
	var month = now.getMonth()+1;
	var year = now.getYear();
	return ''+day+month+year+hour+minute+second;
}

