document.setlocation=function(adresse)
	{  document.location=adresse;
	}
document.setlocationFake=function(adresse)
	{  alert('Lien hypertexte\nAdresse : '+adresse+'\nCible :');
	}
function getElement(name, parent)
{	var p, objet;

	if(!parent) parent = document;
	
	// frame
  	if(!objet &&  (p = name.indexOf("?")) > 0)
  	{	objet = getElement(name.substring(p+1), getFrame(name.substring(0,p),parent));
  	}

	// array
  	if (!objet &&  name.match(/^([^\[\]]+)\[([^\]]+)\]$/))
  	{	var n=RegExp.$1
	  	var index=RegExp.$2;
	  	objet=getElement(n)[index];
	}

	// Elements
  	if (!objet &&  name.match(/^([^\.]+)\!([^\.]+)$/))
  	{	objet=getElement(RegExp.$1,parent).elements(RegExp.$2);
	}

	// form
	if (!objet &&  name.match(/^([^\.]+)\.([^\.]+)$/))
	{	var f=parent.forms[RegExp.$1];
		if (f)
		{	// Gestion des langues
			if (f.type && f.type=='lang') 
			{	objet=parent.getElementById(RegExp.$2);
				if (objet && objet.id!=RegExp.$2) objet=null;	//IE n'est pas sensible à la casse!!
			}
			if (!objet) objet=f[RegExp.$2];
		}
	}

	// getElementById
	if(!objet && parent.getElementById)
	{	objet = parent.getElementById(name);
	   if (objet && document.all)
		{	// Countournement bug IE qui ne fait pas la différence entre minuscule et majuscule
			if (objet.id!=name) objet=null;
		}
  	}

	// elements
  	if(!objet && parent.elements)
	{	objet = parent.elements[name];
	}

	// all
  	if(!objet && !(name == parent[name]) && parent.all)
	{	objet = parent.all[name];
	}

	// layers
   for(var i=0; !objet && parent.layers && i < parent.layers.length; i++)
	{	objet = getElement(name,parent.layers[i].document);
	}

  	if(!objet)
	{	//alert('Objet '+name+' non trouvé.');
	}

	return objet;
}

function script_path(scriptname)
{	var d=document.getElementsByTagName("script");
	for (i=0; i<d.length; i++)
	{ if (d[i].src.substr(d[i].src.length-scriptname.length)==scriptname)
		{  return d[i].src.substr(0, d[i].src.length-scriptname.length);
		}
	}
  return '';
}

function getinput(attribut, objet)
{	if (!objet) { alert("getinput"+attribut+"\nObjet obligatoire."); return;}

	if ((typeof objet)=='string')
	{	var el=getElement(objet);
		if (!el) { alert("getinput"+attribut+"\nObjet inconnu.\nNom : "+objet); return;}
		else objet=el;
	}
	if (!objet.type)
	{	if (objet.length) objet.type=objet[0].type;
		else objet.type='';
	}

	var value;

	switch(attribut)
	{  // VALUE
		case 'value':
	      value='';
			switch(objet.type)
			{	case 'text' :
				case 'password' :
				case 'file' :
				case 'hidden' :
				case 'textarea'   :
					switch (getAttribute(objet,'subtype'))
					{	case 'checkbox' :
							//setCheckbox(objet);
							break;
						default:
						   if (objet.getvalue)
							{	try { objet.getvalue(); } catch(e) { }
							}
					}
					value=objet.value;
					break;
				case 'radio' :
					if (objet.length)
					{	for (var i=0; i<objet.length; i++)
						{	if (objet[i].checked)
							{	value=objet[i].value;
								break;
							}
						}
					}	else if (objet.checked) value=objet.value;
					break;
				case 'checkbox' :
					if (objet.length)
					{	value=0;
						for (var i=0; i<objet.length; i++)
						{	if (objet[i].checked) value+=parseInt(objet[i].value);
						}
					}
					else value=(objet.checked?objet.value:0);
					break;
				default:
					if (objet.getvalue)
					{	try { value=objet.getvalue(); } catch(e) { }
					}
					else value=objet.value;
			}
	      break;
	      
		// READONLY
		case 'readonly':
			value=false;
			if (objet.getreadonly)
			{	try { value=objet.getreadonly(); } catch(e) { }
			}
			else value=objet.readonly;
	      break;
	      
		// DISPLAY
		case 'display':
			value='';
			if (objet.getdisplay)
			{	try { value=objet.getdisplay(); } catch(e) { }
			}
			else value=objet.style.display;
	      break;

		// DEFAUT
		default:
		   try { value=objet[attribut]; } catch(e) { alert('getinput'+attribut+' inconnu.'); }
	}
	
	return value;
}

