// JavaScript Document
function SuperClass(){this.timeout=new Array();}

/************** Pour gérer tous type d'évenements (click, load,mouveover,mousemove...) sans écrasement ***********************/
SuperClass.prototype.addEvent = function(obj,event,fct){
	if(obj.attachEvent){obj.attachEvent('on'+event,fct);}
    else{obj.addEventListener(event,fct,false);}
}
/************************************************************************/

/************** Pour supprimer évenements ajoutés avec addEvent ***********************/
SuperClass.prototype.removeEvent = function(obj,event,fct){
	if(obj.detachEvent){obj.detachEvent('on'+event,fct);}
    else{obj.removeEventListener(event,fct,false);}
}
/************************************************************************/

/****** pr récup le noeud HTML sur lequel s'est déclenché l'évenement (équivalent à this en DOM-0) ***/
SuperClass.prototype.getThisFromEvent=function(event){
	if(event && window.event){return window.event.srcElement;}
	else if(event.target){return event.target;}
}
/******************************************************************************************************/

/********** pr stopper un évenement (genre redirection lors d'un click sur un lien *****/
SuperClass.prototype.cancelEvent=function(event){
	if(event && event.stopPropagation && event.preventDefault){
		event.stopPropagation();
		event.preventDefault();
	}
	else if(event && window.event){
		window.event.cancelBubble = true;
		window.event.returnValue = false;
	}
	return false;
}
/*************************************************************************/

/**********  *****/
SuperClass.prototype.isTheSameStyle=function(element,style,newId){
var oldStyleValue=this.getCssStyleValue(element, style);
var oldId=element.id;
element.id=newId;
var newStyleValue=this.getCssStyleValue(element, style);

var retour=false;
if(oldStyleValue==newStyleValue){retour=true;}
element.id=oldId;

return retour;
}
/*************************************************************************/

/**************** pour vérif chargement d'une image **************************/
SuperClass.prototype.verifChargementImg = function (img, callback){
	if(typeof(img)=="string"){var tempImg=img; img=document.createElement("img"); img.src=tempImg;}
	
	if(img.complete==true){
		if(callback){callback();}
	}
	else{
		if(img.complete==undefined){
			if(callback){img.onload=function(){callback();};}
		}
		else{
			var localThis = this;
			this.timeout[this.timeout.length]=window.setTimeout(function(){localThis.verifChargementImg(img, callback)}, 40);	
		}
	}
}
/******************************************************************************/

/* renvoie style défini dans la feuille de style, de l'élément passé en param */
SuperClass.prototype.getCssStyleValue = function(element, prop) {
    if (typeof(element)=='string') element=document.getElementById(element);

	if (element.style[prop]) {
		// inline style property
		return element.style[prop];
	} else if (element.currentStyle) {
		// external stylesheet for Explorer
		if(prop.toLowerCase()=='opacity') prop='filter';
		return element.currentStyle[prop];
	} else if (document.defaultView && document.defaultView.getComputedStyle) {
		// external stylesheet for Mozilla and Safari 1.3+
		prop = prop.replace(/([A-Z])/g, "-$1").toLowerCase();
		return document.defaultView.getComputedStyle(element,"").getPropertyValue(prop);
	} else {
		return null;
	}
}
/***********************************************************************************/


