/*
    dw_sizerdx.js version date: Feb 2006
    // pour url + ?
    requires dw_cookies.js
*/

/*************************************************************************
  This code is from Dynamic Web Coding at dyn-web.com
  Copyright 2004-6 by Sharon Paine 
  See Terms of Use at www.dyn-web.com/bus/terms.html
  regarding conditions under which you may use this code.
  This notice must be retained in the code as is!
*************************************************************************/

var dw_fontSizerDX = {
    sizeUnit:       "px",
    defaultSize:    14,
    maxSize:        24,
    minSize:        10,
    dixsize:		12,
    queryName:      "dw_fsz",   // name to check query string for when passing size in URL
    queryNum:       true,       // check query string for number only (eg. index.html?18 )
    adjustList: [],             // set method populates

setDefaults:function(unit,dflt,mn,mx,sels){
	this.sizeUnit=unit;		this.defaultSize=dflt;
	this.maxSize=mx;		this.minSize=mn;
	if(sels)this.set(dflt,mn,mx,sels);
	},
	
	set:function(dflt,mn,mx,sels){
		var ln=this.adjustList.length;
		for(var i=0;sels[i];i++){
			this.adjustList[ln+i]=[];
			this.adjustList[ln+i]["sel"]=sels[i];
			this.adjustList[ln+i]["dflt"]=dflt;
			this.adjustList[ln+i]["min"]=mn||this.minSize;
			this.adjustList[ln+i]["max"]=mx||this.maxSize;
            // hold ratio of this selector's default size to this.defaultSize for calcs in adjust fn		
			this.adjustList[ln+i]["ratio"]=this.adjustList[ln+i]["dflt"]/this.defaultSize;
			}
		},


	init:function(){
	if(!document.getElementById||!document.getElementsByTagName)return;
// pour codage a été ajouté ligne ci-dessus : ||!dw_fontSizerDX.ready
//	if(!document.getElementById||!document.getElementsByTagName||!dw_fontSizerDX.ready)return;
	var size,sizerEl,i;
// début de la zone de changement du script pour url?
	size=getValueFromQueryString(this.queryName,this.queryNum);
		if(isNaN(parseFloat(size))||size>this.maxSize||size<this.minSize){
				size=getCookie("fontSize");
				if(isNaN(parseFloat(size))||size>this.maxSize||size<this.minSize){
					size=this.defaultSize;
				}
			}
// fin de la zone de changement du script pour url?	
			this.curSize=this.defaultSize;  // create curSize property to use in calculations
			sizerEl=document.getElementById('sizer');
			if(sizerEl)sizerEl.style.display="block";
			// if neither set nor setDefaults populates adjustList, apply sizes to body and td's
			if(this.adjustList.length==0){
				this.setDefaults(this.sizeUnit,this.defaultSize,this.minSize,this.maxSize,['body','td']);
			}
			if(size!=this.defaultSize)this.adjust(size-this.defaultSize);
		},


	adjust:function(n){
// pour codage a été ajouté ligne ci-dessous : ||!dw_fontSizerDX.ready
//		if(!this.curSize||!dw_fontSizerDX.ready)return;
		if(!this.curSize)return; // set in init
		var alist,size,list,i,j;
		// check against max/minSize
		if(n>0){
			if(this.curSize+n>this.maxSize)n=this.maxSize-this.curSize;
		}else if(n<0){
			if(this.curSize+n<this.minSize)n=this.minSize-this.curSize;
		}
		if(n==0)return;
		this.curSize+=n;
        // loop through adjustList, calculating size, checking max/min
		alist=this.adjustList;
		for(i=0;alist[i];i++){
			size=this.curSize*alist[i]['ratio']; // maintain proportion
			size=Math.max(alist[i]['min'],size);size=Math.min(alist[i]['max'],size);
			list=dw_getElementsBySelector(alist[i]['sel']);
			for(j=0;list[j];j++){list[j].style.fontSize=size+this.sizeUnit;}
		}
		setCookie("fontSize",this.curSize,180,"/");
	},


	reset:function(){
// pour codage a été ajouté ligne ci-dessous : ||!dw_fontSizerDX.ready
//	if(!this.curSize||!dw_fontSizerDX.ready)return;
		if(!this.curSize)return;
		var alist=this.adjustList,list,i,j;
		for(i=0;alist[i];i++){
			list=dw_getElementsBySelector(alist[i]['sel']);
			for(j=0;list[j];j++){
                // Reset adjustList elements to their default sizes
                // list[j].style.fontSize = alist[i]['dflt'] + this.sizeUnit;
				list[j].style.fontSize='';  // restores original font size
			}
		}
		this.curSize=this.defaultSize;
		deleteCookie("fontSize","/");
	},
	
	resetdix:function(){
		if(!this.curSize)return;
		var alist=this.adjustList,list,i,j;
		for(i=0;alist[i];i++){
			list=dw_getElementsBySelector(alist[i]['sel']);
			for(j=0;list[j];j++){
				list[j].style.fontSize='12';
			}
		}
		this.curSize=12;
		setCookie("fontSize",this.curSize,180,"/");
	}

};


		// resource: simon.incutio.com/archive/2003/03/25/getElementsBySelector