function setinput(attribut,objet,value)
{	if (!objet) { alert("setinputvalue\nObjet obligatoire. "+objet); return false;}

	if ((typeof objet)=='string')
	{ 	var el=getElement(objet);
		if (!el) { alert("setinputvalue\nObjet inconnu. "+objet); return false;}
		else objet=el;
	}
	if (!objet.type)
	{	if (objet.length) objet.type=objet[0].type;
		else objet.type='';
	}

	if ((typeof value)=='object')
	{	value=getinputvalue(value);
	}

	if (typeof value=="undefined") value='';

	switch(attribut)
	{  // VALUE
		case 'value':
			switch (objet.type)
			{	case 'text' :
				case 'password' :
				case 'file' :
				case 'hidden' :
				case 'textarea'   :
					objet.value=value;
					switch (getAttribute(objet,'subtype'))
					{	case '':
							break;
						case 'checkbox' :
							getCheckbox(objet);
							break;
						default:
						   try { objet.setvalue(); } catch(e) { }
					}
					break;
				case 'select-multiple' :
				case 'select-one' :
					var s=-1;
					for (var i=0; i<objet.length; i++)
					{	if (value==objet[i].value && (document.all || objet[i].style.display!='none'))
						{	s=i;
							break;
						}
					}
					objet.selectedIndex=s;
					break;
				case 'radio'      :
					if (objet.length)
					{	for (var i=0; i<objet.length; i++)
						{	if (value==objet[i].value)
							{	objet[i].checked=true;
								break;
							}
							else objet[i].checked=false;
						}
					}
					else objet.checked=(value==objet.value);
					break;
				case 'checkbox'   :
					if (objet.length)
					{	for (var i=0; i<objet.length; i++)
						{	objet[i].checked=(objet[i].value&value?true:false);
						}
					} else objet.checked=(objet.value&value?true:false);
					break;
				default:
					if (objet.setvalue)
					{	try { objet.setvalue(value); } catch(e) {}
					}
					else objet.value=value;
			}
			break;
			
		// READONLY
		case 'readonly':
			value=(value?1:0);

			switch (objet.type)
			{	case 'select-multiple' :
				case 'select-one' :
				   var i=objet.selectedIndex;
					if (value!=objet.readonly)
					{  if (value)
					   {  objet.onchangeold=objet.onchange;
					      objet.onchange=function(){this.selectedIndex=i;};
					   }
						else
						{	objet.onchange=objet.onchangeold;
						   objet.onchangeold=null;
						}
						objet.readonly=value;
					}
					break;
				case 'radio' :
				case 'checkbox' :
				   var v=getinputvalue(objet);
					if (value!=objet.readonly)
					{  if (value)
					   {  objet.onclickold=objet.onclick;
					      objet.onclick=function(){ setinputvalue(objet,v); };
					   }
						else
						{	objet.onclick=objet.onclickold;
						   objet.onclickold=null;
						}
						objet.readonly=value;

						if (objet.length)
						{	for (var i=0; i<objet.length; i++)
							{	if (value)
							   {  objet[i].onclick=objet.onclick;
							   }
								else
								{	objet[i].onclick=null;
								}
							}
						}
					}
					break;
				default:
					objet.readOnly=value;
					if (objet.setreadonly)
					{	try { objet.setreadonly(); } catch(e) { }
					}
					else 
					{  if (getAttribute(objet,'subtype')) setCheckboxReadonly(objet.name,objet.name.toLowerCase()+'_',value);
					}
			}
	      break;

		// DISPLAY
		case 'display':
			if (objet.setdisplay)
			{	try { objet.setdisplay(value); } catch(e) { }
			}
			else objet.style.display=value;
			break;

		// DEFAUT
		default:
		   try { objet[attribut]=value; } catch(e) { alert('setinput'+attribut+' inconnu.'); }
	}
}