/* retourne un tableau contenant tous les éléments appartenant a la classe CSS passée en paramètre */
SuperClass.prototype.getElementsByClassName = function (className, tag, elm){
	if (document.getElementsByClassName) {
		getElementsByClassName = function (className, tag, elm) {
			elm = elm || document;
			var elements = elm.getElementsByClassName(className),
				nodeName = (tag)? new RegExp("\\b" + tag + "\\b", "i") : null,
				returnElements = [],
				current;
			for(var i=0, il=elements.length; i<il; i+=1){
				current = elements[i];
				if(!nodeName || nodeName.test(current.nodeName)) {
					returnElements.push(current);
				}
			}
			return returnElements;
		};
	}
	else if (document.evaluate) {
		getElementsByClassName = function (className, tag, elm) {
			tag = tag || "*";
			elm = elm || document;
			var classes = className.split(" "),
				classesToCheck = "",
				xhtmlNamespace = "http://www.w3.org/1999/xhtml",
				namespaceResolver = (document.documentElement.namespaceURI === xhtmlNamespace)? xhtmlNamespace : null,
				returnElements = [],
				elements,
				node;
			for(var j=0, jl=classes.length; j<jl; j+=1){
				classesToCheck += "[contains(concat(' ', @class, ' '), ' " + classes[j] + " ')]";
			}
			try	{
				elements = document.evaluate(".//" + tag + classesToCheck, elm, namespaceResolver, 0, null);
			}
			catch (e) {
				elements = document.evaluate(".//" + tag + classesToCheck, elm, null, 0, null);
			}
			while ((node = elements.iterateNext())) {
				returnElements.push(node);
			}
			return returnElements;
		};
	}
	else {
		getElementsByClassName = function (className, tag, elm) {
			tag = tag || "*";
			elm = elm || document;
			var classes = className.split(" "),
				classesToCheck = [],
				elements = (tag === "*" && elm.all)? elm.all : elm.getElementsByTagName(tag),
				current,
				returnElements = [],
				match;
			for(var k=0, kl=classes.length; k<kl; k+=1){
				classesToCheck.push(new RegExp("(^|\\s)" + classes[k] + "(\\s|$)"));
			}
			for(var l=0, ll=elements.length; l<ll; l+=1){
				current = elements[l];
				match = false;
				for(var m=0, ml=classesToCheck.length; m<ml; m+=1){
					match = classesToCheck[m].test(current.className);
					if (!match) {
						break;
					}
				}
				if (match) {
					returnElements.push(current);
				}
			}
			return returnElements;
		};
	}
	return getElementsByClassName(className, tag, elm);
};
/****************************************************************************************************/


/* renvoie position des scrollbars */
SuperClass.prototype.getScrollXY = function() {
  var scrOfX = 0, scrOfY = 0;
  if( typeof( window.pageYOffset ) == 'number' ) {
    //Netscape compliant
    scrOfY = window.pageYOffset;
    scrOfX = window.pageXOffset;
  } else if( document.body && ( document.body.scrollLeft || document.body.scrollTop ) ) {
    //DOM compliant
    scrOfY = document.body.scrollTop;
    scrOfX = document.body.scrollLeft;
  } else if( document.documentElement && ( document.documentElement.scrollLeft || document.documentElement.scrollTop ) ) {
    //IE6 standards compliant mode
    scrOfY = document.documentElement.scrollTop;
    scrOfX = document.documentElement.scrollLeft;
  }
  return [ scrOfX, scrOfY ];
}
/*********************************************************************************************/


/* renvoie taille de la zone d'affichage */
SuperClass.prototype.getViewSize = function() {
  var myWidth = 0, myHeight = 0;
  if( typeof( window.innerWidth ) == 'number' ) {
    //Non-IE
    myWidth = window.innerWidth;
    myHeight = window.innerHeight;
  } else if( document.documentElement && ( document.documentElement.clientWidth || document.documentElement.clientHeight ) ) {
    //IE 6+ in 'standards compliant mode'
    myWidth = document.documentElement.clientWidth;
    myHeight = document.documentElement.clientHeight;
  } else if( document.body && ( document.body.clientWidth || document.body.clientHeight ) ) {
    //IE 4 compatible
    myWidth = document.body.clientWidth;
    myHeight = document.body.clientHeight;
  }
  /// pr enlever espace occupé par scrollbars
  if(typeof(window.innerHeight) == 'number'){
	 if( document.documentElement && ( document.documentElement.clientWidth || document.documentElement.clientHeight ) ){
		myWidth=myWidth-Math.max((window.innerWidth - document.documentElement.clientWidth),0);
		myHeight=myHeight-Math.max((window.innerHeight - document.documentElement.clientHeight),0);
	}
	/*else if( document.body && ( document.body.clientWidth || document.body.clientHeight ) ){
		myWidth=myWidth-(window.innerWidth - document.body.clientWidth);
		myHeight=myHeight-(window.innerHeight - document.body.clientHeight);
	 }*/
  }  
   return [ myWidth, myHeight ];
}
/*********************************************************************************************/