function dw_getElementsBySelector(selector){
	if(!document.getElementsByTagName)return[];
	var nodeList=[document],tokens,bits,list,col,els,i,j,k;
	selector=selector.normalize();
	tokens=selector.split(' ');
	for(i=0;tokens[i];i++){
		if(tokens[i].indexOf('#')!=-1){  // id
			bits=tokens[i].split('#');
			var el=document.getElementById(bits[1]);
			if(!el)return[];
			if(bits[0]){  // check tag
				if(el.tagName.toLowerCase()!=bits[0].toLowerCase())return[];
			}
			for(j=0;nodeList[j];j++){  // check containment
				if(nodeList[j]==document||dw_contained(el,nodeList[j]))
					nodeList=[el];
				else return[];
			}
// continue; a été supprimé
		}else if(tokens[i].indexOf('.')!=-1){  // class
			bits=tokens[i].split('.');col=[];
			for(j=0;nodeList[j];j++){
				els=dw_getElementsByClassName(bits[1],bits[0],nodeList[j]);
				for(k=0;els[k];k++){col[col.length]=els[k];}
			}
			nodeList=[];
			for(j=0;col[j];j++){nodeList.push(col[j]);}
// continue; a été supprimé		
		}else{  // element
			els=[];
			for(j=0;nodeList[j];j++){
				list=nodeList[j].getElementsByTagName(tokens[i]);
				for(k=0;list[k];k++){els.push(list[k]);}
			}
			nodeList=els;
		}
	}
	return nodeList;
}
// ce ; a été ajouté :
;

function dw_getElementsByClassName(sClass,sTag,oCont){
	var result=[],list,i;
	var re=new RegExp("\\b"+sClass+"\\b","i");
	oCont=oCont?oCont:document;
	if(document.getElementsByTagName){
		if(!sTag||sTag=="*"){
			list=oCont.all?oCont.all:oCont.getElementsByTagName("*");
		}else{
			list=oCont.getElementsByTagName(sTag);
		}
		for(i=0;list[i];i++)
			if(re.test(list[i].className))result.push(list[i]);
	}
	return result;
}
// ce ; a été ajouté :
;


// cette fonction est entièrement nouvelle :
function getValueFromQueryString(
	varName,bReturn){
		var val="";
		if(window.location.search){
			var qStr=window.location.search.slice(1);
			var ar=qStr.split("&");
			var get=[],ar2;
				for(var i=0;ar[i];i++){
					if(ar[i].indexOf("=")!=-1){ar2=ar[i].split("=");get[ar2[0]]=ar2[1];
				}
			}val=get[varName];
			if(!val&&bReturn){val=qStr;}
		}
	return val;
};


	// returns true of oNode is contained by oCont (container)
function dw_contained(oNode,oCont){
	if(!oNode)return; // in case alt-tab away while hovering (prevent error)
	while(oNode=oNode.parentNode)if(oNode==oCont)return true;
	return false;
};


if(!Array.prototype.push){  // ie5.0
	Array.prototype.push=function(){
		for(var i=0;arguments[i];i++)this[this.length]=arguments[i];
		return this[this.length-1]; // return last value appended
	}
};


String.prototype.normalize=function(){
	var re=/\s\s+/g;
	return this.trim().replace(re," ");
};


String.prototype.trim=function(){
	var re=/^\s+|\s+$/g;
	return this.replace(re,"");
};