function getinputvalue(objet)
{	return getinput('value',objet);
}

function setinputvalue(objet,value)
{	return setinput('value',objet,value);
}

function getinputreadonly(objet)
{	return getinput('readonly',objet);
}

function setinputreadonly(objet,value)
{	return setinput('readonly',objet,value);
}

function getinputdisplay(objet)
{	return getinput('display',objet);
}

function setinputdisplay(objet,value)
{	return setinput('display',objet,value);
}

function setinputvalues(to, from)
{	if ((typeof to)=='string') to=getElement(to);
	if ((typeof from)=='string') from=getElement(from);
	for (var i=2; i<arguments.length; i++)
	{	setinputvalue(to[arguments[i]],from?getinputvalue(from[arguments[i]]):'');
	}
}

function getAttribute(el,name)
{	if ((typeof el)=='string') el=getElement(el);
	if (!el) { /*alert('getAttribute(null,'+name+')');*/ return; }
	if ((typeof el)=='undefined') { /*alert('getAttribute(el,'+name+')');*/ return; }
	if (el[name]) return el[name];
	if (el.attributes && el.attributes[name]) return el.attributes[name].value;
	return null;
}
function setAttribute(el,name,value)
{	if ((typeof el)=='string') el=getElement(el);
	else if ((typeof el)=='undefined') { alert('setAttribute(el,'+name+','+value+')'); return; }

	if (el[name]) el[name]=value;
	if (el.attributes)
	{	if (el.attributes[name]) el.attributes[name].value=value;
		else el.setAttribute(name,value);
	}
}

function getOpacity(objet)
{	if ((typeof objet)=='string') objet=getElement(objet);
	if( objet.style.opacity) value=objet.style.opacity * 100;
	else value=100;
	return value;
}

function setOpacity(objet,value)
{	if ((typeof objet)=='string') objet=getElement(objet);
	try { objet.style.opacity = (value / 100);	} catch(e) { };
	try { objet.style.filter = "alpha(opacity="+value+")";	} catch(e) {};
	try { objet.style.MozOpacity = (value / 100);	} catch(e) {};
	try { objet.style.KhtmlOpacity = (value / 100);	} catch(e) {};
}

var urlblank="about:blank";

function getFrame(name,parent)
{	if(!parent) parent = document;
	var f=null;
	if (parent.frames && parent.frames[name] && parent.frames[name].window && parent.frames[name].window.document)
	{	f=parent.frames[name].window.document;
	}
	else 
	{	var el=getElement(name,parent);
		if (el && el.contentWindow && el.contentWindow.document)
			f=el.contentWindow.document;
	}
	return f;
}

function getFrameForm(frame,form)
{	return getFrame(frame).forms[form];
}

function setFrameLocation(frame,value)
{	if (typeof frame=="string") 
	{	//if (document.all) frame=getFrame(frame);
		//else
		frame=getElement(frame);
	}
	//if (document.all) frame.location=value;
	frame.src=value;
}
function getFrameLocation(frame,value)
{	if (typeof frame=="string") 
	{	if (document.all) frame=getFrame(frame);
		else frame=getElement(frame);
	}
	if (document.all)
		return frame.location;
	else
		return frame.src;
}