/** renvoie version d'IE ou -1 si pas IE **/
SuperClass.prototype.vIE=function(){return (navigator.appName=='Microsoft Internet Explorer')?parseFloat((new RegExp("MSIE ([0-9]{1,}[.0-9]{0,})")).exec(navigator.userAgent)[1]):-1;}
/****************************************************************************************/

/**** savoir si un élément se trouve dans un tableau *************************************/
SuperClass.prototype.in_array = function (needle, haystack, strict) {
    var found = false, key, strict = !!strict;
    for(key in haystack){
        if((strict && haystack[key]===needle) || (!strict && haystack[key]==needle)){
            found = true;
            break;
        }
    }
    return found;
}
/*****************************************************************************************/
SuperClass.prototype.get_key_in_array = function (needle, haystack, strict) {
    var found = null, key, strict = !!strict;
    for (key in haystack) {
        if ((strict && key === needle) || (!strict && key == needle)) {
            found = key;
            break;
        }
    }
    return found;
}

/**************************** explode comme en PHP ************************/
SuperClass.prototype.explode = function(delimiter, string, limit) { 
    var emptyArray = {0:''};
    
    // third argument is not required
    if(arguments.length<2 || typeof(arguments[0])=='undefined' || typeof(arguments[1])=='undefined'){return null;}
 
    if(delimiter==='' || delimiter===false || delimiter===null){return false;}
 
    if(typeof(delimiter)=='function' || typeof(delimiter)=='object' || typeof(string)=='function' || typeof(string)=='object'){return emptyArray;}
 
    if (delimiter===true) {delimiter='1';}
    
    if (!limit){return string.toString().split(delimiter.toString());}
	else {
        // support for limit argument
        var splitted = string.toString().split(delimiter.toString());
        var partA = splitted.splice(0, limit - 1);
        var partB = splitted.join(delimiter.toString());
        partA.push(partB);
        return partA;
    }
}
/*******************************************************************************/



/* récupere position x ou y (paramètre "attr" : "offsetLeft" => x, "offsetTop" => y)  en pixels de l'élément passé en paramètre "element" */
SuperClass.prototype.calculeOffset = function(element,attr){
  var offset=0;
  while(element){
    offset+=element[attr];
    element=element.offsetParent;
  }
  return offset;
}
/* récupere position x en pixels de l'élément passé en paramètre */
SuperClass.prototype.calculeOffsetLeft = function(r){
  return this.calculeOffset(r,"offsetLeft");
}
/* récupere position y en pixels de l'élément passé en paramètre */
SuperClass.prototype.calculeOffsetTop = function(r){
  return this.calculeOffset(r,"offsetTop");
}
/*************************************************************************************/

/******************* renvoie coordonnées souris *****************************/
SuperClass.prototype.getMouseCoords = function (event){
	return [event.clientX, event.clientY];
}
/***************************************************************************/

SuperClass.prototype.clearAllTimeout = function (){
	for(var i=0; i<this.timeout.length; i++){
		window.clearTimeout(this.timeout[i]);
	}	
	this.timeout.splice(0,i);	
}

SuperClass.prototype.trim=function(str,charlist) {
    var whitespace;    
    if(!charlist){whitespace=' \n\r\t\f\x0b\xa0\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u200b\u2028\u2029\u3000';
    } else{whitespace=charlist.replace(/([\[\]\(\)\.\?\/\*\{\}\+\$\^\:])/g, '\$1');}
  
	for(var i=0; i<str.length; i++) {
		if(whitespace.indexOf(str.charAt(i))===-1){
			str = str.substring(i);
			break;
		}
	}
	for(i=str.length-1; i>=0; i--) {
		if (whitespace.indexOf(str.charAt(i))===-1){
			str=str.substring(0, i + 1);
			break;
    	}
	}
	return whitespace.indexOf(str.charAt(0))===-1?str:'';
}

SuperClass.prototype.eregi=function(find, chaine) {
	var norm = new RegExp(find);
	return norm.exec(chaine)!=null;
}