function setFrameValue(frame,form,name,value)
{	if (form=='') return setinputvalue(getElement(name, getFrame(frame)),value);
	else try { return setinputvalue(getFrame(frame).forms[form][name],value);} catch(e) {};
}

function getFrameValue(frame,form,name)
{	var f=getFrame(frame);
	if (form=='') return getinputvalue(getElement(name, f));
	else try { return getinputvalue(f.forms[form][name]);} catch(e) { /*alert('getFrameValue\n'+frame+'\n'+form+'\n'+name);*/ }
}

function setFrameFocus(frame,form,name,value)
{	if (form=='') return getElement(name, getFrame(frame));
	else return getFrame(frame).forms[form][name];
}

function htmlencode(value)
{	if (value) return value.replace(/</g,'&lt;').replace(/>/g,'&gt;').replace(/"/g,'&quot;');
	else return value;
}

function htmldecode(value)
{	if (value) return value.replace(/&lt;/g,'<').replace(/&gt;/g,'>').replace(/&quot;/g,'"').replace(/&amp;/g,'&');
	else return value;
}

function urlencode(value)
{	return encodeURIComponent(value);
}

function urldecode(value)
{	return decodeURIComponent(value);
}

function navigateur()
{
	ua=navigator.userAgent.toLowerCase();

	if ((ua.indexOf("msie")!=-1) && (ua.indexOf("opera")==-1)) return "msie";
	else if (ua.indexOf("opera")!=-1) return "opera";
	else if (ua.indexOf("netscape")!=-1) return "netscape";
	else if (ua.indexOf("firefox")!=-1) return "firefox";
	else if ((ua.indexOf("mozilla")!=-1) && (ua.indexOf("gecko")!=-1)) return "mozilla";
	else if (ua.indexOf("chrome")!=-1) return "chrome";
	else if (ua.indexOf("safari")!=-1) return "safari";
	else return ua;
}

function charfile(value)
{	if (value.search(/[<>\\\|\"#\*\%:;\,\[\]\{\}]/)>=0)
	{	alert("Les caractères < > \\ | \" # * % : ; , [ ] { } ne sont pas autorisés.");
		return false;
	}
	return true;
}

function charsimple(value)
{	value=value.toLowerCase();
	value=value.replace(/[àáâãäåæ@]/gi,'a');
	value=value.replace(/[éèêë&€]/gi,'e');
	value=value.replace(/[ìíîï]/gi,'i');
	value=value.replace(/[òóôõöø°]/gi,'o');
	value=value.replace(/[ùúûü]/gi,'u');
	value=value.replace(/[ýÿ]/gi,'y');
	value=value.replace(/[ç]/gi,'c');
	value=value.replace(/[ñ]/gi,'n');
	value=value.replace(/[\+\/\\\\~=*><]/gi,'-');
	value=value.replace(/[^a-z0-9\-\_]/gi,'_');
	return value;
}

function input2array(to, from)
{  var n=(typeof from=='string');

	for (var i=2; i<arguments.length; i++)
   {  if (n) to[arguments[i]]=getinputvalue(from+'.'+arguments[i]);
		else to[arguments[i]]=getinputvalue(from[arguments[i]]);
   }
}
function array2input(to, from)
{  var n=(typeof to=='string');
	for (var i=2; i<arguments.length; i++)
   {  if (n) setinputvalue(to+'.'+arguments[i],from?from[arguments[i]]:'');
   	else  setinputvalue(to[arguments[i]],from?from[arguments[i]]:'');
  }
}

function setTagFromArray(idTag,arrayValue)
{	if (typeof idTag=="string") idTag=getElement(idTag);
	if (idTag)
	{	if (idTag.tagName)
		{	if (arrayValue[0]) setinputvalue(idTag,arrayValue[0]);
		}
		else
		{	for (var i=0; i<idTag.length; i++)
			{	if (arrayValue[i]) setinputvalue(idTag[i],arrayValue[i]);
			}
		}
	}
}
function getArrayFromTag(idTag)
{	// Tag -> Array
	if (typeof idTag=="string") idTag=getElement(idTag);
	arrayValue=new Array();
	if (idTag)
	{	if (idTag.tagName)
		{	arrayValue[0]=getinputvalue(idTag);
		}
		else
		{	for (var i=0; i<idTag.length; i++)
			{	arrayValue[i]=getinputvalue(idTag[i]);
			}
		}
	}
	return arrayValue;
}

function parse(obj)
{  var t, s, ok;

	if (typeof obj=="object")
	{
		if (obj.id) s="["+obj.id+"]\n";
		else if (obj.name) s="["+obj.name+"]\n";
		else if (obj.tagName) s="["+obj.tagName+"]\n";
		else if (obj.type) s="["+obj.type+"]\n";
		else s='';
		var attr=Array();
		
		var exc=arguments[3]?arguments[3].split(';'):null;
		var inc=arguments[2]?arguments[2].split(';'):null;
		var vide=arguments[1]?arguments[1]:false;

		for (var i in obj)
    	{  ok=true;
    		if (exc)
			{	for (var j in exc)
				{	if (i.toLowerCase().indexOf(exc[j].toLowerCase())!=-1)
					{	ok=false;
						break;
					}
				}
				if (!ok) continue;
			}
			if (inc)
			{	ok=false;
				for (var j in inc)
				{	if (i.toLowerCase().indexOf(inc[j].toLowerCase())!=-1)
					{	ok=true;
						break;
					}
				}
				if (!ok) continue;
			}
			
			ok=vide || ((obj[i]!=null) && (obj[i]!='none') && (obj[i]!='auto') && (obj[i]!='') && (typeof obj[i]!='undefined'))
			if (!ok) continue;
			
			t=''+obj[i]+'';
			//alert(t+'='+t.indexOf("[native code]"));
			if (t.indexOf("[native code]") == -1) attr.push(i+'="'+t+'"');
		}
		attr.sort();
		for (var i=0; i<attr.length;i++)
			s+=attr[i]+'     /     ';
	}
	else s=obj;

	alert(s);
	return s;
}
function setCheckboxReadonly(name,namecb,value)
{	var v=0, i=0,el;
 	if (typeof namecb=="undefined") { var a=name.split('.'); namecb=a[1]?a[1].toLowerCase():a[0].toLowerCase();}
	while (el=getElement(namecb+i))
	{	setinputreadonly(el,value);
	   i++;
	}
}
function setCheckbox(name,namecb)
{	var v=0, i=0,el;
	if (typeof namecb=="undefined") { var a=name.split('.'); namecb=a[1]?a[1].toLowerCase():a[0].toLowerCase();}
	if (namecb=='') return;
	while (el=getElement(namecb+i))
	{	v+=parseInt(getinputvalue(el));
		i++;
	}
	getElement(name).value=v;
}
function getCheckbox(name,namecb)
{	var v=getinputvalue(name),i=0,el;
	if (typeof namecb=="undefined") 
	{	var a;
		if (typeof name=="string") 
		{	a=name.split('.');  
			namecb=a[1]?a[1].toLowerCase():a[0].toLowerCase();
		}
		else { namecb=name.name.toLowerCase(); if (namecb=='') namecb=name.id.toLowerCase();}
		namecb+='_';
	}
	if (namecb=='') return;
	while (el=getElement(namecb+i))
	{	el.checked=(Math.floor(v/el.value)%2);
		i++;
	}
}

function eventStop(e)
{	if (document.all)
	{	if (window.event)
		{	window.event.cancelBubble = true;
			window.event.returnValue = false;
		}
	}
	else
	{	if (e)
		{	e.preventDefault();
			e.stopPropagation();
		}
	}
}
function eventBreak(e)
{	if (document.all)
	{	if (window.event) window.event.returnValue = false;
	}
	else
	{	if (e) e.stopPropagation();
	}
}
